程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 貝葉斯算法C#版實現單詞拼寫檢查器

貝葉斯算法C#版實現單詞拼寫檢查器

編輯:C#入門知識

最近在看貝葉斯算法,該算法在不少方面都有應用,已有的開發實例有:拼寫檢查、文本分類、垃圾郵件過濾、中文分詞等方面。根據需要,決定實現前面兩種,拼寫檢查已經實現,先貼於此。

程序效果圖:

\

 

有關貝葉斯算法的學習和拼寫糾正方面請參照:原文這裡,徐宥的翻譯版這裡

 

程序流程:

1.根據訓練語料統計訓練語料中每個單詞的出現次數、頻率,計算出p(h)先驗概率;訓練語料在此下載 big.txt,內含幾百萬單詞,可作為語料使用。

2.計算條件概率p(D|h),即假設(猜測)的單詞是我們輸入的單詞的概率大小,這裡使用了編輯距離的概念,簡化起見,計算了所有的編輯距離為1的可能編輯,其他請Google或參見這裡

3.根據Bayes原理,後驗概率與每個輸入的生成概率p(D)無關,所以p(h|D)∝ P(h) * P(D | h),計算出最可能的拼寫。

 

說明:

1.對於語料中沒有出現的單詞,采用平滑處理1/N,N為訓練樣本中所有單詞的出現次數之和。

2.條件概率采用1/M,M為所有可能的單詞之和,如speling的每一個猜測單詞的條件概率1/290,290是編輯距離為1的所有可能的猜測。(也可以將26個字母表示為矩陣,求出每個字母在鍵盤上的距離,相信會更有說服力。俄羅斯有人在1973年做過這方面研究。)

3.訓練語料進性了簡單的預處理,統一轉換為小寫字母。

4.輸入exit可以退出程序。

 

關鍵代碼:

入口:

\\代碼  static void Main(string[] args)
        {
           // bool trainFlag = false;//語料是否已經訓練
            string currentPath = Environment.CurrentDirectory.ToString()+ "/big.txt";          

            double sumWordNum = 0.0;//總的單詞數目
            Hashtable htProbability = new Hashtable();//存放所有訓練語料中每個單詞的概率
            Hashtable htTmp = new Hashtable();//臨時ht 存放訓練語料中每個單詞的出現次數

            Hashtable recommandWordHt = new Hashtable();//拼寫檢查後推薦的准正確單詞       

            Train train = new Train();//
            Task task = new Task();

            Console.WriteLine("System is now training the Corpus....");
     

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved