这个问题与使用Lucene计算文档之间的CosineSimilarity有关
文档分别使用Taxonomy和Ontology术语进行标记。当我计算文档之间的文档相似度时,我希望为这些分类术语和本体术语赋予更高的权重。
在为文档编制索引时,我在程序中将文档内容、分类和本体术语定义为每个文档的字段,如下所示。
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()函数来实现这个目的,那么如何实现呢?
发布于 2012-04-20 03:26:26
TermFreqVector就是--频率这一术语。没有重量。它在文档中写道:“数组中的每个位置都包含该术语在文档或文档字段中出现的次数。”
从Lucene's algorithm可以看出,boosts的使用方式是作为乘法因子。所以如果你想复制它,是的,这会给你的术语更高的权重。
我不确定你的用例是什么,但你可能想考虑只使用Lucene的记分器类。那你就不用自己动手做了。
https://stackoverflow.com/questions/10232804
复制相似问题