如何实现在搜索引擎中使用的同义词?

How to implement synonyms for use in a search engine?

我正在开发宠物搜索引擎 (SE)。

我现在拥有的是布尔关键字 SE,作为一个分为两部分的库:

我想改进搜索引擎,以一种自动将简单查询扩展为布尔查询的方式,以便它包含未出现在原始查询中的搜索词,即。我想支持同义词。

我需要一些帮助来构建同义词图。

如何计算出现在相似上下文中的单词列表?

这是我要计算的同义词列表的示例:

以及包含 ngram 的同义词,例如:

算法不必是完美的,我可以 post 手动处理结果,但至少我需要知道哪些术语与其他术语相似。

在标准信息检索 (IR) 文献中,这种使用附加术语(未出现在 initial/original 查询中)的查询丰富称为 查询扩展.

有很多标准方法,一般来说,这些方法都是基于 根据某些因素对 项进行评分然后选择多个项(比如 K ,一个参数)得分最高。

为了计算术语选择分数,假设在初始检索后检索到的排名前 (M) 的文档是相关的,这称为 伪相关反馈

术语选择函数通常依赖的因素有:

  1. 某个词在排名靠前的文档中的词频 - 越高越好。
  2. 该术语出现的文档数量(前 M 个)- 越高越好。
  3. 附加词与查询词同时出现多少次 - 越高越好。

同现因子是最重要的,如果原始查询包含 'psql'.

,它会为您提供诸如 'pgsql' 之类的术语

请注意,如果文档太短,此方法效果不佳,您必须使用其他必须基于语义的方法,例如 i) word-vector based expansion 或 ii) 基于 wordnet 的扩展。