首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Lucene的加权余弦相似度计算

基于Lucene的加权余弦相似度计算
EN

Stack Overflow用户
提问于 2012-04-20 00:44:24
回答 1查看 766关注 0票数 0

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

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

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

代码语言:javascript
复制
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()函数为字段赋予更高的权重。在设置boost值之后,我使用调试器查看Taxonomy术语的频率值,但它不会更改术语频率。所以这意味着setboost()函数不会对TermFreVector或TFIDF值产生任何影响?setboost()函数是否增加了权重,并且只能用于文档搜索?

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

在使用TermFreqVector计算TFIDF值时,有没有其他Lucene函数可以用来为某些字段赋予更高的权重?或者我可以只使用setboost()函数来实现这个目的,那么如何实现呢?

EN

回答 1

Stack Overflow用户

发布于 2012-04-20 03:26:26

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

Lucene's algorithm可以看出,boosts的使用方式是作为乘法因子。所以如果你想复制它,是的,这会给你的术语更高的权重。

我不确定你的用例是什么,但你可能想考虑只使用Lucene的记分器类。那你就不用自己动手做了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10232804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档