图1 百度的拼写检查错误分为 Non-word Errors和Real-word Errors。前者指非法单词;后者指那些拼写错误后的词仍然是合法的情况,如将“there”错误拼写为“three”(形近)。本文讨论的是Non-word Errors。
网上搜了一下,用的大都是贝叶斯定理。
思想
记P(a|b)为:输入字符串b情况下,推断出字符串a的概率。
记c为正确的单词,w为错误的输入,那么对于例子中的纠错,要求的就是
(2)
对于同一个输入,式(2)中的分母不变,所以用于排序的话,只求分子就行。P(w|c)记为1,P(c)记为单词c在语料中的出现频率,所以得到
(3)
实现
1.训练语料得到一个map<单词,频数>。若输入字符串word在map中,就不用纠错。
2.计算编辑距离为1的字符串
记set1=编辑距离为1的字符串,set2= set1 in map。
对于set2中的每个元素c,计算式(3),选择结果最大的c作为返回。
若set2为空,转向步骤3.
3.计算编辑距离为2的字符串
记set1=编辑距离为2的字符串,set2= set1 in map。 对于set2中的每个元素c,计算式(3),选择结果最大的c作为返回。
若set2为空,转向步骤4.
4.放弃纠正
直接拿错误的输入搜索。这也不能说一定错,一些商标,店铺名啥的本身就不是单词。