PHP - 如何建议搜索术语,"你的意思是......?"

Gal*_*Gal 12 php search

当使用不检索结果的术语搜索数据库时,我想允许"你的意思是......"建议(如谷歌).因此,例如,如果有人寻找" jquyer"",它将输出" did you mean jquery?"

当然,建议结果必须与db内的值匹配(我使用的是mysql).

你知道一个可以做到这一点的图书馆吗?我用谷歌搜索了这个,但没有找到任何好结果.或者您可能知道如何自己构建它?

mjv*_*mjv 8

快速简便的解决方案涉及SOUNDEX或类似SOUNDEX的功能.

简而言之,SOUNDEX函数最初用于处理常见的拼写错误和姓氏的替代拼写,而这个函数很好地包含了许多常见的拼写错误(英语).由于它专注于姓氏,原始的soundex函数可能是限制性的(例如在第三或第四个非重复辅音字母之后停止编码),但是很容易花费算法.

这种类型的功能的兴趣在于它允许提前计算可以与单词相关联的单个值.这与字符串距离函数不同,例如编辑距离函数(例如Levenshtein,Hamming或甚至Ratcliff/Obershelp),它们提供相对于一字符串的值.

通过预先计算索引字典中所有单词的SOUNDEX值,可以在运行时基于用户提供的搜索项的[运行时]计算的SOUNDEX值快速搜索字典/数据库.Soundex搜索可以系统地完成,作为普通关键字搜索的补充,或仅在关键字搜索没有产生令人满意的记录数时执行,因此提供可能是用户提供的关键字的提示(是拼写错误.


一种完全不同的方法,仅适用于包含多个单词的用户查询,基于对字典/数据库运行多个查询,不包括一个(或几个)用户提供的关键字.这些备用查询的结果列表提供了不同单词的列表; 这个[缩小的]单词列表通常足够小,以至于可以应用基于对的距离函数来在列表内选择更接近于所谓的拼写错误的单词的单词.单词频率(在结果列表中)可用于限制单词的数量(仅评估发现超过x次的单词的相似性),以及提供权重,以略微偏斜相似性度量(即赞成在数据库中找到"数量"的单词,即使它们的相似性测量值略低).


Mat*_*ves 7

如何在莱文斯坦功能,或similar_text功能?

  • 如果你有超过几千个不同的单词,Levenshtein函数和其他字符串相似性度量是不切实际的.基本上需要将数据库表中的每个单词与用户提供的关键字进行比较......这些昂贵的字符串相似性函数可以应用为类似单词搜索算法的_final stage_,前提是可以在该级别进行某些过滤对数据库,有效地限制比较数量. (3认同)
  • 不确定它的效果如何,您必须将它单独应用于搜索字符串中的每个单词,以对照字典中的每个单词. (2认同)