拼写错误纠正(Spell Correction)例如:用户输入天起,纠正为天气。
有两种情况,一种是单纯的拼写错误,另一种是不合适当前内容,即时态,形式等不对。
在只考虑单词的情况下最简单的方法就是计算编辑距离(edit distance),即看需要多少步操作才可以将现有单词转化为目标单词。一般有三个操作:insert,delete,replace,每个操作假定一个单元的成本。例如将therr转化为there,需要将r->e,需要1成本。成本相同的,再根据上下文或者词频进行判断。但是要循环词典中所有的词在做判断,所以复杂度很高。
在之前,用户输入后,从词典中寻找编辑距离最小的,找到后返回,复杂度是O(v)*Edit(j)。可以采用在用户输入后,生成编辑距离为1,2的字符串,然后进行过滤后在返回。
如何进行过滤,给定一个字符串s,我们要找出最有可能成为正确的字符串c,也就是
candidates是第一步求得的编辑距离为1,2的字符串
贝叶斯公式
而它其实是由以下的联合概率公式推导出来:
P(Y,X)=P(Y|X)P(X)=P(X|Y)P(Y)
其中 P(Y) 叫做先验概率, P(Y|X) 叫做后验概率, P(Y,X) 叫做联合概率。
所以还可以写成:
而p(s)是用户给定字符串,所以对于任意候选字符串c来说,p(s)是一个定值,常数项。所以在经过优化后得出:
p(s|c)中c指正确的,s指用户输入的input,对于一个正确的字符串,有百分之多少的人写成了s的形式,可以经过统计得出。p(c),得出现频率较高的词。