我有很多人名(例如“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”有很多共同的罕见三元组,因为它们具有相同的罕见姓氏。但他们显然是不同的人。
我还应该提到,我不能只将每个查询与集合中的所有条目进行比较 - 这太慢了。某些索引需要预先构建。
谢谢!
答案 0 :(得分:6)
听起来像(没有双关语)你需要某种形式的Metaphone algorithm,它已经在Python中实现并且在Pypi上可用:http://pypi.python.org/pypi/Metaphone/0.4。
还有其他算法,例如Levenshtein和Soundex(尚未找到可靠的Python实现) - 您可能希望使用多个算法来计算某种形式的度量这些(甚至可能对每个结果给出不同的权重)来得出可能的更正的结果列表。