Jef*_*eff 10 python nlp spell-checking nltk whoosh
我有很多人名(例如"john smith").我想通过名字查找人物.但是,有些查询会拼写错误(例如"jon smth","johnsm ith").是否有任何包含Python绑定的拼写修正库可能会为我找到经过拼写纠正的匹配?
我知道Whoosh和Python-aspell.Whoosh的拼写纠正对我来说并不适用,因为它将正确拼写的集合写入磁盘而不是将其存储在内存中.这使得我的应用程序查找速度太慢.由于代码的结构如何,改变这种行为似乎并不容易.另外,飞快移动不会对不同的角色编辑加权不同,即使"y"更可能与"i"("jim kazinsky" - >"jim kazinski")混淆,而不是'z' .
Aspell与人名不兼容,因为名字通常包含空格--Aspell认为这个词是纠正的基本单位.另外,据我所知,Aspell使用n-gram拼写校正模型,而不是字符编辑距离模型.虽然n-gram模型对于字典词是有意义的,但它对名称不起作用:人们"bob ruzatoxg"和"joe ruzatoxg"有很多共同的罕见三元组,因为它们具有相同的罕见姓氏.但他们显然是不同的人.
我还要提一下,我不能只将每个查询与集合中的所有条目进行比较 - 这太慢了.某些索引需要预先构建.
谢谢!
听起来像(没有双关语)你需要某种形式的Metaphone算法,该算法已在Python中实现,可在Pypi上找到:http://pypi.python.org/pypi/Metaphone/0.4 .
还有其他算法,比如Levenshtein和Soundex(还没有找到可靠的Python实现) - 你可能想要使用多个这样的度量来计算某种形式的度量(甚至可能给每个结果赋予不同的权重)提出可能的更正结果列表.