2010-10-13 3 views
1

Я хочу использовать WikipediaTokenizer в проекте lucene - http://lucene.apache.org/java/3_0_2/api/contrib-wikipedia/org/apache/lucene/wikipedia/analysis/WikipediaTokenizer.html Но я никогда не использовал lucene. Я просто хочу преобразовать строку wikipedia в список токенов. Но я вижу, что в этом классе доступно только четыре метода: end, incrementToken, reset, reset (reader). Может ли кто-нибудь указать мне пример использования.Пример использования WikipediaTokenizer в Lucene

спасибо.

+0

Смотрите также http://stackoverflow.com/questions/3916806/3916947#3916947 –

ответ

3

В Lucene 3.0, следующий метод() удаляется. Теперь вы должны использовать incrementToken для итерации через токены, и он возвращает false, когда вы достигаете конца входного потока. Чтобы получить каждый токен, вы должны использовать методы класса AttributeSource. В зависимости от атрибутов, которые вы хотите получить (термин, тип, полезная нагрузка и т. Д.), Вам необходимо добавить тип класса соответствующего атрибута к вашему токенизатору с помощью метода addAttribute.

Следующий образец частичного кода из тестового класса WikipediaTokenizer, который вы можете найти, если вы загрузите исходный код Lucene.

... 
WikipediaTokenizer tf = new WikipediaTokenizer(new StringReader(test)); 
int count = 0; 
int numItalics = 0; 
int numBoldItalics = 0; 
int numCategory = 0; 
int numCitation = 0; 
TermAttribute termAtt = tf.addAttribute(TermAttribute.class); 
TypeAttribute typeAtt = tf.addAttribute(TypeAttribute.class); 

while (tf.incrementToken()) { 
    String tokText = termAtt.term(); 
    //System.out.println("Text: " + tokText + " Type: " + token.type()); 
    String expectedType = (String) tcm.get(tokText); 
    assertTrue("expectedType is null and it shouldn't be for: " + tf.toString(), expectedType != null); 
    assertTrue(typeAtt.type() + " is not equal to " + expectedType + " for " + tf.toString(), typeAtt.type().equals(expectedType) == true); 
    count++; 
    if (typeAtt.type().equals(WikipediaTokenizer.ITALICS) == true){ 
    numItalics++; 
    } else if (typeAtt.type().equals(WikipediaTokenizer.BOLD_ITALICS) == true){ 
    numBoldItalics++; 
    } else if (typeAtt.type().equals(WikipediaTokenizer.CATEGORY) == true){ 
    numCategory++; 
    } 
    else if (typeAtt.type().equals(WikipediaTokenizer.CITATION) == true){ 
    numCitation++; 
    } 
} 
... 
0

общественного класса WikipediaTokenizerTest { статические регистратор регистратор = Logger.getLogger (WikipediaTokenizerTest.class); protected static final String LINK_PHRASES = "щелкните [[ссылка здесь снова]] щелкните [http://lucene.apache.org здесь снова] [[Категория: a b c d]]";

public WikipediaTokenizer testSimple() throws Exception { 
    String text = "This is a [[Category:foo]]"; 
    return new WikipediaTokenizer(new StringReader(text)); 
} 
public static void main(String[] args){ 
    WikipediaTokenizerTest wtt = new WikipediaTokenizerTest(); 

    try { 
     WikipediaTokenizer x = wtt.testSimple(); 

     logger.info(x.hasAttributes()); 

     Token token = new Token(); 
     int count = 0; 
     int numItalics = 0; 
     int numBoldItalics = 0; 
     int numCategory = 0; 
     int numCitation = 0; 

     while (x.incrementToken() == true) { 
      logger.info("seen something"); 
     } 

    } catch(Exception e){ 
     logger.error("Exception while tokenizing Wiki Text: " + e.getMessage()); 
    } 


} 
+0

TermAttribute не доступен в Lucene 4.2.1. Итак, как вы получаете доступ к атрибутам при переходе на более высокую версию Lucene? – RalfB

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