根据这篇相关帖子中的评论,我想知道为什么基于莱文斯坦距离的方法比Soundex更好。
根据这篇相关帖子中的评论,我想知道为什么基于莱文斯坦距离的方法比Soundex更好。
Soundex是相对简单的算法,最初是为了手工计算而开发的。它生成一个可以进行比较的键。
在西方姓名方面,Soundex效果很好,因为它最初是为美国人口普查数据开发的。它旨在进行语音比较。
Levenshtein距离比较两个值并基于它们的相似性产生一个值。它寻找缺失或替换的字母。
基本上,Soundex更适合发现“Schmidt”和“Smith”可能是同一个姓氏。
Levenshtein距离更适合发现用户错拼了“Levnshtein” ;-)
我同意Daitch-Mokotoff比Soundex更好,因为原始的美国人口普查员想要“美国化”的名字。
也许举个例子会有所帮助:
Soundex将重点放在单词开头——实际上它只考虑前4个语音。所以,“Schmidt”和“Smith”将匹配,“Wmith”则不会。
Levenshtein算法更适合查找拼写错误——一两个缺失或替换的字母会产生高相关性,而这些缺失字母的语音影响则较少重要。
我认为两者都没有优劣之分,对于帮助用户纠正输入错误,我会考虑使用距离算法和语音算法。
正如我在另一个问题中发布的那样,对于我们欧洲人(我认为包括美国人),Daitch-Mokotoff更好。
我也读过关于Levenshtein的维基百科。但是我不明白为什么(在现实生活中)它比Soundex更适合用户。