【问题标题】:Levenshtein distance based methods Vs SoundexLevenshtein 基于距离的方法与 Soundex
【发布时间】:2010-09-07 16:57:54
【问题描述】:

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

【问题讨论】:

  • 我支持 Metaphone / 双 Metaphone 建议

标签: fuzzy-search soundex algorithm


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    关于原问题,我在信息检索应用中成功使用了n-grams

    【讨论】:

    • 我会选择双变音位,它返回 2 个代码,一个用于西方声音,另一个用于“外国”(更斯拉夫 IIRC)声音。
    • Soundex 开发于 20 世纪初,用于 19 世纪的人口普查数据。
    【解决方案3】:

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

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

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

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

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

    【讨论】:

      【解决方案4】:

      @Keith:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-20
        • 1970-01-01
        • 2014-06-24
        相关资源
        最近更新 更多