真实世界的错字统计?

Tal*_*iss 41 python fuzzy-search machine-learning spelling

我在哪里可以找到一些真实的拼写错误统计数据?

我试图将人们的输入文本与内部对象进行匹配,人们往往会犯拼写错误.
有两种错误:

  1. typos - "Helllo"而不是"Hello"/"Satudray"而不是"Saturday"等.
  2. Spelling - "Shikago"而不是"芝加哥"

我使用 Damerau-Levenshtein距离进行拼写错误,使用Double Metaphone进行拼写(Python实现此处此处).

我想专注于Damerau-Levenshtein(或简单地说edit-distance).教科书实现总是使用'​​1'来表示删除,插入替换和转置的权重.虽然这很简单并且允许很好的算法但它与"现实"/"真实世界概率"不匹配.

例子:

  • 我确定"Helllo"("Hello")的可能性大于"Helzlo",但它们距离都是1个编辑距离.
  • 在QWERTY键盘上,"Gello"比"Qello"更接近"Hello".
  • Unicode音译:"慕尼黑"和"慕尼黑"之间的"真实"距离是多少?

删除,插入,替换和转置的"真实世界"权重应该是什么?

即使是Norvig非常酷的拼写校正器也使用非加权编辑距离.

BTW-我确定权重需要是函数而不是简单的浮点数(根据上面的例子)......

我可以调整算法,但在哪里可以"学习"这些权重?我无法访问Google规模的数据 ...

我应该猜猜他们吗?

编辑 - 尝试回答用户问题:

  • 由于上述原因,我当前的非加权算法在遇到拼写错误时经常失败."星期四回归":每个"真人"都可以很容易地告诉周四比周二更有可能,但他们都是1编辑距离!(是的,我会记录并衡量我的表现).
  • 我正在开发NLP旅行搜索引擎,因此我的词典包含~25K目的地(预计将增长到100K),时间表达式~200(预期1K),人物表达式~100(预期300),货币表达式~100(预期500 ),"胶水逻辑词"("从","美丽","公寓")~2K(预计10K)等...
  • 对于上述每个单词组,编辑距离的使用是不同的.我尝试"在明显时自动纠正",例如,与字典中的另一个单词相距1个编辑距离.我有许多其他手动调整的规则,例如Double Metaphone修复,距离长度> 4的字典单词不超过2个编辑距离...当我从现实世界输入中学习时,规则列表继续增长.
  • "你的门槛中有多少对字典条目?":嗯,这取决于"花式加权系统"和现实世界(未来)输入,不是吗?无论如何,我进行了大量的单元测试,因此我对系统所做的每一项更改都会使其更好(当然,基于过去的输入).大多数6个字母的单词距离与另一个字典条目相距1个编辑距离的单词在1个编辑距离内.
  • 今天,当有两个字典条目与输入相同的距离时,我尝试应用各种统计数据来更好地猜测用户的意思(例如,巴黎,法国更有可能出现在我的搜索中,而不是Pārīz,伊朗).
  • 选择错误单词的成本是将半随机(通常是荒谬的)结果返回给最终用户并可能失去客户.不理解的成本稍微低一些:用户将被要求改写.
  • 复杂的成本值得吗?是的,我确定是的.你不会相信人们在系统中投入的拼写错误,并希望它能理解,我确信可以使用Precision和Recall中的提升.

tsz*_*ing 14

真实世界拼写错误统计的可能来源是维基百科的完整编辑历史.

http://download.wikimedia.org/

此外,您可能对AWB的RegExTypoFix感兴趣

http://en.wikipedia.org/wiki/Wikipedia:AWB/T


jet*_*hro 8

我建议你检查三元组算法.在我看来,它更适合找到拼写错误然后编辑距离算法.它应该更快地工作,如果你在postgres数据库中保留字典,你可以使用索引.

你可能会发现有用的stackoverflow 主题关于谷歌"你的意思是"


mnd*_*rix 5

Church和Gale 对拼写纠正概率评分可能会有所帮助.在那篇论文中,作者将拼写错误描述为作者与计算机之间的嘈杂通道.附录中有关于在美联社出版物中看到的拼写错误的表格.每种拼写错误都有一个表格:

  • 缺失
  • 插入
  • 代换
  • 换位

例如,检查插入表格中,我们可以看到,后不正确地插入 128倍(在该列中的最高数).使用这些表,您可以生成您正在寻找的概率.