我正在寻找一种方法来查找Lucene中类似字段的术语频率。
假设给定文档的字段如下:
文档1:
/ movie / actor / name0:汤姆 / movie / actor / name1:汤姆汤姆 / movie / actor / name2:Tom Tom Tom
/ movie / actor / nickname0:汤姆汤姆汤姆 / movie / actor / nickname1:Tom Tom
文件2:
/ movie / actor / name0:汤姆汤姆汤姆 / movie / actor / name1:汤姆
/ movie / actor / nickname0:Tom
文件3:
/ movie / actor / name0:Tom
/ movie / actor / nickname0:汤姆汤姆 / movie / actor / nickname1:Tom Tom Tom
我想要以下输出:
/ movie / actor / name:16(所有类型的名称X的总和)
/ movie / actor / nickname:11(与上述算法相同)。
我有办法有效地遍历所有的nicknameX和nameX,所以我不需要那里的帮助。我需要帮助找到术语频率。
现在,对于给定的字段(比如/ movie / actor / name),我首先创建一个新的termdocs,浏览/ movie / actor / name0,...,/ movie / actor / namen,创建一个新的使用ith fieldname和给定字段值的术语(在上面的示例中,字段值为“tom”),将termdocs的术语设置为该术语,并遍历每个文档计算freq()
显式(对于一个字段):
TermDocs td = is.getIndexReader().termDocs();
for(int i=tmp2; i<=tmp; i++){
Term thisterm = new Term(distinctf[i], fv);
td.seek(thisterm);
while(td.next()){ //loop through <document, frequency> enumeration (all docs in collection)
sum+=td.freq();
}
}
return sum;
distinct [i]是第i个不同的字段(例如/ movie / actor / namei)
谢谢!