如何使用whoosh获取文档中术语的tf-idf分数和bm25f分数?

时间:2013-09-07 06:29:27

标签: tf-idf whoosh

我正在使用whoosh来索引数据集。我想在一个术语和文件中检索td-idf分数和bm25f分数?我见过scoring.TFIDF()和scoring.TFIDFScorer()。为了调用TFIDFScorer()。score()方法,我们应该传递一个matcher对象。我应该将哪个匹配器对象传递给它。

同样,我应该将哪些参数传递给BM25FScorer()。_得分(自我,体重,长度)?什么是重量和长度参数?默认情况下传递什么值?

1 个答案:

答案 0 :(得分:3)

终于能够搞清楚了。这是为了以后来这里的人,

查找术语和文档的TFIDF和BM25F分数。

qp = QueryParser('content', ix.schema)
q = qp.parse(unicode('id:1'))
with ix.searcher(weighting=scoring.TF_IDF()) as searcher_tfidf:
    scoring.TFIDF().scorer(searcher_tfidf, 'body', 'algebra').score(q.matcher(searcher_tfidf))
with ix.searcher(weighting=scoring.BM25F()) as searcher_bm25f:
    scoring.BM25F().scorer(searcher_bm25f, 'body', 'algebra').score(q.matcher(searcher_bm25f))

ix是使用open_dir()方法或create_in()获得的IndexReader对象。关键是获取与所需文档完全匹配的Matcher对象。因此,使用模式中的id或任何唯一字段来使用qp.parse()方法获取该特定文档。