16

根据相关线程中的评论,我想知道为什么基于 Levenshtein 距离的方法比 Soundex 更好。

4

4 回答 4

17

Soundex 相当原始 - 它最初是为手动计算而开发的。它产生一个可以比较的键。

Soundex 适用于西方名称,因为它最初是为美国人口普查数据开发的。它用于语音比较。

Levenshtein distance 查看两个值并根据它们的相似性生成一个值。它正在寻找丢失或替换的字母。

基本上,Soundex 更适合发现“Schmidt”和“Smith”可能是同一个姓氏。

Levenshtein 距离更适合发现用户输入错误的“Levnshtein”;-)

于 2008-09-03T16:09:41.753 回答
8

我建议使用Metaphone,而不是 Soundex。如前所述,Soundex 是在 19 世纪为美国名字开发的。Metaphone 会在检查“试音”和拼音的拼写不佳者的工作时为您提供一些结果。

编辑距离擅长捕捉诸如重复字母、换位字母或敲错键等错别字。

考虑应用程序来决定哪个最适合您的用户 - 或同时使用两者,Metaphone 补充了 Levenshtein 提出的建议。

关于原始问题,我在信息检索应用程序中成功使用了n-gram 。

于 2008-09-03T16:18:45.943 回答
2

我同意 Daitch-Mokotoff 的观点,Soundex 有偏见,因为最初的美国人口普查员想要“美国化”的名字。

也许一个关于差异的例子会有所帮助:

Soundex 将附加值放在单词的开头 - 实际上它只考虑前 4 个语音。因此,虽然 "Schmidt" 和 "Smith" 将匹配 "Smith" 而 "Wmith" 不会。

Levenshtein 的算法更适合查找错别字——一两个缺失或替换的字母会产生高相关性,而那些缺失字母的语音影响则不那么重要。

我认为两者都不是更好,我会考虑使用距离算法和语音算法来帮助用户正确输入。

于 2008-09-03T16:24:08.597 回答
0

@基思

正如我在另一个问题上发布的那样,Daitch-Mokotoff 对我们欧洲人来说更好(我认为美国)。

我还阅读了 Levenshtein 上的 Wiki。但我不明白为什么(在现实生活中)它比 Soundex 对用户更好

于 2008-09-03T16:15:12.020 回答