1

コードをLucene3.5からLucene4.1に移行していますが、インデックスを作成せずに用語ベクトルを取得する際に問題が発生しています。

問題は、テキスト文字列とが与えられたAnalyzer場合、用語ベクトルを計算する必要があることです(技術的には、用語とその頻度tfを見つけます)。明らかに、インデックスを書き込んで(を使用してIndexWriter)、次にそれらを読み戻す(を使用してIndexReader)ことで実現できますが、コストがかかると思います。さらに、ドキュメントの頻度(df)は必要ありません。したがって、インデックスなしのソリューションが適していると思います。

Lucene 2および3では、上記の目的のための簡単な手法は、文字列とアナライザーを取得するコンストラクターをQueryTermVector拡張して持つを使用することです。TermFreqVector残念ながら、QueryTermVector(とともにTermFreqVector)はLucene 4で削除されており、移行ドキュメントにはについて何も記載されていないようQueryTermVectorです。

Lucene 4でこの問題の解決策はありますか?どうもありがとうございます。

4

1 に答える 1

0

用語/頻度を知る必要がある場合は、アナライザーから直接単一のトークンを取得できます(たとえば、マップまたはマルチセットを使用して、それらをカウントすることでTFを取得できます)。

これがLucene4.0での方法です。

TokenStream ts = analyzer.tokenStream(field, new StringReader(text));
CharTermAttribute charTermAttribute = ts.addAttribute(CharTermAttribute.class);


while (ts.incrementToken()) {
    String term = charTermAttribute.toString();
    //term contains your token
}
于 2013-03-04T17:31:37.773 に答える