【发布时间】:2012-02-14 20:58:24
【问题描述】:
我是 Lucene 世界的新手,对该主题没有太多的工作知识。我需要提取文档术语向量,我在网上找到了以下代码How to extract Document Term Vector in Lucene 3.5.0。
/**
* Sums the term frequency vector of each document into a single term frequency map
* @param indexReader the index reader, the document numbers are specific to this reader
* @param docNumbers document numbers to retrieve frequency vectors from
* @param fieldNames field names to retrieve frequency vectors from
* @param stopWords terms to ignore
* @return a map of each term to its frequency
* @throws IOException
*/
private Map<String,Integer> getTermFrequencyMap(IndexReader indexReader, List<Integer> docNumbers, String[] fieldNames, Set<String> stopWords)
throws IOException {
Map<String,Integer> totalTfv = new HashMap<String,Integer>(1024);
for (Integer docNum : docNumbers) {
for (String fieldName : fieldNames) {
TermFreqVector tfv = indexReader.getTermFreqVector(docNum, fieldName);
if (tfv == null) {
// ignore empty fields
continue;
}
String terms[] = tfv.getTerms();
int termCount = terms.length;
int freqs[] = tfv.getTermFrequencies();
for (int t=0; t < termCount; t++) {
String term = terms[t];
int freq = freqs[t];
// filter out single-letter words and stop words
if (StringUtils.length(term) < 2 ||
stopWords.contains(term)) {
continue; // stop
}
Integer totalFreq = totalTfv.get(term);
totalFreq = (totalFreq == null) ? freq : freq + totalFreq;
totalTfv.put(term, totalFreq);
}
}
}
return totalTfv;
}
我已经创建了位于以下目录中的索引。
String indexDir = "C:\\Lucene\\Output\\";
Directory dir = FSDirectory.open(new File(indexDir));
IndexReader reader = IndexReader.open(dir);
我的问题是我不知道如何获取上述功能所需的文档 ID(列出文档编号)。我尝试了几种方法,例如
TermDocs docs = reader.termDocs();
但它不起作用。
【问题讨论】:
-
顺便说一句,你怎么知道什么是词频向量,却对 lucene 文档 id 一无所知?
-
@milan 我读到 Lucene 会自动执行此操作,但上面的代码有点混乱,因为“docNumbers”是作为参数传递的。
标签: lucene