1

我无法让它与 Lucene 4.0 及其新功能一起使用......有人可以帮帮我吗?

我从网上抓取了一堆 html 文档。现在我想计算每个文档的不同单词的数量。

这就是我使用 Lucene 3.5 的方式(对于单个文档。为了获得所有文档,我循环遍历所有文档……每次使用仅包含一个文档的新 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 做到这一点?

但是,我更喜欢使用 FSDirectory 而不是 RAMDirectory 来执行此操作;如果我有大量文档,我想这会更高效?

感谢和问候 C.

4

1 回答 1

1

使用字段/术语 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 回答