1. ホーム
  2. java

Lucene TokenStreamからTokenを取得する方法とは?

2023-10-24 22:36:19

質問

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();
}

編集 新しい 方法

ドノテッロによると 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();
}