2015-03-17 2 views
1

Я хочу генерировать символы ngram для строки. Ниже представлен Lucene 4.1 lib, который я использовал для этого.Как использовать токенизатор ngram в lucene 5.0?

Reader reader = new StringReader(text); 
    NGramTokenizer gramTokenizer = new NGramTokenizer(reader, 3, 5); //catch contiguous sequence of 3, 4 and 5 characters 

    CharTermAttribute charTermAttribute = gramTokenizer.addAttribute(CharTermAttribute.class); 

    while (gramTokenizer.incrementToken()) { 
     String token = charTermAttribute.toString(); 
     System.out.println(token);} 

Однако я хочу использовать Lucene 5.0.0 для этого. NGramTokenizer сильно изменил в Lucene 5.0.0 из предыдущей версии, см. http://lucene.apache.org/core/5_0_0/analyzers-common/index.html?org/apache/lucene/analysis/ngram/NGramTokenizer.html.

Кто-нибудь знает, как использовать Lucene 5.0.0 для выполнения ngrams?

ответ

2

Следующий код:

StringReader stringReader = new StringReader("abcd"); 
    NGramTokenizer tokenizer = new NGramTokenizer(1, 2); 
    tokenizer.setReader(stringReader); 
    tokenizer.reset(); 
    CharTermAttribute termAtt = tokenizer.getAttribute(CharTermAttribute.class); 
    while (tokenizer.incrementToken()) { 
    String token = termAtt.toString(); 
    System.out.println(token); 
    } 

будет производить:

a 
ab 
b 
bc 
c 
cd 
d 
+0

Спасибо! Оно работает. Полезно знать метод tokenizer.setReader (stringReader), который может читать StringReader. – HappyCoding

Смежные вопросы