我在哪里可以找到一些真实世界的打字错误统计数据呢?
我正在尝试将人们输入的文本与内部对象匹配,而人们往往会犯拼写错误。
有两种类型的错误:
打字错误
- "Helllo" 而不是 "Hello" / "Satudray" 而不是 "Saturday" 等。拼写错误
- "Shikago" 而不是 "Chicago"
我使用Damerau-Levenshtein距离处理打字错误和双重音形码处理拼写错误(Python实现在这里和在这里)。
我想专注于Damerau-Levenshtein算法(或简称为 编辑距离
)。教科书中的实现总是将删除、插入、替换和转置的权重设置为1。虽然这很简单并且可以使用好的算法,但它并不符合"现实"或"真实世界的概率"。
示例:
- 我确信 "Helllo"("Hello")的可能性比 "Helzlo" 更大,但它们都是1步编辑距离。
- "Gello" 比 "Qello" 在 QWERTY 键盘上更接近 "Hello"。
- Unicode音译: "München" 和 "Munchen" 之间的"真实"距离是多少?
删除、插入、替换和转置的 "真实世界" 权重应该是多少呢?
即使Norvig的很酷的拼写纠正器也使用非加权编辑距离。
顺便说一句-我确信这些权重需要是函数而不是简单的浮点数(根据上述例子)...
我可以调整算法,但我在哪里可以“学习”这些权重?我没有访问Google规模的数据...
我应该猜测它们吗?
编辑-试图回答用户问题:
- 我的当前非加权算法经常在面对上述原因的错别字时失败。 “Return on Tursday”:每个“真人”都可以轻松地发现周四比周二更有可能,但它们都只相差1个编辑距离! (是的,我记录并衡量我的表现)。
- 我正在开发一个NLP旅行搜索引擎,因此我的词典包含大约25K个目的地(预计将增长到100K),时间表达式约200(预计1K),人物表达式约100(预计300),货币表达式约100(预计500),“胶水逻辑单词”(“from”,“beautiful”,“apartment”)约2K(预计10K)等。
- 每个上述单词组的编辑距离使用方式不同。我尝试在明显情况下“自动纠正”,例如与字典中仅1个其他单词相差1个编辑距离。我有许多其他手动调整的规则,例如Double Metaphone修复,其与长度> 4的字典单词的编辑距离不超过2个...规则列表随着我从真实世界输入中学习而不断增长。