根据相关帖子中的this评论,我想知道为什么基于Levenshtein距离的方法比Soundex更好。
答案 0 :(得分:14)
Soundex相当原始 - 它最初是为手工计算而开发的。它产生了一个可以比较的密钥。
Soundex与西方名字配合得很好,因为它最初是为美国人口普查数据而开发的。它用于语音比较。
Levenshtein距离看两个值并根据它们的相似性产生一个值。它正在寻找丢失或替换的字母。
基本上Soundex更适合发现“施密特”和“史密斯”可能是同一个姓氏。
Levenshtein距离更好地发现用户错误输入“Levnshtein”; - )
答案 1 :(得分:8)
我建议使用Metaphone,而不是Soundex。如上所述,Soundex是在19世纪为美国名字开发的。 Metaphone会在检查“正在发声”的拼写错误的拼写者的工作时发音,并在拼音上拼写。
编辑距离可以很好地捕捉拼写错误,例如重复的字母,换位字母或敲错键。
考虑应用程序来决定最适合您的用户 - 或同时使用这两者,Metaphone补充了Levenshtein提出的建议。
关于原始问题,我在信息检索应用程序中成功使用了n-grams。
答案 2 :(得分:2)
我同意你对Daitch-Mokotoff的看法,Soundex有偏见,因为美国原始人口普查员希望获得“美国化”的名字。
也许有关差异的例子会有所帮助:
Soundex将加法值放在单词的开头 - 事实上它只考虑前4个语音。因此,虽然“施密特”和“史密斯”将匹配“史密斯”,而“史密斯”则不会。
Levenshtein的算法更适合查找拼写错误 - 一个或两个丢失或替换的字母产生高相关性,而那些丢失字母的语音影响则不那么重要。
我认为两者都不是更好,我会考虑使用距离算法和语音来帮助用户纠正输入类型。
答案 3 :(得分:0)
正如我在另一个问题上发表的那样,Daitch-Mokotoff对我们欧洲人来说更好(我会争辩美国)。
我也读过Levenshtein的Wiki。但我不明白为什么(在现实生活中)为用户提供更好而不是Soundex。