我想使用php 7和MySQL 5.7实现一个MySQL。我在Google上做了一些搜索,我发现这些算法被用于这个目的: Metaphone,Levenshtein,Soundex和Hamming。
我想在我的桌子上做search for song titles。因此,用户可以使用标题、艺术家的名字或两者同时使用进行搜索,同时也可以使用拼写错误的搜索,比如YouTube for ex。
用于此目的的最佳算法是什么,如何在php/MySQL中实现?
发布于 2016-05-22 20:24:20
SOUNDEX()是一个简单的算法,从20世纪初调来帮助查找美国英语中的专有名词。它是为贝尔系统的目录辅助操作员而建的。它的目的是产生大量的假阳性,人类可以从中选择可能的命中。这可能不适合你的目的,因为你的话大多不是正确的名称。
Metaphone和double metaphone是SOUNDEX的改进产品。他们研究更广泛的词汇。
这些词的效果最好是逐字逐句,而不是像歌曲名字这样的短语.如果您实现了其中的任何一个,您将需要实现逐字匹配和某种评分方案,好消息是这些都适合索引,并根据单词的声音工作。
Levenshtein距离在单词或短语上工作,在拼写上工作,而不是在声音上。它不适合索引搜索,因为这些距离成对工作。根据我的经验,要计算Levenshtein距离是很棘手的,因为较长的短语与其他长短语相比,有更多的不同之处。
在尝试使用这些原始算法构建模糊搜索之前,您可以尝试使用MySQL全文搜索和狮身人面像。这两种技术都能很好地处理短语打分和停止单词。Sphinx还支持同义词表,这有助于处理常见的拼写错误。
https://stackoverflow.com/questions/37378158
复制相似问题