代码之家  ›  专栏  ›  技术社区  ›  Julia

Lucene索引中的单词重要性

  •  2
  • Julia  · 技术社区  · 16 年前

    嗯,我需要知道 重要的是整个文档集合中的单词 那就是 在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(术语1,文档1);

    tfidf(术语1,文档2);

    tfidf(术语1,文档3); 等等。
    我需要在收藏中衡量这个词的重要性。凭直觉,这就像“如果术语“term1”在5个文档中有好的tfidf,那么它很重要”

    但是,当然,更聪明的事情:)

    谢谢您!!!!

    4 回复  |  直到 15 年前
        1
  •  1
  •   bajafresh4life    16 年前

    所以,如果我计算tfidf,它给了我关于单个文档的单个术语的重要性。

    不是真的。IDF是在整个语料库中全局测量的。IDF的重点是提供一个简单的度量,精确地衡量您正在寻找什么——一个术语有多“重要”。

    因此,一个简单的方法就是找到语料库中最经常出现的术语,并根据文档频率对它们进行加权。

        2
  •  0
  •   Mikos    16 年前

    您可以尝试使用打开索引 Luke 它给了你排名第一的术语。

        3
  •  0
  •   Yuval F    16 年前

    编辑:我仍然没有得到你想要的。 高tf/idf值意味着这个术语是有用的 用于区分此文档与集合的其余部分 也就是说,这个术语在特定的文档中比在一般的集合中更频繁。因此,它在收集背景下“表示”文档。这就是你想要的吗?

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

    另一种选择是,您希望以某种简洁的方式在更一般的背景下表示集合,例如更大的集合或整个www。在这种情况下,您希望比较集合之间的词频,考虑 mutual information 在单词类型和集合之间,或其他 feature selection 方法。

    如果我仍然不明白你的意思,请说出来。

        4
  •  0
  •   Xodarap    16 年前

    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/

    推荐文章