2012-07-25 55 views
3

我是Lucene的新手,我真的很感激如何在索引中使用bigrams和trigrams標記。如何在Lucene 3.4.0中創建bigram/trigrams索引?

我使用下面的代碼,我已經修改它能夠計算術語頻率和重量,但我需要這樣做bigrams和trigrams也。我看不到標記化部分!我在網上搜索,一些建議的類在Lucene 3.4.0中不存在,因爲它們已被棄用。

有什麼建議嗎?

感謝, 萌

編輯:--------------------------------

現在我正在使用NGramTokenFilter,因爲mbonaci建議。 這是代碼的一部分,我將一個文本標記爲uni,bi和trigrams。但是它是在字符而不是字詞層面上完成的。

相反的: [H][e][l][l][o][HE][EL]

我在尋找:[Hello][World][Hello World]

 int min =1; 
     int max =3; 
     WhitespaceAnalyzer analyzer = new WhitespaceAnalyzer(Version.LUCENE_34); 
     String text ="hello my world"; 
     TokenStream tokenStream = analyzer.tokenStream("Data", new StringReader(text)); 


     NGramTokenFilter myfilter = new NGramTokenFilter(tokenStream,min,max); 
     OffsetAttribute offsetAttribute2 = myfilter.addAttribute(OffsetAttribute.class); 
     CharTermAttribute charTermAttribute2 = myfilter.addAttribute(CharTermAttribute.class) 
     while (myfilter.incrementToken()) { 
      int startOffset = offsetAttribute2.startOffset(); 
      int endOffset = offsetAttribute2.endOffset(); 
      String term = charTermAttribute2.toString(); 
      System.out.println(term); 
     }; 

回答

1

您需要查看shingles。那篇文章展示瞭如何去做。

+0

謝謝,這個人完成了這項工作。 – user849934 2012-07-26 09:16:45

0
+0

非常感謝。但是,如何在單詞級別而不是字符上進行設置。對於文本'「你好我的世界」我得到:[H] [E] [I] [L] [O] [他] [EL] [ll] [L0]'等等...而不是'[你好] [我的] [世界] [你好我] [我的世界] [你好我的世界]'等...我使用了WhitespaceAnalyzer。 – user849934 2012-07-26 00:11:34