def scorer(self, searcher, fieldname, text, qf=1):
"""Returns an instance of :class:`whoosh.scoring.Scorer` configured
for the given searcher, fieldname, and term text.
"""
raise NotImplementedError(self.__class__.__name__)
我不知道计分功能中的参数,它们来自哪里? 与此句子下的功能相同。如果我想在所有馆藏中获得术语频率,而不是当前文档中的权重,该怎么办?
def _score(self, weight, length):
# Override this method with the actual scoring function
raise NotImplementedError(self.__class__.__name__)
答案 0 :(得分:0)
我想您需要使用whoosh.reading.TermInfo
。
全局术语信息可以在这里找到。
新文档建立索引时会更新。
正如您所说,要获得所有馆藏中的术语频率,
TermInfo().weight()
我想会做到的。
一些示例代码如下:
from whoosh.fields import Schema, TEXT
from whoosh.analysis import StemmingAnalyzer
from whoosh.filedb.filestore import FileStorage
from whoosh import scoring
schema = Schema(body=Text(analyzer=StemAnalyzer(), stored=True))
storage = FileStorage("index")
ix = storage.open_index()
def user_weighting_func(searcher, filename, text, matcher):
return float(searcher.term_info('body', text))
with ix.searcher(weighting=scoring.FunctionWeighting(user_weighting_func)) as searcher:
qp = QueryParser("body", schema=schema)
q = qp.parse("hello")
result = searcher.search(q)
for hit in results:
print(hit.score, hit['body'])
在此代码中,hit.score
将是全局术语频率。