7

ドキュメント内の各用語の tf-idf 値を計算しようとしています。そのため、ドキュメント内の用語を繰り返し処理し、コーパス全体での用語の頻度と、その用語が出現するドキュメントの数を見つけたいと考えています。以下は私のコードです:

//@param index path to index directory
//@param docNbr the document number in the index
public void readingIndex(String index, int docNbr) {
    IndexReader reader = DirectoryReader.open(FSDirectory.open(new File(index)));

    Document doc = reader.document(docNbr);         
    System.out.println("Processing file: "+doc.get("id"));

    Terms termVector = reader.getTermVector(docNbr, "contents");
    TermsEnum itr = termVector.iterator(null);
    BytesRef term = null;

    while ((term = itr.next()) != null) {               
        String termText = term.utf8ToString();                              
        long termFreq = itr.totalTermFreq();   //FIXME: this only return frequency in this doc
        long docCount = itr.docFreq();   //FIXME: docCount = 1 in all cases 

        System.out.println("term: "+termText+", termFreq = "+termFreq+", docCount = "+docCount);   
    }            

    reader.close();     
}

ドキュメントには、totalTermFreq() はすべてのドキュメントでこの用語の総出現回数を返すと書かれていますが、テストしたところ、docNbr で指定されたドキュメント内の用語の頻度のみが返されることがわかりました。および docFreq() は常に 1 を返します。

インデックス全体で用語の頻度を取得するにはどうすればよいですか?

更新 もちろん、用語をその頻度にマップするマップを作成できます。次に、各ドキュメントを繰り返し処理して、用語が出現する合計回数をカウントします。ただし、Lucene にはその目的のためのメソッドが組み込まれている必要があると思いました。ありがとうございました、

4

1 に答える 1