如何使用Lucene和Java计算与tf-idf的余弦相似度

时间:2012-04-16 11:26:19

标签: java lucene tf-idf cosine-similarity

我有一个查询和一组文件。我需要根据与tf-idf的余弦相似性对这些文档进行排名。有人可以告诉我,我可以从Lucene那里得到什么支持来计算它?我可以直接从Lucene计算出哪些参数(我可以直接通过lucene中的某个方法得到tf,idf吗?)以及如何用Lucene计算余弦相似度(如果我传递查询的两个向量,那么是否存在直接返回余弦相似性的函数文件?)

提前完成

1 个答案:

答案 0 :(得分:4)

Lucene已经使用了pimped版本的余弦相似度,所以如果你需要原始CS本身,它可能是可行的。我推荐讨论Lucene得分的official page

如果你想自己提取这些信息,这将是 tf 步骤的概述:

  1. 索引语料库;
  2. 打开IndexReader;
  3. 遍历所有文档ID,0到maxDoc();
  4. getTermFreqVector(doc, fieldName);
  5. 遍历并行数组tfv.getTerms()tfv.getTermFrequencies()
  6. 对于 docFreq ,请使用IndexReader.terms()并迭代此调用termEnum.docFreq()