Lucene中所有索引文档的每个字段的术语频率

时间:2011-06-23 19:14:13

标签: java lucene

我正在寻找一种方法来查找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)

谢谢!

0 个答案:

没有答案