如何实现在搜索引擎中使用的同义词?
How to implement synonyms for use in a search engine?
我正在开发宠物搜索引擎 (SE)。
我现在拥有的是布尔关键字 SE,作为一个分为两部分的库:
index:这是一个倒排索引,即。它将术语与其出现的原始文档相关联
query:由用户提供,可以是任意复杂的布尔表达式,类似于(mobile OR android OR iphone) AND game
我想改进搜索引擎,以一种自动将简单查询扩展为布尔查询的方式,以便它包含未出现在原始查询中的搜索词,即。我想支持同义词。
我需要一些帮助来构建同义词图。
如何计算出现在相似上下文中的单词列表?
这是我要计算的同义词列表的示例:
- psql, pgsql, postgres, postgresql
- 手机,iphone,android
以及包含 ngram 的同义词,例如:
- rdbms,关系数据库管理系统,...
算法不必是完美的,我可以 post 手动处理结果,但至少我需要知道哪些术语与其他术语相似。
在标准信息检索 (IR) 文献中,这种使用附加术语(未出现在 initial/original 查询中)的查询丰富称为 查询扩展.
有很多标准方法,一般来说,这些方法都是基于 根据某些因素对 项进行评分然后选择多个项(比如 K ,一个参数)得分最高。
为了计算术语选择分数,假设在初始检索后检索到的排名前 (M) 的文档是相关的,这称为 伪相关反馈。
术语选择函数通常依赖的因素有:
- 某个词在排名靠前的文档中的词频 - 越高越好。
- 该术语出现的文档数量(前 M 个)- 越高越好。
- 附加词与查询词同时出现多少次 - 越高越好。
同现因子是最重要的,如果原始查询包含 'psql'.
,它会为您提供诸如 'pgsql' 之类的术语
请注意,如果文档太短,此方法效果不佳,您必须使用其他必须基于语义的方法,例如 i) word-vector based expansion 或 ii) 基于 wordnet 的扩展。
我正在开发宠物搜索引擎 (SE)。
我现在拥有的是布尔关键字 SE,作为一个分为两部分的库:
index:这是一个倒排索引,即。它将术语与其出现的原始文档相关联
query:由用户提供,可以是任意复杂的布尔表达式,类似于
(mobile OR android OR iphone) AND game
我想改进搜索引擎,以一种自动将简单查询扩展为布尔查询的方式,以便它包含未出现在原始查询中的搜索词,即。我想支持同义词。
我需要一些帮助来构建同义词图。
如何计算出现在相似上下文中的单词列表?
这是我要计算的同义词列表的示例:
- psql, pgsql, postgres, postgresql
- 手机,iphone,android
以及包含 ngram 的同义词,例如:
- rdbms,关系数据库管理系统,...
算法不必是完美的,我可以 post 手动处理结果,但至少我需要知道哪些术语与其他术语相似。
在标准信息检索 (IR) 文献中,这种使用附加术语(未出现在 initial/original 查询中)的查询丰富称为 查询扩展.
有很多标准方法,一般来说,这些方法都是基于 根据某些因素对 项进行评分然后选择多个项(比如 K ,一个参数)得分最高。
为了计算术语选择分数,假设在初始检索后检索到的排名前 (M) 的文档是相关的,这称为 伪相关反馈。
术语选择函数通常依赖的因素有:
- 某个词在排名靠前的文档中的词频 - 越高越好。
- 该术语出现的文档数量(前 M 个)- 越高越好。
- 附加词与查询词同时出现多少次 - 越高越好。
同现因子是最重要的,如果原始查询包含 'psql'.
,它会为您提供诸如 'pgsql' 之类的术语请注意,如果文档太短,此方法效果不佳,您必须使用其他必须基于语义的方法,例如 i) word-vector based expansion 或 ii) 基于 wordnet 的扩展。