2

我在 org.apache.lucene.analysis.synonym 中找到了WordnetSynonymParser类,但在 API 和谷歌中都没有使用它的示例。有没有人有这方面的经验?

谢谢!

编辑:我知道曾经有SynExpand类,但是在 3.6 版中它消失了......

我尝试:

           try {
                   FileReader rulesReader = new FileReader("wn/wn_s.pl");
               SynonymMap.Builder parser = null;
               parser = new WordnetSynonymParser(true, true, analyzer);
               ((WordnetSynonymParser)parser).add(rulesReader);          
               synonymMap = parser.build();
            } catch (Exception e) {
                            e.printStackTrace();
                            System.exit(1);
            }

但我收到以下错误:

java.text.ParseException: Invalid synonym rule at line 109
        at org.apache.lucene.analysis.synonym.WordnetSynonymParser.add(WordnetSynonymParser.java:75)
        at pirServer.QueryClassifier.<init>(QueryClassifier.java:77)
        at pirServer.PIRServer.main(PIRServer.java:32)
Caused by: java.lang.IllegalArgumentException: term: course of action analyzed to a token with posinc != 1
        at org.apache.lucene.analysis.synonym.SynonymMap$Builder.analyze(SynonymMap.java:131)
        at org.apache.lucene.analysis.synonym.WordnetSynonymParser.parseSynonym(WordnetSynonymParser.java:92)
        at org.apache.lucene.analysis.synonym.WordnetSynonymParser.add(WordnetSynonymParser.java:67)
        ... 2 more 
4

2 回答 2

3

Edi Bice 的回答帮助我解决了这个问题。对于可能正在寻找的其他人,使用 lucene 4.0,使用空字符集初始化解析器

WordnetSynonymParser parse = new WordnetSynonymParser(true, true, new StandardAnalyzer(CharArraySet.EMPTY_SET));
于 2014-11-24T17:34:11.120 回答
2

我正在做类似的事情,只是阅读了文档-因此 SynonymFilter 文档中的相关警告非常新鲜:

""此令牌流无法正确处理位置增量!= 1,即,您应该在过滤掉停用词之前放置此过滤器""

http://lucene.apache.org/core/3_6_0/api/all/org/apache/lucene/analysis/synonym/SynonymFilter.html

您传递给 WordNetSynonymParser 的分析器(您未能在帖子中描述)可能会删除停用词(大多数情况下),导致:

java.lang.IllegalArgumentException: term: 用 posinc != 1 分析到令牌的行动过程

于 2012-06-28T15:44:58.300 回答