我无法使用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来执行此操作;如果我有相当多的文件,我想这更有效率?
谢谢和问候 下进行。
答案 0 :(得分:1)
使用字段/条款apis。
特别参见“特定文档的访问术语矢量字段”
的示例如果您正在循环查看所有文档,如果您的最终目标确实类似于所有文档中的唯一术语的平均数,请继续阅读“索引统计信息部分”。例如,在这种情况下,您可以使用#postings / #documents有效地计算:getSumDocFreq()/ maxDoc()