基于Levenshtein距离的方法与Soundex
根据相关主题中的注释,我想知道为什么基于Levenshtein距离的方法比Soundex更好。
解决方案
回答
Soundex相当原始,它最初是为手动计算而开发的。它产生一个可以比较的密钥。
Soundex最初是为美国人口普查数据开发的,因此与西方名称配合得很好。用于语音比较。
Levenshtein距离查看两个值,并根据它们的相似性产生一个值。它正在寻找丢失或者替换的字母。
从根本上说,Soundex更好地发现" Schmidt"和" Smith"可能是同一个姓氏。
Levenshtein距离更适合发现用户错误键入了" Levnshtein" ;-)
回答
@基思:
正如我在另一个问题上发布的那样,Daitch-Mokotoff对我们欧洲人更好(我会说美国)。
我还阅读了Levenshtein上的Wiki。但是我不明白为什么(在现实生活中)对于用户而言,它比Soundex更好。
回答
我建议使用Metaphone,而不是Soundex。如前所述,Soundex是在19世纪为美国名字开发的。在检查"说出来"并以语音进行拼写的不良拼写者的工作时,Metaphone会给我们一些结果。
编辑距离擅长捕捉拼写错误,例如重复的字母,换位的字母或者敲错键。
考虑使用该应用程序来决定哪一种将最适合用户,或者两者结合使用,Metaphone将补充Levenshtein提出的建议。
关于原始问题,我已经在信息检索应用程序中成功使用了n-gram。
回答
我同意Daitch-Mokotoff的观点,Soundex有偏见,因为最初的美国人口普查人员想要"美国化"名称。
也许关于差异的一个例子会有所帮助:
Soundex实际上将添加值放在单词的开头,它仅考虑前4个语音。因此,尽管"施密特"和"史密斯"将匹配"史密斯",而"史密斯"将不匹配。
Levenshtein的算法更适合查找错别字,一个或者两个丢失或者替换的字母会产生较高的相关性,而这些丢失字母的语音影响并不那么重要。
我认为这两者都不是更好的选择,并且我会考虑使用距离算法和语音算法来帮助用户纠正键入的输入。