Как рассчитать косинусное сходство с tf-idf, используя Lucene и Java
У меня есть запрос и набор документов. Мне нужно ранжировать эти документы по косинусному сходству с tf-idf. Может кто-нибудь сказать мне, какую поддержку я могу получить от Lucene, чтобы вычислить это? Какие параметры я могу напрямую рассчитать из Lucene (можно ли получить tf, idf напрямую через какой-либо метод в lucene?) И как вычислить косинусное сходство с Lucene (есть ли какая-либо функция, которая напрямую возвращает косинусное сходство, если я передам два вектора запроса и документ?)
Спасибо заранее
1 ответ
Lucene уже использует версию косинусного сходства, так что если вам нужен сам необработанный CS, это, вероятно, выполнимо. Я рекомендую официальную страницу, где обсуждается оценка Lucene.
Если вы хотите извлечь эту информацию самостоятельно, это будет схема шагов для tf:
- индексировать корпус;
- открыть
IndexReader
; - перебрать все идентификаторы документов, от 0 до
maxDoc()
; getTermFreqVector(doc, fieldName);
- перебирать параллельные массивы
tfv.getTerms()
а такжеtfv.getTermFrequencies()
,
Что касается docFreq, используйте IndexReader.terms()
и перебрать это призвание termEnum.docFreq()
,