文字列を TokenStream に変換する
文字列をTokenStreamに変換するには、LuceneライブラリにあるAnalyzerコンポーネントとTokenStreamコンポーネントを使用します。
まず、ご要望に適したAnalyzerを選択する必要があります。Analyzerはテキストを個々の単語(トークンと呼ばれます)に分割するためのツールです。ご要望に応じて、StandardAnalyzer(英語のテキストに使用)、CJKAnalyzer(中国語、日本語、韓国語のテキストに使用)など、さまざまなAnalyzerから選択できます。ご自身の要望に基づいて、適切なAnalyzerを選択できます。
次に、AnalyzerのtokenStreamメソッドを使ってTokenStreamオブジェクトを取得する必要があります。変換したい文字列をメソッドに引数として渡します。たとえば、StandardAnalyzerを使用する場合:
String text = "This is a sample string";
Analyzer analyzer = new StandardAnalyzer();
TokenStream tokenStream = analyzer.tokenStream(null, new StringReader(text));
トークンストリームオブジェクトを用いることで、単語単位の情報を得ることができます。トークンストリームのincrementTokenメソッドを用いて、トークンストリーム内の各トークンを反復処理し、各トークンの位置、オフセット、種類などの属性を用いて、詳細情報にアクセスできます。
try {
CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);
tokenStream.reset();
while (tokenStream.incrementToken()) {
String token = charTermAttribute.toString();
System.out.println(token);
}
tokenStream.end();
} catch (IOException e) {
e.printStackTrace();
} finally {
tokenStream.close();
analyzer.close();
}
上のコードでは、CharTermAttributeを使用して各トークンのテキスト表現を取得し、コンソールへprintしています。
トークンストリームの使用後は、リソースを解放するためにトークンストリームとアナライザーをクローズする end() メソッドと close() メソッドを呼び出す必要があります。
文字をTokenStreamに変換する基本的な手順です。必要に応じて適切に調整したり拡張したりすることができます。