0

这个问题与使用 Lucene 计算文档之间的 CosineSimilarity 有关

这些文档分别用分类和本体术语进行标记。当我计算文档之间的文档相似度时,我想给那些分类术语和本体术语赋予更高的权重。

当我为文档编制索引时,我在我的程序中为每个文档定义了文档内容、分类和本体术语作为字段。

Field ontologyTerm= new Field("fiboterms", fiboTermList[curDocNo], Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES);
Field taxonomyTerm = new Field("taxoterms", taxoTermList[curDocNo], Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES);
Field document = new Field(docNames[curDocNo], strRdElt, Field.TermVector.YES);

我正在使用 Lucene 索引 .TermFreqVector 函数来计算 TFIDF 值,然后使用 TFIDF 值计算两个文档之间的余弦相似度。

我可以使用 Lucene 的 field.setBoost() 函数在索引之前为字段赋予更高的权重。在看到提升值后,我使用调试器查看分类术语的频率值,但它不会改变术语频率。所以这意味着 setboost() 函数不会对 TermFreVector 或 TFIDF 值产生任何影响?setboost() 函数是否会增加权重并且只能用于文档搜索?

我能做的另一件事是,在计算 TFIDF 分数之前,以编程方式将分类和本体术语频率与定义的权重因子相乘。这会在文档相似度计算中赋予分类学和本体论术语更高的权重吗?

在使用 TermFreqVector 计算 TFIDF 值时,是否有任何其他 Lucene 函数可用于为某些字段赋予更高的权重?或者我可以为此目的使用 setboost() 函数,那么如何?

4

1 回答 1

1

TermFreqVector就是这样 - 术语频率。没有重量。它在文档中说“数组中的每个位置都包含该术语在文档或文档字段中出现的次数。”

从Lucene 的算法中可以看出,使用 boosts 的方式是一个乘法因子。因此,如果您想复制它,那么是的,这将使您的条款具有更高的权重。

我不确定你的用例是什么,但你可能想考虑只使用 Lucene 的 Scorer 类。然后你就不必处理自己的问题了。

于 2012-04-19T19:26:25.807 回答