我在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
答案 0 :(得分:3)
Edi Bice的回答帮助我解决了这个问题。对于其他可能正在寻找的人,使用lucene 4.0,使用空字符集
初始化解析器WordnetSynonymParser parse = new WordnetSynonymParser(true, true, new StandardAnalyzer(CharArraySet.EMPTY_SET));
答案 1 :(得分:2)
我正在研究类似的事情,只是阅读文档 - 所以SynonymFilter doc的相关警告非常新鲜:
“”此令牌流无法正确处理位置增量!= 1,即您应该在过滤掉停用词之前放置此过滤器“”
http://lucene.apache.org/core/3_6_0/api/all/org/apache/lucene/analysis/synonym/SynonymFilter.html
你传递的分析器(你在帖子中没有描述)可能会删除停用词(就像大多数人一样)导致:
java.lang.IllegalArgumentException:term:分析为posinc的令牌的行为过程!= 1