如何实现基于同义词的上下文搜索?

时间:2015-02-27 11:19:40

标签: mysql sql search full-text-search

让我们说互联网用户搜索“使用gmail麻烦”

如何使用“问题|问题|问题|问题|麻烦|使用gmail | googlemail | google mail”来回复条目?

我不想在不同关键字之间手动添加这些链接,因此“问题<>问题<>麻烦”“gmail<>之间的链接googlemail<> google mail“完全未知。它们应该在自动化过程中找到。

解决问题的方法
我提供了同义词/同义词平台,如thesaurus.com,synonym.com等,或使用synomys数据库/ api,并在第三个网站上使用此用户生成的输入进行查询。

但这不会涵盖所有同义词,例如“gmail” - 示例。

我还有哪些其他选择?也许基于给定数据和过去记录的搜索短语的东西?

5 个答案:

答案 0 :(得分:1)

评论时间有点长。

您正在寻找的内容在文本搜索领域被称为“同义词库”或“同义词”列表。显然,MySQL中有这样的功能提议。它尚未实施。 (Here是Stack Overflow上的一个相关问题,尽管问题中的链接似乎不起作用。)

解决方法是在将查询发送到数据库之前修改查询。也就是说,将查询解析为单词,然后查找这些单词的所有同义词,并重新构建查询。对于自然语言搜索而言,这比布尔搜索(需要更仔细的重建)更好。

用于获取带有同义词的最终单词列表的伪代码类似于:

select @finalwords = concat_ws(' ', group_concat(synonyms separator ' ') )
from synonyms s
where find_in_set(s.baseword, @words) > 0;

答案 1 :(得分:1)

在我看来,你手上有两个问题:

  1. Lemmatisation,将单词分解为引理,有时称为词条根词。这比Stemming更难,因为它不只是从单词中删除后缀,而是试图找到真正的根,例如“是”=> “是”。这通常是以编程方式完成的,尽管它似乎是一项复杂的任务。以下是文本被词形化的在线示例:http://lemmatise.ijs.si/Services

  2. 搜索同义词。这是一个非常复杂的问题。我听说过的一种方法是修改lemmatisation引擎,为给定的一组单词返回多个引理,即“problem”=> “问题”和“问题”,从而允许更灵活的结果集。然而,这意味着同义词必须从其他地方提供给lemmatisation引擎。我真的不知道如何以编程方式构建同义词列表。

  3. 因此,你可以考虑一种策略,让你对要搜索的文本进行语法排列,然后将每个引理传递给你的同义词查找器(无论如何有效),以获得最终的引理列表以执行搜索。

    我认为你已经为自己制造了一个非常大的问题。

答案 2 :(得分:1)

你必须想到它忽略了语言。

当你用两个单词向宝宝展示同样的东西时,他明白这些单词是同义词。他可能没有完全理解,但他会在重复这一过程时学习。

您输入“gmail问题”。

两种选择:

  1. 您的搜索结果:您点击了一个项目。
  2. 系统会在搜索“google mail bug”之前识别此项目已被点击。这是一场比赛,我们称之为“相对搜索”。

    1. 您的搜索效果不佳:
    2. 我们会在历史记录中搜索匹配的搜索内容: 我们建议:“你的意思是雅虎邮件的麻烦吗?是/否”。你点击否,这是一个“不匹配”。我们可能会提出其他建议,例如已知的“相对搜索”列表或可能与我们的历史和levenshtein距离中的全文搜索相关的列表。

      当一个词被充分评分为“同义词”时,你可以认为它是。算法可能是错误的,但事实上它取决于你真正期望的。

      如果我搜索“使用谷歌发送邮件很困难”和“gmail问题”,则没有什么是同义词,但搜索相对相同。这对我来说比真正的同义词更重要。

      如果你真的想要获得同义词,我会在第二阶段比较“相对搜索”中的单词,并包括手动检查。

      我认为google算法主要使用同义词来突出显示网页结果中的搜索字词,但不会在他们使用相对搜索字词的情况下进行实际搜索,除非在已知情况下,因为“gmail”和“google mail”的结果不一样。

      但如果您确定10个相对搜索的“gmail”都包含“google mail”,那么这将是猜测它们是同义词的良好开端。

答案 3 :(得分:0)

如果相关系统是可公开访问的网站,那么“在那里”选项是确保Google可以抓取所有内容,然后在您自己的网站上使用Google搜索,这应该为您提供同义词功能自由'。结果显然会有一些变幻莫测,但在获取新创建内容的匹配结果方面会有所滞后,具体取决于抓取工具到达网站的频率。可能不适合您的使用案例,但对某些人来说,这可能就足够了。

答案 4 :(得分:0)

看到您修改过的问题,使用公共API怎么样?

http://www.programmableweb.com/category/reference/apis?category=20066&keyword=synonym