基于Levenshtein距离的方法 vs Soundex算法

16

根据这篇相关帖子中的评论,我想知道为什么基于莱文斯坦距离的方法比Soundex更好。


我赞同使用 Metaphone / Double Metaphone 的建议。 - user177800
4个回答

17

Soundex是相对简单的算法,最初是为了手工计算而开发的。它生成一个可以进行比较的键。

在西方姓名方面,Soundex效果很好,因为它最初是为美国人口普查数据开发的。它旨在进行语音比较。

Levenshtein距离比较两个值并基于它们的相似性产生一个值。它寻找缺失或替换的字母。

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

Levenshtein距离更适合发现用户错拼了“Levnshtein” ;-)


9
我建议使用Metaphone,而不是Soundex。如注所述,Soundex是19世纪为美国人名开发的。Metaphone将在检查拼写错误的工作时给出一些结果,这些错误是由于“按音拼写”和拼写音标引起的。
编辑距离对于捕捉重复字母、换位字母或按错键等打字错误非常有效。
考虑应用程序以决定哪种方法最适合您的用户-或者同时使用两种方法,Metaphone补充Levenshtein产生的建议。
关于原始问题,我已经成功地在信息检索应用程序中使用了n-grams

我会选择双元音编码,它返回两个代码,一个用于西方发音,另一个用于“外国”(更斯拉夫语系的)发音。 - gbjbaanb
Soundex是在20世纪初开发的,用于19世纪的人口普查数据。 - webmaster777

2

我同意Daitch-Mokotoff比Soundex更好,因为原始的美国人口普查员想要“美国化”的名字。

也许举个例子会有所帮助:

Soundex将重点放在单词开头——实际上它只考虑前4个语音。所以,“Schmidt”和“Smith”将匹配,“Wmith”则不会。

Levenshtein算法更适合查找拼写错误——一两个缺失或替换的字母会产生高相关性,而这些缺失字母的语音影响则较少重要。

我认为两者都没有优劣之分,对于帮助用户纠正输入错误,我会考虑使用距离算法和语音算法。


0

@Keith

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

我也读过关于Levenshtein的维基百科。但是我不明白为什么(在现实生活中)它比Soundex更适合用户。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接