2012-04-16 2 views
2

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

Thanx заранее

ответ

4

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

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

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

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

+0

Мне нужно вычислить значения tf-idf, а затем сходства по косинусу. Я не могу найти образец кода. – Paba

+1

См. [Здесь.] (Http://lucene.apache.org/core/old_versioned_docs/versions/3_5_0/api/core/org/apache/lucene/search/DefaultSimilarity.html) Это объект стратегии, который вы назначаете IndexSearcher, поэтому он будет использовать его для получения tf и idf и, наконец, queryNorm. Вам также необходимо будет управлять нормами поля индекса-времени, назначая свой сходство индексиру и реализуя computeNorm. Ничто из этого не так просто, как просто вычисление подобия косинуса, причина в том, что это высокоэффективная реализация этого расчета, разделенная между индексом-временем и временем запроса. –

+0

Thanx Марко. Но у меня есть одна большая проблема, которая заключается в том, как рассчитать частоту и частоту документа. Есть ли способ получить частоту и частоту документа, передав корпус документа? – Paba

Смежные вопросы