Java lucene索引中的单词重要性
嗯,我需要知道在整个文档集合中,在lucene索引中被索引的单词有多重要。我需要提取一些“可表示的词”,让我们说一些常见的概念,可以表示整个集合。或集合“关键字”。我做了全文索引,我使用的唯一字段是文本内容,因为文档的标题大多不可表示(数字、代码等) 编辑: 我正在阅读包含60个文档的索引Java lucene索引中的单词重要性,java,lucene,indexing,keyword,frequency,Java,Lucene,Indexing,Keyword,Frequency,嗯,我需要知道在整个文档集合中,在lucene索引中被索引的单词有多重要。我需要提取一些“可表示的词”,让我们说一些常见的概念,可以表示整个集合。或集合“关键字”。我做了全文索引,我使用的唯一字段是文本内容,因为文档的标题大多不可表示(数字、代码等) 编辑: 我正在阅读包含60个文档的索引 int numDocs = fReader.numDocs(); while(termEnum.next()) { Term term = termEnum.term();
int numDocs = fReader.numDocs();
while(termEnum.next())
{
Term term = termEnum.term();
double df = fReader.docFreq(term);
TermDocs termDocs = indexReader.termDocs(term);
//HERE is what i mean when i say tfidf is per document,
while(termDocs.next())
{
double tf = termDocs.freq();
// Calculate tfidf.......
}
termDocs.close();
}
因此,我将得到这个术语的tfidf,但对于我们循环使用的每个文档。我不需要这些结果:
tfidf(条款1,文件1)
tfidf(第1条款,doc2)
tfidf(第1条款,doc3);
……等等。我需要衡量一下这个术语在集合中的重要性。凭直觉,这类似于“如果术语“term1”在5个文档中具有良好的tfidf,那么它是重要的” 当然,还有更聪明的:)
谢谢你 您可以尝试使用打开索引,它会为您提供排名靠前的术语。编辑:我仍然不明白您想要实现的目标。 较高的TF/IDF值意味着此术语有助于将此文档与集合的其他部分区分开来,也就是说:此术语在特定文档中的使用频率相对高于集合中的使用频率。因此,它在集合背景下“表示”文档。这是你想要的吗 重新表述问题的一种可能方式是,您希望压缩集合,使用一些高频术语。这意味着在集合中出现很多单词,可以通过采用idf较低的单词来实现
另一种选择是,您需要一些简洁的方式来表示集合,而不是更一般的背景,例如更大的集合或整个WWW。在这种情况下,您要比较集合之间的词频,考虑单词类型和集合之间的关系,或者其他方法。p> 如果我仍然没有领会你的意思,请说出来
所以,若我计算tfidf,它给出了单个项相对于单个文档的重要性 不是真的。IDF是在整个语料库中进行全局测量的。IDF的全部目的是提供一个简单的方法,精确地衡量您所寻找的内容——一个术语的“重要性”因此,一种简单的方法是在语料库中找到最常出现的术语,并按文档频率对它们进行加权。contrib/文件夹有一个类来生成最常出现的术语列表:
如果您正在寻找语义特征提取,您可以查看@Mikos,这些术语是我的算法进行分析所需要的。所以在卢克身上看到他们并没有帮助。我需要实现这一点。不过,我不确定你是否理解我的要求。即使在运行时我不需要这些术语,我认为Luke中的顶级术语也不是我需要的。你知道卢克用什么样的相似函数来检索那些热门词汇吗????如果只是索引中的频率(我认为是),这对我的情况毫无帮助……:/@朱莉娅,你应该进一步说明你的要求。很抱歉,我没有理解,但怀疑也会成为其他人的问题,所以请进一步解释您的商业案例,我会尽力帮助您。:-)@朱莉娅:我编辑了我的答案。希望它更清晰、更中肯。