当在google百度输入错误的时候,百度google等都能给出一个最相近的纠错的提示。这个功能很是好用,也以为特别有意思,因此在设计一个搜索小站的时候,想把这个功能加上。 html
在google上搜"spelling corrector"会获得不少有用的信息,大概有两种实现:一种是基于N-GRAM,另一种是基于状态跳转来实现。python的Whoosh库2.4版本以前使用的是N-GRAM方式,而2.5以后使用的是FST状态跳转的方式。我的以为基于FST可能会更好一些,下面简单介绍它的原理: python
假设词库里有:刘德华 刘青云 刘嘉玲 刘俊杰 刘玉玲 刘易斯 刘松仁 刘以达,用户输入的是刘牛德,这个时候应该给用户的输入进行一次较正,以更合适本站的搜索信息。校订方法: git
一、删除法,把刘牛德变成-->刘牛 牛德,再对库里的词典进行搜索 github
二、交换法,把刘牛德变成 刘德牛等,再进行搜索 算法
三、替换法,把刘牛德变成 刘羊德,刘马德,刘牛法等 app
四、插入法,变成刘牛德国等 less
经过设计一外良好的状态图,以更好的实现上边的算法,就是如这个连接所示 测试
循环的使用上边的四种状态的跳转,每增长一次变化,词的距离也相识的+1,好比刘牛德变成了刘德华,就通过一次交换,再一次替换,词距也增长到了2. google
更详细的原理介绍:此英文文章 .net
借助Whoosh的corrector实现一个更友好速度更快的中文纠错算法
将计划加入到这个开源项目里