gpt4 book ai didi

java - 如何计算文档集的词频?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:19:31 26 4
gpt4 key购买 nike

我有一个包含以下文件的 Lucene-Index:

doc1 := { caldari, jita, shield, planet }
doc2 := { gallente, dodixie, armor, planet }
doc3 := { amarr, laser, armor, planet }
doc4 := { minmatar, rens, space }
doc5 := { jove, space, secret, planet }

所以这 5 个文档使用了 14 个不同的术语:

[ caldari, jita, shield, planet, gallente, dodixie, armor, amarr, laser, minmatar, rens, jove, space, secret ]

每个术语的出现频率:

[ 1, 1, 1, 4, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1 ]

为了便于阅读:

[ caldari:1, jita:1, shield:1, planet:4, gallente:1, dodixie:1, 
armor:2, amarr:1, laser:1, minmatar:1, rens:1, jove:1, space:2, secret:1 ]

我现在想知道的是,如何获得一组的词频 vector 文件?

例如:

Set<Documents> docs := [ doc2, doc3 ]

termFrequencies = magicFunction(docs);

System.out.pring( termFrequencies );

将导致输出:

[ caldari:0, jita:0, shield:0, planet:2, gallente:1, dodixie:1, 
armor:2, amarr:1, laser:1, minmatar:0, rens:0, jove:0, space:0, secret:0 ]

删除所有零:

[ planet:2, gallente:1, dodixie:1, armor:2, amarr:1, laser:1 ]

注意,结果 vector 只包含文件。不是整个指数的整体频率!术语“行星”在整个索引中出现了 4 次,但源集中的文档只包含它 2 次。

一个简单的实现是只遍历docs 设置,创建 map 并计算每个术语。但我需要一个解决方案,该解决方案也适用于文档集大小100.000 或 500.000。

我可以使用 Lucene 中的某个功能来获取该术语 vector 吗?如果没有这样的特性,数据结构会是什么样子有人可以在索引时创建以获得这样的术语 vector 简单快速?

我不是 Lucene 专家,所以如果解决方案明显或微不足道,我很抱歉。

也许值得一提:该解决方案对于 Web 应用程序来说应该足够快,适用于客户端搜索查询。

最佳答案

转到这里:http://lucene.apache.org/java/3_0_1/api/core/index.html并检查这个方法

org.apache.lucene.index.IndexReader.getTermFreqVectors(int docno);

您必须知道文档 ID。这是一个内部 lucene id,它通常会在每次索引更新时发生变化(有删除 :-))。

我相信 lucene 2.x.x 也有类似的方法

关于java - 如何计算文档集的词频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2924089/

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