如何在Hibernate Search中使用Wordnet同义词?

hip

我一直在尝试找出如何将WordNet同义词与我正在开发的使用Hibernate Search 5.6.1的搜索功能一起使用。最初,我考虑过使用Hibernate Search注释:

@TokenFilterDef(factory = SynonymFilterFactory.class, params = {@Parameter(name = "ignoreCase", value = "true"),
  @Parameter(name = "expand", value = "true"),@Parameter(name = "synonyms", value = "synonymsfile") })

但是,这需要使用同义词填充的实际文件。从WordNet,我只能获取“ .pl”文件。因此,我尝试手动制作一个SynonymAnalyzer类,该类将从“ .pl”文件中读取:

public class SynonymAnalyzer extends Analyzer {

@Override
protected TokenStreamComponents createComponents(String fieldName) {
  final Tokenizer source = new StandardTokenizer();
  TokenStream result = new StandardFilter(source);
  result = new LowerCaseFilter(result);

  SynonymMap wordnetSynonyms = null;

  try {
    wordnetSynonyms = loadSynonyms();
  } catch (IOException e) {
    e.printStackTrace();
  }
  result = new SynonymFilter(result, wordnetSynonyms, false);
  result = new StopFilter(result, StopAnalyzer.ENGLISH_STOP_WORDS_SET);
  return new TokenStreamComponents(source, result);
}

private SynonymMap loadSynonyms() throws IOException {
  File file = new File("synonyms\\wn_s.pl");
  InputStream stream = new FileInputStream(file);
  Reader reader = new InputStreamReader(stream);
  SynonymMap.Builder parser = null;
  parser = new WordnetSynonymParser(true, true, new StandardAnalyzer(CharArraySet.EMPTY_SET));
  try {
    ((WordnetSynonymParser) parser).parse(reader);
  }   catch (ParseException e) {
    e.printStackTrace();
  }

  return parser.build();
}

}

这种方法的问题是我正在获取java.lang.OutOfMemoryError,我认为这是因为同义词或东西太多了吗?进行此操作的正确方法是什么,我在网上看到的所有地方都建议使用WordNet,但我似乎找不到使用Hibernate Search Annotations的示例。任何帮助表示赞赏,谢谢!

耶罗地尔

wordnet格式实际上受SynonymFilterFactory您只是在注释配置中缺少了“ format”参数;默认情况下,工厂使用Solr格式。

将注释更改为此:

@TokenFilterDef(
    factory = SynonymFilterFactory.class,
    params = {
        @Parameter(name = "ignoreCase", value = "true"),
        @Parameter(name = "expand", value = "true"),
        @Parameter(name = "synonyms", value = "synonymsfile"),
        @Parameter(name = "format", value = "wordnet") // Add this
    }
)

另外,请确保“ synonyms”参数的值是您的类路径中文件的路径(例如“ com / acme / synonyms.pl”,如果该文件位于您的根目录下,则仅仅是“ synonyms.pl”) “资源”目录)。

通常,当您对Lucene过滤器/令牌生成器工厂的参数有疑问时,最好的选择是查看该工厂的源代码,或者查看此页面

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从nltk WordNet Python获取同义词

如何在oracle中使用其同义词截断任何表?

WordNet:遍历同义词集

如何使用SqlConnection.GetSchema获取同义词信息?

如何在Oracle中使用DBlink的同义词?

如何在NLTK的Wordnet中检索目标同义词集的反义词同义词集?

如何在Alexa中处理意图中的同义词?

如何在regexp.json中添加同义词?

如何将pattern_replace char_filter与同义词过滤器结合使用(跳过同义词)?

如何在表之间翻转Oracle同义词

如何使用V2 API将实体及其同义词上载到DialogFlow?

如何使用NLTK获取多个单词的同义词?

如何在R中使用别名/同义词词典重命名列名?

Solr:如何在同义词中添加unicode字符?

如何使用类型同义词重载运算符?

(如何)Raku做类同义词?

如何在elasticsearch中配置同义词_路径

如何在实例声明中使用类型同义词?

Hibernate工具在数据库中使用同义词

从WordNet同义词集中获取单词

如何打印出WordNet同义词集的主要引理?Python NLTK

在Java中使用阿拉伯语Wordnet查找同义词

如何使用 gensim 工具包查找单词的同义词或多词释义

如何在Prolog中表达同义词?

如何向同义词添加约束?

开发人员如何使用术语“adhoc”?(定义、用例、同义词)

如何处理多词同义词

如何使用 NLTK Wordnet 获取更多同义词?

带有 Lucene 荧光笔和同义词列表的 Hibernate Search 6