我需要从lucene查询的结果中获取向量空间模型(使用tf-idf加权),并且无法弄清楚如何执行此操作。看起来应该很简单,在这个阶段,也许你们中的一个人可以指出我正确的方向。
我一直试图弄清楚如何做好这段时间,而且要么我还没有说明我所读过的东西是我需要的东西(很可能),或者解决方案还没有张贴到我的特定问题。我甚至尝试直接从查询结果中计算VSM,但我的解决方案具有可怕的复杂性。
编辑:对于偶然发现这个问题的其他人来说,有一个解决方案@更清晰的问题here我需要的东西可以通过IndexReader.getTermFreqVector(String field,int docid)方法获得。
不幸的是,这对我不起作用,因为我正在处理的索引没有存储术语频率向量,所以我想我还在寻找更多的帮助!
答案 0 :(得分:3)
要回答这个问题,您可以使用IndexReader.getTermFreqVector()和Searcher.docFreq()类为一组lucene结果计算TF-IDF加权向量空间模型。在Lucene中无法直接获取VSM的一组结果。
答案 1 :(得分:2)
也许我误解了你要做的事情,但Lucene的得分使用了矢量空间模型。如果您想了解有关如何计算分数的更多详细信息,请给出文档和查询,请使用Searcher.explain(查询查询,int doc)。
答案 2 :(得分:1)
如果我从您的评论中正确理解,您需要计算文档之间的VSM余弦相似度,而不是查询和文档之间的相似度。我不确切知道如何做到这一点,但我会指出Similarity
类的Lucene API页面。您可能必须派生并使用Similarity
的自定义子类来更改coord
和queryNorm
成员,并找到将文档转换为查询对象的方法。
(不保证;我只想自己弄清楚这个得分。)