拼写纠错 (英文)
2015-08-11 15:41
120 查看
拼写纠错,又叫拼写检查,在搜索引擎中很流行,如separate是一个正确的单词,但如果故意拼错,放到百度中也会帮你纠正。见图1。
图1 百度的拼写检查
错误分为Non-word Errors和Real-word Errors。前者指非法单词;后者指那些拼写错误后的词仍然是合法的情况,如将“there”错误拼写为“three”(形近)。本文讨论的是Non-word Errors。
网上搜了一下,用的大都是贝叶斯定理。
记c为正确的单词,w为错误的输入,那么对于例子中的纠错,要求的就是
(1)
由贝叶斯定理得
(2)
对于同一个输入,式(2)中的分母不变,所以用于排序的话,只求分子就行。P(w|c)记为1,P(c)记为单词c在语料中的出现频率,所以得到
(3)
得到一个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
图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
相关文章推荐
- Android分析应用程序的构建过程
- 一种排序
- 再记录一下如何配置oracle instantclient
- margin塌陷(collapse)
- some company's Spi Flash chip replace altera epcsxxx
- [css3]background-size属性
- (转)Javascript模块化编程(三):Require.js的用法
- Python3检验pdf文件是否有效
- Oracle无法操作只能查询:record is locked by another user
- ios Label常用方法
- BestCoder Round #50 digger(动态生成线段树)
- BasicResponseHandler
- public String toString()函数的使用
- SDK插件安全分析
- HDOJ 1875 畅通工程再续(最小生成树)
- 判断android webView访问url的状态
- Android Studio系列教程五--Gradle命令详解与导入第三方包
- Ubutun 14.0.1+php5+Mysql+Nginx配置:
- 浅谈Struts2登录拦截器
- 抽屉效果的实现原理