集群文档Lucene

时间:2014-08-26 22:03:21

标签: lucene cluster-analysis

我想实现一个聚类算法并在Lucene中实现它。为此,我需要表示文档的tf-idf术语向量,因此我可以用与表示文档相同的方式表示质心,找到文档和聚类之间的相似性,并通过计算其新特征值来更新质心。但是我怎么能在Lucene之上做到这一点?

我甚至可以获得tf-idf吗?

我知道每个文档中的术语频率都会被保存,但这是否意味着我需要手动计算idf'每个学期?然后如何使矢量用于聚类。

谢谢

2 个答案:

答案 0 :(得分:0)

您可以存储该字段的术语向量。然后,对于特定文档,您可以获得术语vector:

Terms termFreqVector = indexReader.getTermVector(doc, field);
TermsEnum te = termFreqVector.iterator(null);

然后迭代每个术语的枚举,你可以使用方法:

long df = te.docFreq(); // df of the term
long tf = te.totalTermFreq(); // tf of the term

获取idf你可以用indexReader.numDocs()划分df并应用Math.log

当然,您也可以使用Mahout工具来矢量化lucene文档:http://mahout.apache.org/users/basics/creating-vectors-from-text.html

答案 1 :(得分:0)

请注意,lucene使用TF-IDF的变体,就像在教科书中找到它一样。

您可以在此处查看详细信息:

http://lucene.apache.org/core/4_0_0/core/org/apache/lucene/search/similarities/TFIDFSimilarity.html

特别是,仅访问查询中使用的术语。这主要是为了Lucene的性能:根据需要从索引中读取少量数据

如果您想要访问确切的相似性值,您可能需要使用Collector或其他一些专家级API。