Я пытаюсь вычислить значение 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 должен быть встроенный метод для этой цели. Спасибо,