Lucene 4.4. Wie man Begriff Frequenz über alle index?

Ich versuche zur Berechnung der tf-idf-Wert der einzelnen Begriffe in einem Dokument. So, ich Durchlaufen, der Begriffe in einem Dokument und finden wollen, die Frequenz des Wortes im gesamten Korpus und die Anzahl der Dokumente, in denen der Begriff erscheint. Folgendes ist mein code:

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

Obwohl die Dokumentation besagt totalTermFreq() gibt die Gesamtanzahl der vorkommen dieses Begriffes in allen Dokumenten, bei Tests habe ich festgestellt, es gibt nur die Häufigkeit des Begriffs im Dokument gegeben durch docNbr. und docFreq() immer 1 zurück.

Wie kann ich die Frequenz eines terms über die gesamte index?

Update
Natürlich kann ich eine Karte zu Karte ein Begriff, der auf seine Frequenz. Dann Durchlaufen Sie jedes Dokument, das zum zählen der Gesamtzahl der Zeit-ein Begriff, auftreten. Ich dachte jedoch, dass Lucene sollte mit einer integrierten Methode für diesen Zweck.
Danke,

InformationsquelleAutor chepukha | 2013-12-13
Schreibe einen Kommentar