【问题标题】:Getting the Vector Space Model (tf-idf) from a query on a lucene index从对 lucene 索引的查询中获取向量空间模型 (tf-idf)
【发布时间】:2011-03-22 05:03:56
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java lucene vsm tf-idf


    【解决方案1】:

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

    【讨论】:

    • 我可以索引 Tf-idf 值吗!?从科学的角度来看?
    【解决方案2】:

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

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

    【讨论】:

    • 是的,这就是我要找的,我会重新审视相似性类。感谢您的帮助。
    【解决方案3】:

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

    【讨论】:

    • 提交每个文档的文本作为查询,您将获得该文档与索引中所有其他文档的余弦相似度。将文档文本转换为查询时,请确保每个术语都是 OR 术语。
    猜你喜欢
    • 2012-02-29
    • 2015-03-31
    • 2015-01-27
    • 2015-03-30
    • 2017-06-19
    • 2012-08-08
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多