Metaphone vs Levenshtein vs Soundex vs Hamming

Metaphone vs Levenshtein vs Soundex vs Hamming

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

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

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

中实现

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

Metaphone 和 double metaphone 是对 SOUNDEX 的改进。他们研究更多种类的词。

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

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

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