我在哪里可以找到一些真实的拼写错误统计数据?
我正在尝试将人们的输入文本与内部对象进行匹配,人们往往会犯拼写错误 有两种错误:
typos
- “Helllo”而不是“Hello”/“Satudray”而不是“Saturday”等。Spelling
- “Shikago”而非“芝加哥”我使用Damerau-Levenshtein distance进行拼写错误,使用Double Metaphone进行拼写(Python实现here和here)。
我想专注于Damerau-Levenshtein(或简称edit-distance
)。教科书实现总是使用'1'来表示删除,插入替换和转置的权重。虽然这很简单并且允许很好的算法但它与“现实”/“真实世界概率”不匹配。
示例:
“真实世界”权重应该用于删除,插入,替换和转置?
即使Norvig's very cool spell corrector使用非加权编辑距离。
BTW-我确定权重需要是函数而不是简单的浮点数(按照上面的说法) 示例)...
我可以调整算法,但在哪里可以“学习”这些权重?我无法访问Google-scale data ...
我应该猜猜他们吗?
编辑 - 尝试回答用户提问:
答案 0 :(得分:14)
答案 1 :(得分:8)
我建议你查看trigram alogrithm。在我看来,它更适合找到拼写错误然后编辑距离算法。它应该更快地工作,如果你在postgres数据库中保存字典,你可以使用索引。
你可能会发现有用的stackoverflow topic关于google“你的意思是”
答案 2 :(得分:5)
例如,检查插入表,我们可以看到在 l 128次之后 l 被错误地插入(该列中的最高数字)。使用这些表格,您可以生成您正在寻找的概率。
答案 3 :(得分:2)
如果研究是您的兴趣,我认为继续使用该算法,尝试找到合适的权重将是富有成效的。
我无法帮助你处理拼写错误,但我认为你也应该使用python的difflib。具体来说,SequenceMatcher的ratio()方法。它使用的文档http://docs.python.org/library/difflib.html声称非常适合匹配“看起来正确”,并且可能有助于增强或测试您正在做的事情。
对于只是寻找拼写错误的python程序员来说,这是一个很好的起点。我的一位同事使用了Levenshtein编辑距离和SequenceMatcher的比率(),并从比率()得到了更好的结果。
答案 4 :(得分:1)
有些问题可以帮助您确定是否应该询问“我在哪里可以找到真实世界的重量”问题:
您是否真的测量了统一加权实施的有效性?怎么样?
你有多少不同的“内部对象” - 即字典的大小是多少?
你如何实际使用编辑距离,例如John / Joan,Marmaduke / Marmeduke,Featherstonehaugh / Featherstonhaugh:是“所有1个错误”还是25%/ 11.1%/ 5.9%的差异?您使用的是什么门槛?
你的门槛中有多少对字典条目(例如John vs Joan,Joan vs Juan等)?如果你引入了一个花哨的加权系统,那么会有多少对字典条目从阈值内部迁移到外部(b),反之亦然?
如果John和Juan都在您的字典中并且用户键入Joan?
,您会怎么做?(1)选择错误的词典单词(不是用户的意思)(2)未能识别用户输入的惩罚/成本是什么?
引入复杂的加权系统是否会实际上减少上述两种错误类型的概率,以便使复杂化和速度更慢更有价值?
顺便说一句,你怎么知道用户使用的键盘?更新
“”“由于上述原因,我当前的非加权算法经常因为拼写错误而失败。”星期四回归“:每个”真人“很容易告诉周四比周二更容易,但他们都是1-编辑距离!(是的,我记录并测量我的表现)。“”“
是的,星期四 - >通过省略“h”,但周二 - >用“r”代替“e”代替Tursday。 E和R在qwERty和azERty键盘上彼此相邻。每个“真人”都可以轻易地猜测周四比周二更有可能。即使统计数据和猜测指向周四比周二更有可能(也许省略h将花费0.5并且e-> r将花费0.75),差异(可能是0.25)是否足够重要以至于总是选择周四?你的系统可以/你会问“你的意思是周二吗?”或者/它会在周四推进吗?