我在哪里可以find一些现实世界的错字统计? 我试图将人们的input文本与内部对象相匹配,而且人们往往会犯拼写错误。 有两种错误: typos – “Helllo”,而不是“星期六”,而不是“你好”/“Satudray”等。 Spelling – “芝加哥”而不是“芝加哥” 我使用Damerau-Levenshtein距离作为拼写错误( 双倍的Metaphone拼写)(Python实现在这里和这里 )。 我想关注Damerau-Levenshtein(或简单的edit-distance )。 教科书的实现总是使用“1”来表示删除,插入replace和换位的权重。 虽然这很简单并且考虑到很好的algorithm,但它不符合“现实”/“真实世界的概率”。 例子: 我确定“Helllo”(“Hello”)的可能性大于“Helzlo”,但它们都距离编辑距离。 在QWERTY键盘上,“Gello”比“Qello”更接近“Hello”。 Unicode音译:“慕尼黑”和“慕尼黑”之间的“真实”距离是多less? “现实世界”权重应该是删除,插入,replace和换位? 即使Norvig非常酷的拼写纠正器使用非加权编辑距离。 顺便说一句,我敢肯定,重量需要是function,而不是简单的浮动(按照上面的例子)… 我可以调整algorithm,但是我可以在哪里“学习”这些权重? 我无法访问Google规模的数据 … 我应该猜他们吗? 编辑 – 试图回答用户的问题: 由于上述原因,我目前的非加权algorithm在遇到错字时经常失败。 “星期四回归”:每个“真实的人”都可以很容易地告诉周四比周二更有可能,但它们都是一个编辑距离! (是的,我做logging和衡量我的performance)。 我正在开发一个NLP旅游search引擎,所以我的字典包含25K目的地(预计将增长到100K),时间expression〜200(预期1K),人物expression〜100(预计300),货币expression〜100(预期500 ),“胶合逻辑词”(“from”,“beautiful”,“apartment”)〜2K(预计10K)等等… 编辑距离的使用对于每个上述单词组是不同的。 我试图“明显的时候自动校正”,例如,距离字典中的另外一个单词只有1个编辑距离。 我还有许多其他的手工调整的规则,例如,距离长度大于4的字典单词距离不超过2个编辑距离的双倍音位修正…当我从现实世界的input中学习时,规则列表不断增加。 “有多less对词典在你的门槛内?”:那么,这取决于“花哨的权重系统”和现实世界(未来)的input,不是吗? 无论如何,我有广泛的unit testing,以便我对系统做出的每一个改变只会使它变得更好(当然基于过去的input)。 大多数小于6个字母的单词距离距离另一个字典条目1个编辑距离的单词的编辑距离在1个编辑距离内。 今天当有两个字典条目与input距离相同时,我尝试应用各种统计数据来更好地猜测用户的意思(例如,法国巴黎更有可能出现在我的search中,而不是伊朗的帕里兹)。 select一个错误的单词的成本是向最终用户返回半随机(通常是荒谬的)结果,并可能失去一个客户。 不理解的代价稍微便宜一些:用户会被要求重新修改。 复杂性的代价是否值得呢? 是的,我确定它是。 你不会相信大量的错别字的人扔在系统,并期望它的理解,我可以肯定使用精确度和召回提高。