根据相关线程中的此评论,我想知道为什么基于 Levenshtein 距离的方法比 Soundex 更好。
4 回答
Soundex 相当原始 - 它最初是为手动计算而开发的。它产生一个可以比较的键。
Soundex 适用于西方名称,因为它最初是为美国人口普查数据开发的。它用于语音比较。
Levenshtein distance 查看两个值并根据它们的相似性生成一个值。它正在寻找丢失或替换的字母。
基本上,Soundex 更适合发现“Schmidt”和“Smith”可能是同一个姓氏。
Levenshtein 距离更适合发现用户输入错误的“Levnshtein”;-)
我同意 Daitch-Mokotoff 的观点,Soundex 有偏见,因为最初的美国人口普查员想要“美国化”的名字。
也许一个关于差异的例子会有所帮助:
Soundex 将附加值放在单词的开头 - 实际上它只考虑前 4 个语音。因此,虽然 "Schmidt" 和 "Smith" 将匹配 "Smith" 而 "Wmith" 不会。
Levenshtein 的算法更适合查找错别字——一两个缺失或替换的字母会产生高相关性,而那些缺失字母的语音影响则不那么重要。
我认为两者都不是更好,我会考虑使用距离算法和语音算法来帮助用户正确输入。
@基思:
正如我在另一个问题上发布的那样,Daitch-Mokotoff 对我们欧洲人来说更好(我认为美国)。
我还阅读了 Levenshtein 上的 Wiki。但我不明白为什么(在现实生活中)它比 Soundex 对用户更好。