1

これを Lucene 4.0 とその新機能で動作させることができません...誰か助けてくれませんか??

Web から大量の html ドキュメントをクロールしました。ここで、すべてのドキュメントの個別の単語の数を数えたいと思います。

これは私がLucene 3.5で行った方法です(単一のドキュメントの場合。それらをすべて取得するには、すべてのドキュメントをループします...毎回1つのドキュメントのみを含む新しいRAMDirectoryを使用します):

Analyzer analyzer = some Lucene Analyzer;
RAMDirectory index;
index = new RAMDirectory();
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_35, analyzer);
String _words = new String();
// get somehow the String containing a certain text:
_words = doc.getPageDescription();  

try {
   IndexWriter w = new IndexWriter(index, config);
   addDoc(w, _words);
   w.close();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
   e.printStackTrace();
 }
try {
 // System.out.print(", count Terms...  ");
 IndexReader reader = IndexReader.open(index);
 TermFreqVector[] freqVector = reader.getTermFreqVectors(0);
 if (freqVector == null) {
 System.out.println("Count words:  ": 0"); 
 }
 for (TermFreqVector vector : freqVector) {
String[] terms = vector.getTerms();
int[] freq = vector.getTermFrequencies();
int n = terms.length;
System.out.println("Count words: " + n);
  ....

Lucene 4.0 でこれを行うにはどうすればよいですか?

ただし、RAMDirectory ではなく FSDirectory を使用してこれを行うことをお勧めします。ドキュメントの数が非常に多い場合、これはよりパフォーマンスが高いと思いますか?

ありがとう、そしてよろしく C.

4

1 に答える 1

1

Fields/Terms API を使用します。

特に「特定のドキュメントの単語ベクトル フィールドにアクセスする」の例を参照してください。

すべてのドキュメントをループしているので、最終目標が実際にすべてのドキュメントの一意の用語の平均数のようなものである場合は、「インデックス統計セクション」まで読み続けてください。たとえば、その場合、#postings / #documents: getSumDocFreq()/maxDoc() を使用して効率的に計算できます。

http://lucene.apache.org/core/4_0_0/core/org/apache/lucene/index/package-summary.html#package_description

于 2012-10-25T04:21:42.820 に答える