12

我有大量的人名(例如“john smith”)。我想按名字查找其中的人。但是,某些查询会拼写错误(例如“jon smth”、“johnsm ith”)。是否有任何带有 Python 绑定的拼写更正库可以为我找到拼写更正的匹配项?

我知道 Whoosh 和 Python-aspell。Whoosh 的拼写更正对我来说不太有效,因为它将正确拼写的集合写入磁盘而不是将其存储在内存中。这使得查找对我的应用程序来说太慢了。由于代码的结构方式,更改此行为似乎并非易事。同样,Whoosh 不会对不同的字符编辑进行不同的加权,即使“y”更容易与“i”(“jim kazinsky”->“jim kazinski”)混淆,而不是“z” .

Aspell 不能很好地处理人名,因为名称通常包含空格——Aspell 认为单词是更正的基本单位。另外,据我了解,Aspell 使用 n-gram 拼写校正模型,而不是字符编辑距离模型。虽然 n-gram 模型对字典单词有意义,但它不适用于名称:人们“bob ruzatoxg”和“joe ruzatoxg”有很多稀有的三元组,因为他们有相同的稀有姓氏. 但他们显然是不同的人。

我还应该提到,我不能只将每个查询与集合中的所有条目进行比较——这太慢了。一些索引需要预先建立。

谢谢!

4

1 回答 1

6

听起来(这里没有双关语)你需要某种形式的Metaphone 算法,它已经在 Python 中实现并且在 Pypi 上可用:http: //pypi.python.org/pypi/Metaphone/0.4

还有其他算法,例如LevenshteinSoundex(尚未找到可靠的 Python 实现) - 您可能希望使用其中多个算法计算某种形式的度量(甚至可能对每个结果赋予不同的权重)提出可能更正的结果列表。

于 2012-12-03T19:54:27.427 回答