如何从数据库“重新定义搜索”或纠正“拼写错误”

问题描述 投票:1回答:4

我想在我的网站中为搜索添加新功能。我正在使用PHP和MySQL。MySQL数据库包含一个表,该表包含用户要搜索的项目,每个项目都有一个“关键字”列,其中用逗号分隔的关键字“示例:猫,狗,马”。用户在我的网站上搜索后,我想获得让他说“ 85%”的单词,类似于他的搜索关键字,这是为了重新定义搜索。对于拼写错误,我需要一种服务或某种能够提供关键字正确还是拼写错误的功能,以便我得到一些更正并检查数据库中是否存在这些更正,然后将这些更正提供给用户以更改其搜索关键字。

我不是在这里寻求解决方案...但是,如果您能以一种或另一种方式指导我,那将是很好的。

php mysql search misspelling
4个回答
1
投票

关键在于您的想法是“ 85%相似”。这里有一些想法:

相似词表

您可以定义一个表格,在其中列出关键字的常见拼写错误。然后,您将不得不增加搜索数据库的方式,以将常见的拼写错误映射到适当的值。

相似词查找

[执行搜索时,请使用库来生成相似的单词并搜索所有单词。您可以使用任何种类的拼写库来生成可能的单词匹配,然后再发送搜索。或根据Edit Distance算法编写自己的代码。

仅检查是否需要:由于使用的是PHP,因此可以考虑使用pspell。您可以先致电pspell_check以查看该单词的拼写是否正确。然后致电pspell_suggest以获取建议。

See this link for an example.

使用数据库功能

例如,MySQL具有SOUNDS_LIKE运算符。您可以搜索WHERE keyword SOUNDS_LIKE 'kat',并(大概)获得catMore info is on the documentation page,它会提醒您一些限制(例如,仅英语和UTF-8)。


这听起来像是一个相当普遍的问题,所以也许对此问题还有其他更规范的解决方案。也许有些特定于您正在使用的语言(或在数据库接口层中)可以为您提供抽象的语言。

前两个应该使您满足一些85%相似性的概念。我不知道第三个选项的效果如何,但是它是“ soundz kool”。


1
投票

PHP中有相似的text(),但是在查询之后;您也可以在MySQL中查看全文搜索。


1
投票

尝试查看“编辑距离算法”。基本上对于两个输入字符串,返回值是将一个字符串转换为另一个字符串所需的最少编辑次数。这样可以使您了解两个字符串的接近程度。

Edit Distance


0
投票

Apache Solr是一个开源搜索平台,不仅提供全文本搜索功能,而且还提供内置的匹配分数和自动建议系统,以及许多其他powerful features

如果您站点中的信息量不够重要,则此选项听起来可能不合适,尽管我建议至少将其检出。

您的应用程序与Solr之间的通信可以通过标准的REST接口进行处理。 AFAIK目前提供两个良好的Solr特定的PHP库:

设置服务器非常简单,这是调整和优化Solr以最适合您的需求的艰苦工作(也是有趣的工作。)>

© www.soinside.com 2019 - 2024. All rights reserved.