2

嗯,我需要了解在 lucene 索引中索引的整个文档集合中的单词有多重要。我需要提取一些“可表示的单词”,让我们说一些常见的并且可以表示为整个集合的概念。或收集“关键词”。我做了全文索引,我使用的唯一字段是文本内容,因为文档的标题大多不可表示(数字、代码等....)

编辑:我正在阅读可能包含 60 个文档的索引....

 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(term1, doc1);

tfidf(term1, doc2);

tfidf(term1, doc3); ...........等等。
我需要衡量这个术语在集合中的重要性。凭直觉,这类似于“如果术语“term1”在 5 个文档中具有良好的 tfidf,那么这很重要”

但是,当然,更聪明的东西:)

谢谢!!!

4

4 回答 4

1

因此,如果我计算 tfidf,它会告诉我单个术语相对于单个文档的重要性。

不对。IDF 在整个语料库中进行全局测量。IDF 的全部意义在于提供一个准确衡量您正在寻找的内容的简单衡量标准——一个术语的“重要性”程度。

因此,按照您的要求,一种简单的方法是找到语料库中出现频率最高的术语,并按文档频率对它们进行加权。

于 2010-07-25T21:41:11.550 回答
0

contrib/ 文件夹有一个类来生成最常用术语的列表:http: //svn.apache.org/repos/asf/lucene/dev/trunk/lucene/contrib/misc/src/java/org/apache /lucene/misc/HighFreqTerms.java

如果您正在寻找语义特征提取,您可以查看http://project.carrot2.org/

于 2010-07-27T14:31:53.930 回答
0

您可以尝试使用Luke打开索引,它会为您提供排名靠前的术语。

于 2010-07-23T06:00:41.377 回答
0

编辑:我仍然没有得到你想要达到的目标。高 TF/IDF 值意味着该术语有助于将该文档与集合的其余部分区分开来,即:该术语在特定文档中的频率相对高于一般集合中的频率。因此,它在集合背景下“代表”文档。这是你想要的吗?

重新表述您的问题的一种可能方法是您希望使用少量高频术语来压缩集合。这意味着在集合中出现很多的单词,并且可以通过使用具有低 idf 的单词来完成。

另一种选择是,您需要一些简洁的方式来表示针对更一般背景的集合,例如更大的集合或整个 WWW。在这种情况下,你想比较集合之间的词频,考虑词类型和集合之间的互信息,或者其他特征选择方法。

如果我仍然错过你的观点,请说出来。

于 2010-07-25T09:06:00.040 回答