gpt4 book ai didi

java - 尝试在 Lucene 中计算 Jaccard 系数时得到混合结果

转载 作者:行者123 更新时间:2023-12-01 15:30:36 28 4
gpt4 key购买 nike

我正在尝试使用 Lucene 获得基于 Jaccard 的分数。我已成功获取每个文档的术语数量,我只需要找到每个文档中找到的查询术语数量。在搜索 Lucene 的 Javadocs 时,我遇到了

score.freq()

这个方法根据Javadoc

Returns number of matches for the current document. This returns a float (not int) because SloppyPhraseScorer discounts its freq according to how "sloppy" the match was.

我正在使用我创建的一个非常简单的文档来测试它,该文档具有以下内容

cat cat cat dog bird snake

当我的查询是:猫狗

我得到的 Score.freq() 等于 2(这是预期的)

当我的查询是:cat

我得到的score.freq()等于3

谁知道为什么会发生这种情况?还用更大的查询对其进行了测试,我得到了正确的结果。另外,当我的查询是 dog (在文档中频率为 1)时我得到的预期结果是 Score.freq() 等于 1

预先感谢您的回答!

最佳答案

Scorer.freq() 是一个专家 API,其结果取决于相关评分者。

您看到的差异是因为 boolean 记分器的 freq() 表示匹配的匹配器(例如 boolean 子句)的数量,而对于术语记分器来说,它表示该术语在文档中出现的次数。

因此,您需要从正确的记分器(例如 boolean 记分器或其叶子)收集 freq() ,具体取决于您需要哪一个。在 3.x 版本中,这是一个访问者 API,但在 4.x 版本中,您可以通过 getChildren() 迭代地导航记分器层次结构。这通常是您在 Collector.setNextReaderMethod 中执行的操作,仅保存对您关心的记分器的引用,以便实际的collect() 速度非常快。

注意:我觉得可以公平地说,这个功能非常新且先进,并且存在一些错误。在某些情况下,有可用的补丁,但还没有时间编写好的测试:(

https://issues.apache.org/jira/browse/LUCENE-3505

https://issues.apache.org/jira/browse/LUCENE-2686

关于java - 尝试在 Lucene 中计算 Jaccard 系数时得到混合结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9557783/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com