我正在尝试使用 Apache Lucene 进行标记化,但我对从某个地方获取标记的过程感到困惑TokenStream
.
最糟糕的是我正在查看 JavaDocs 中解决我的问题的评论。
http://lucene.apache.org/java/3_0_1/api/core/org/apache/lucene/analysis/TokenStream.html#incrementToken%28%29
不知何故,一个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();
}
编辑:new way
根据多诺泰罗的说法,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();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)