gpt4 book ai didi

solr - 在 Lucene 4.2 版本中使用 wordnet 同义词扩展查询

转载 作者:行者123 更新时间:2023-12-03 22:29:59 25 4
gpt4 key购买 nike

我正在使用 Lucene 4.2,想知道如何使用 wordnet 来扩展此版本 Lucene 的输入查询。基本上,如果我的查询是这样的

term_1 AND term_2 OR term_3

我希望它被扩展为

(term_1 OR term_1syn_1 OR term_1syn_2) AND (term_2 OR term_2syn_1) OR (term_3 OR term_3syn_1)

等等。

我在 StackoverFlow 上查看了此类问题的其他答案,但没有一个有任何示例实现。

给定一个字符串形式的输入查询,我如何使用 WordNetQueryParser 和 SynonymMap 类扩展它?

我已经下载了 wordnet 序言文件,我知道 _s.pl 文件包含所有同义词。

任何示例代码将不胜感激。

最佳答案

A SynonymFilter允许您定义 SynonymnMap到一个简单的自定义分析器。

您可以通过重写 Analyzer.createComponents 来创建自定义分析器, 并分别在写入和搜索时将自定义版本传递给 IndexWriter 和 QueryParser。

需要考虑的一件事是,您的案例涉及展开所有可能的同义词,这意味着在 Builder.add 中将 includeOrig 传递给 true | .这两种方式都有好处,可能会研究哪种方式最能真正满足您的需求。


Lucene 的 Analyzer 旨在轻松扩展以轻松定义特定情况的格式。上面链接的 Analyzer API 文档提供了一个为您的自定义 Analyzer 覆盖 createComponents 方法的示例。

类似于:

protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
Tokenizer source = new ClassicTokenizer(Version.LUCENE_40, reader);
TokenStream filter = new StandardFilter(Version.LUCENE_40, source);
filter = new LowerCaseFilter(Version.LUCENE_40,filter);
filter = new SynonymFilter(filter, mySynonymMap, false);
//Whatever other filter you want to add to the chain, being mindful of order.
return new TokenStreamComponents(source, filter);
}

并且您需要根据示例定义 mySynonymMap,它是一个 SynonymnMapSynonymMap 通常应由 SynonymMap.Builder 通过上面链接的 add(CharsRef, CharsRef, boolean) 方法构建。

SynonymMap.Builder builder = new SynonymMap.Builder(true); 
builder.add(new CharsRef("crimson"), new CharsRef("red"), true);
//Be sure the boolean last arg you pass there is the one you want. There are significant tradeoffs here.
//Add as many terms as you like here...
SynonymMap mySynonymMap = builder.build();

还有一个 WordNetSynonymParser,如果您愿意的话,它看起来只是一个旨在读取特定类型规范的 SynonymMap.Builder,一目了然。

关于solr - 在 Lucene 4.2 版本中使用 wordnet 同义词扩展查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15678041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com