如何使用Lucene(4.6)计算给定短语的文档频率?
我找到了一种计算一个学期DF的方法。
短语(1-5 个单词)有没有像这样优雅的东西?
val reader = IndexReader.open(IndexProperties.index)
println("Number of docs in index : " + reader.maxDoc())
val t = new Term("text", "братишка")
val df = reader.docFreq(t)
println("DF = " + df)
UPD:我所说的短语是指文档中必须出现的简短术语序列。它们也必须在文本中一个接一个地出现。
Java Code:
String phrase = "your phrase";
Query q = new Queryparser(Version.LUCENE_46, "field", analyzer).parse(phrase);
int df = new IndexSearher(reader).search(q, null).scoreDocs.length;
看起来PhraseQuery是解决方案。
for (termString <- splitted) {
pq.add(new Term(IndexProperties.textField, termString))
}
pq.setSlop(0)
val collector = TopScoreDocCollector.create(5000, true)
searcher.search(pq, collector)
同样重要的是,splitted : Array[String]
必须是分析器标记化的结果。