贝叶斯算法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....");
 
{
// 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....");
 
补充:软件开发 , C# ,
上一个:对访问器的访问修饰符的限制
下一个:C#时间相减、C#计算时间间隔
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,
部份技术文章来自网络,