2012-06-15 48 views
1

我在org.apache.lucene.analysis.synonym中找到了類WordnetSynonymParser,但在API和Google中都沒有使用它的示例。有沒有人有經驗?有沒有人知道如何使用Wordnet擴展查詢與Lucene 3.6?

謝謝!

編輯:我知道,曾經有類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

是否有可能通過lucene 3.6執行查詢擴展? – synack

回答

2

我正在研究類似的東西,只是閱讀文檔 - 所以從SynonymFilter的相關警告c是很新鮮:

!「」這個記號流不能正確處理位置增量= 1,即,你應該把這個過濾器過濾掉停用詞前「」

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

這有可能是你正在傳遞的分析器(在你的文章中沒有描述你的分析器)到WordNetSynonymParser會刪除停用詞(大多數情況就是這種情況):

java.lang.IllegalArgumentException:term:分析的操作過程to posinc!= 1

2

Edi Bice的回答幫助我解決了這個問題。對於使用lucene 4.0的其他人來說,使用空字符集初始化解析器

WordnetSynonymParser parse = new WordnetSynonymParser(true, true, new StandardAnalyzer(CharArraySet.EMPTY_SET));