2

うーん、 lucene index で索引付けされている文書コレクション全体の単語がどれほど重要かを取得する必要があります。いくつかの「表現可能な単語」を抽出する必要があります。一般的で、コレクション全体で表現できる概念としましょう。またはコレクション「キーワード」。ドキュメントのタイトルはほとんど表現できないため(数字、コードなど)、全文索引付けを行いましたが、使用している唯一のフィールドはテキストコンテンツです。

編集: おそらく 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 値は、この用語がこのドキュメントをコレクションの残りの部分と区別するのに役立つことを意味します。つまり、この用語は一般的なコレクションよりも特定のドキュメントで比較的頻繁に使用されます。したがって、コレクションの背景に対してドキュメントを「表します」。これは、あなたの望むことですか?

質問を言い換える 1 つの考えられる方法は、高頻度の用語をほとんど使用せずにコレクションを圧縮することです。これは、コレクションに多く出現する単語を意味し、idf の低い単語を取得することで実行できます。

もう 1 つの方法は、より一般的な背景 (より大きなコレクションや WWW 全体など) に対してコレクションを表す簡潔な方法が必要なことです。その場合、コレクション間で単語の頻度を比較したり、単語タイプとコレクション間の相互情報量を検討したり、その他の特徴選択方法を検討したりします。

もし私があなたの言いたいことをまだ見逃していたら、そう言ってください。

于 2010-07-25T09:06:00.040 に答える