Важность слова в люцене - PullRequest
2 голосов
/ 23 июля 2010

хммм, мне нужно понять, насколько важно слово во всей коллекции документов , то есть , проиндексированное в люценовом индексе .Мне нужно извлечь некоторые «представимые слова», скажем, понятия, которые являются общими и могут быть представимы для всей коллекции.Или сборник "ключевых слов".Я выполнил полнотекстовое индексирование, и единственное поле, которое я использую, - это текстовое содержимое, поскольку заголовки документов в большинстве случаев не представляются (цифры, коды и т. Д.)

РЕДАКТИРОВАТЬ: я читаю индекс, который содержитможет быть 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 »имел хороший tfidf в 5 документах, тогда это важно»

Но, конечно, что-то умнее:)

Спасибо !!!

Ответы [ 4 ]

1 голос
/ 26 июля 2010

Итак, если я вычисляю tfidf, это дает мне важность одного термина по отношению к одному документу.

Не верно.IDF измеряется глобально по всему корпусу.Весь смысл IDF состоит в том, чтобы предоставить простой показатель того, что именно вы ищете - насколько «важен» термин.

Итак, простой способ сделать то, что вы просите, - найти наиболее частовстречающиеся в корпусе термины и взвешивайте их по частоте документов.

0 голосов
/ 27 июля 2010

В папке 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/

0 голосов
/ 25 июля 2010

РЕДАКТИРОВАТЬ: Я до сих пор не понимаю, что вы пытаетесь достичь. Высокое значение TF / IDF означает, что этот термин полезен для дифференциации этого документа от остальной части коллекции , то есть: этот термин встречается относительно чаще в конкретном документе, чем в коллекции в целом. Поэтому он «представляет» документ на фоне коллекции. Это то, что вы хотите?

Один из возможных способов перефразировать ваш вопрос - это сжать коллекцию, используя несколько высокочастотных терминов. Это означает слова, которые часто встречаются в коллекции и могут быть сделаны с помощью слов с низким idf.

Другой альтернативой является то, что вам нужен какой-то лаконичный способ представления коллекции на более общем фоне, например, большая коллекция или вся WWW. В этом случае вы хотите сравнить частоту слов между коллекциями, рассмотрите взаимную информацию между типом слова и коллекцией или другие методы выбора .

Если я все еще не понимаю, пожалуйста, скажите.

0 голосов
/ 23 июля 2010

Вы можете попробовать открыть индекс, используя Люк , и он даст вам самые высокие термины.

...