Я пытаюсь использовать Apache Lucene для маркирования, и я экранирован при процессе для получения Маркеров из a TokenStream
.
Худшая часть - то, что я смотрю на комментарии в JavaDocs, которые рассматривают мой вопрос.
Так или иначе, AttributeSource
как предполагается, используется, а не Token
s. Я полностью в недоумении.
Кто-либо может объяснить, как получить подобную маркеру информацию от TokenStream?
Да, это немного запутано (по сравнению со старым добрым способом), но это должно сработать:
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();
}