Как получить Маркер от Lucene TokenStream?

Я пытаюсь использовать Apache Lucene для маркирования, и я экранирован при процессе для получения Маркеров из a TokenStream.

Худшая часть - то, что я смотрю на комментарии в JavaDocs, которые рассматривают мой вопрос.

http://lucene.apache.org/java/3_0_1/api/core/org/apache/lucene/analysis/TokenStream.html#incrementToken%28%29

Так или иначе, AttributeSource как предполагается, используется, а не Tokens. Я полностью в недоумении.

Кто-либо может объяснить, как получить подобную маркеру информацию от TokenStream?

72
задан Eric Wilson 14 April 2010 в 14:30
поделиться

1 ответ

Да, это немного запутано (по сравнению со старым добрым способом), но это должно сработать:

TokenStream tokenStream = analyzer.tokenStream(fieldName, reader);
OffsetAttribute offsetAttribute = tokenStream.getAttribute(OffsetAttribute.class);
TermAttribute termAttribute = tokenStream.getAttribute(TermAttribute.class);

while (tokenStream.incrementToken()) {
    int startOffset = offsetAttribute.startOffset();
    int endOffset = offsetAttribute.endOffset();
    String term = termAttribute.term();
}

Изменить: новый способ

Согласно Донотелло, TermAttribute устарел в пользу CharTermAttribute . Согласно jpountz (и документации Lucene), addAttribute более желателен, чем getAttribute .

TokenStream tokenStream = analyzer.tokenStream(fieldName, reader);
OffsetAttribute offsetAttribute = tokenStream.addAttribute(OffsetAttribute.class);
CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);

tokenStream.reset();
while (tokenStream.incrementToken()) {
    int startOffset = offsetAttribute.startOffset();
    int endOffset = offsetAttribute.endOffset();
    String term = charTermAttribute.toString();
}
112
ответ дан 24 November 2019 в 12:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: