Как рассчитать косинусное сходство с tf-idf, используя Lucene и Java

У меня есть запрос и набор документов. Мне нужно ранжировать эти документы по косинусному сходству с tf-idf. Может кто-нибудь сказать мне, какую поддержку я могу получить от Lucene, чтобы вычислить это? Какие параметры я могу напрямую рассчитать из Lucene (можно ли получить tf, idf напрямую через какой-либо метод в lucene?) И как вычислить косинусное сходство с Lucene (есть ли какая-либо функция, которая напрямую возвращает косинусное сходство, если я передам два вектора запроса и документ?)

Спасибо заранее

1 ответ

Lucene уже использует версию косинусного сходства, так что если вам нужен сам необработанный CS, это, вероятно, выполнимо. Я рекомендую официальную страницу, где обсуждается оценка Lucene.

Если вы хотите извлечь эту информацию самостоятельно, это будет схема шагов для tf:

  1. индексировать корпус;
  2. открыть IndexReader;
  3. перебрать все идентификаторы документов, от 0 до maxDoc();
  4. getTermFreqVector(doc, fieldName);
  5. перебирать параллельные массивы tfv.getTerms() а также tfv.getTermFrequencies(),

Что касается docFreq, используйте IndexReader.terms() и перебрать это призвание termEnum.docFreq(),

Другие вопросы по тегам