1

我需要从 lucene 查询的结果中获取向量空间模型(带有 tf-idf 权重),但不知道该怎么做。看起来应该很简单,在这个阶段,也许你们中的一个人可以为我指明正确的方向。

我一直在试图弄清楚如何做到这一点,或者我还没有理解我所阅读的内容是我需要的(很可能),或者解决方案还没有发布到我的特别的问题。我什至尝试自己直接从查询结果中计算 VSM,但我的解决方案非常复杂。

编辑:对于任何其他偶然发现此问题的人,有一个解决方案@这里更清晰的问题我需要什么可以通过 IndexReader.getTermFreqVector(String field, int docid) 方法得到。

不幸的是,这对我不起作用,因为我正在处理的索引没有存储术语频率向量,所以我想我仍在寻找更多帮助!

4

3 回答 3

3

要回答这个问题,您可以使用 IndexReader.getTermFreqVector() 和 Searcher.docFreq() 类为一组 lucene 结果计算 TF-IDF 加权向量空间模型。在 Lucene 中无法直接获取一组结果的 VSM。

于 2010-08-10T15:41:02.413 回答
2

也许我误解了你想要做什么,但是 Lucene 的评分使用了向量空间模型。如果您想了解更多关于如何计算分数的详细信息,给定一个文档和一个查询,请使用 Searcher.explain(Query query, int doc) 。

于 2010-07-28T15:00:28.220 回答
1

如果我从您的评论中正确理解,您希望计算文档之间的 VSM 余弦相似度,而不是查询和文档之间的相似度。我不确切知道如何做到这一点,但我会为您指出该Similarity课程的 Lucene API 页面。您可能必须派生和使用Similarity更改coordandqueryNorm成员的自定义子类,并找到将文档转换为查询对象的方法。

(不能保证;我只是想自己弄清楚这个得分。)

于 2010-07-29T11:29:28.163 回答