Metaphone vs Levenshtein vs Soundex vs Hamming

时间:2016-05-22 18:41:14

标签: php mysql sql fuzzy-search

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

我想在我的表格中search for song titles。因此,用户可以使用标题,艺术家姓名或两者同时搜索拼写错误,例如YouTube,例如

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

1 个答案:

答案 0 :(得分:6)

SOUNDEX()是一个简单的算法,从二十世纪初开始,旨在帮助查找美式英语中的专有名称。它是为Bell System目录辅助操作员构建的。它被设计用于产生大量的误报,人类可以从中获取可能的命中率。它可能不适合你的目的,因为你的话不是大多数专有名称。

Metaphone和双metaphone是SOUNDEX的改进。他们的工作范围更广泛。

这些工作最好逐字逐句,而不是像歌曲名称这样的短语。如果你实现这些中的任何一个,你需要实现逐字匹配和某种评分方案好消息是它们适合索引,并且基于单词的声音工作。

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

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