【问题标题】:Metaphone vs Levenshtein vs Soundex vs Hamming [closed]Metaphone vs Levenshtein vs Soundex vs Hamming [关闭]
【发布时间】:2016-09-19 13:50:14
【问题描述】:

我想使用 php 7 和 MySQL 5.7 实现 Fuzzy Search。我在 Google 中进行了一些搜索,发现这些算法用于此目的:Metaphone、Levenshtein、Soundex 和 Hamming。

我想在我的桌子上search for song titles。因此,用户也可以使用标题、艺术家姓名或两者同时拼写错误进行搜索,例如 YouTube for ex。

用于此目的的最佳算法是什么以及如何在 php/MySQL 中实现

【问题讨论】:

    标签: php mysql sql fuzzy-search


    【解决方案1】:

    SOUNDEX() 是 20 世纪初的一种简单算法,用于帮助查找美式英语中的专有名词。它是为贝尔系统目录辅助操作员构建的。它旨在产生大量误报,人类可以从中选择可能的命中。它可能不适合您的目的,因为您的词大多不是专有名称。

    变音位和双变位音是对 SOUNDEX 的改进。他们处理更广泛的单词。

    这些最适合逐字逐句,而不是像歌曲名称这样的短语。如果您实施其中任何一项,您将需要实施逐字匹配和某种评分方案。好消息是这些都适合索引,并根据单词的发音工作。

    Levenshtein 距离适用于单词或短语,适用于拼写而不是发音。它不适合索引搜索,因为这些距离成对起作用。根据我的经验,对 Levenshtein 距离进行评分很棘手,因为较长的短语与其他长短语相比,与短短语相比有更多的不同之处。

    在尝试使用这些原始算法构建模糊搜索之前,您可以尝试 MySQL FULLTEXT 搜索和 Sphinx。这两种技术都可以很好地处理短语评分和停用词。 Sphinx 还支持同义词表,这有助于处理常见的拼写错误。

    【讨论】:

    • 感谢您的信息。所以你是说它们都不适合?我正在使用全文搜索,但它不支持拼写错误我应该使用 Sphinx 吗?
    猜你喜欢
    • 1970-01-01
    • 2017-06-20
    • 2012-08-07
    • 2023-04-09
    • 2011-07-08
    • 2013-03-13
    • 2010-09-27
    • 2017-12-30
    相关资源
    最近更新 更多