拼写纠错 (英文)

时间:2022-07-17 23:54:03
拼写纠错,又叫拼写检查,在搜索引擎中很流行,如separate是一个正确的单词,但如果故意拼错,放到百度中也会帮你纠正。见图1。
拼写纠错 (英文) 图1 百度的拼写检查错误分为 Non-word Errors和Real-word Errors。前者指非法单词;后者指那些拼写错误后的词仍然是合法的情况,如将“there”错误拼写为“three”(形近)。本文讨论的是Non-word Errors。

网上搜了一下,用的大都是贝叶斯定理。

思想

记P(a|b)为:输入字符串b情况下,推断出字符串a的概率。
记c为正确的单词,w为错误的输入,那么对于例子中的纠错,要求的就是

拼写纠错 (英文) (1)由贝叶斯定理得

拼写纠错 (英文)(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.放弃纠正
直接拿错误的输入搜索。这也不能说一定错,一些商标,店铺名啥的本身就不是单词。

说明

使用结果依赖于训练语料。 编辑距离的计算及枚举可移步:  http://blog.csdn.net/chuchus/article/details/47402183