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