此模块包含用于评分(和排序)搜索结果的类。
whoosh.scoring.
WeightingModel
¶记分模型的抽象基类。WeightingModel对象提供了一个方法, scorer
,返回的实例 whoosh.scoring.Scorer
.
基本上,weightingmodel对象存储模型的配置信息(例如,bm25f模型中b和k1的值),然后根据其他运行时信息(搜索者、字段名和术语文本)创建记分器实例来进行实际评分。
final
(searcher, docnum, score)¶返回每个文档的最终得分。您可以在子类中使用此方法将文档级别的调整应用于分数,例如使用存储字段的值来影响分数(尽管这会很慢)。
加权使用的模型子类 final()
应该有属性 use_final
设置为 True
.
参数: |
|
---|---|
返回类型: |
idf
(searcher, fieldname, text)¶返回给定术语的文档反转频率。
scorer
(searcher, fieldname, text, qf=1)¶返回的实例 whoosh.scoring.Scorer
为给定的搜索者、字段名和术语文本配置。
whoosh.scoring.
BaseScorer
¶“Scorer”实现的基类。记分员提供了对文档进行评分的方法,有时还提供了对文档的“质量”和匹配者当前的“块”进行评级的方法,以实现基于质量的优化。
记分器对象由权重模型对象创建。基本上,加权模型对象存储模型的配置信息(例如,bm25f模型中b和k1的值),然后创建一个记分器实例。
block_quality
(matcher)¶返回 maximum limit 在可能的分数上,匹配者可以在其当前的“block”(后端可能使用的“block”的任何概念)中给出。这可以是一个估计值,不一定是实际可能的最高分数,但不能低于实际的最高分数。
如果这个分数低于取得“前N名”成绩所需的最低分数,那么我们可以告诉比赛者跳到另一个“质量更好”的街区。
max_quality
()¶返回 maximum limit 在可能的分数上,对手可以给。这可以是一个估计值,不一定是实际可能的最高分数,但不能低于实际的最高分数。
score
(matcher)¶返回匹配者当前文档的分数。
supports_block_quality
()¶如果此类支持质量优化,则返回true。
whoosh.scoring.
WeightScorer
(maxweight)¶一个简单地将重量作为分数返回的记分员。这对于更复杂的权重模型来说非常有用,当它们被要求为不可计分的字段(不存储字段长度)提供一个记分员时,它们将返回。
whoosh.scoring.
WeightLengthScorer
¶记分员的基类,其中每个文档的唯一变量是术语权重和字段长度。
子类应重写 _score(weight, length)
方法返回具有给定权重和长度的文档的分数,并调用 setup()
方法在初始值设定项的末尾设置公共属性。
whoosh.scoring.
BM25F
(B=0.75, K1=1.2, **kwargs)¶实现BM25F评分算法。
>>> from whoosh import scoring
>>> # Set a custom B value for the "content" field
>>> w = scoring.BM25F(B=0.75, content_B=1.0, K1=1.5)
参数: |
|
---|
whoosh.scoring.
TF_IDF
¶whoosh.scoring.
Frequency
¶whoosh.scoring.
FunctionWeighting
(fn)¶使用提供的函数进行评分。对于简单的评分函数和实验,这可能比编写全权重模型类和记分员类更简单。
函数应接受参数 searcher, fieldname, text, matcher
.
例如,下面的函数将根据查询词在文档中的最早位置对文档进行评分:
def pos_score_fn(searcher, fieldname, text, matcher):
poses = matcher.value_as("positions")
return 1.0 / (poses[0] + 1)
pos_weighting = scoring.FunctionWeighting(pos_score_fn)
with myindex.searcher(weighting=pos_weighting) as s:
results = s.search(q)
请注意,由于性能原因,传递给函数的搜索者可能是每段搜索者。如果要在函数中获取全局统计信息,应使用 searcher.get_parent()
获取顶级搜索者。(However, if you are using global statistics, you should probably write a real model/scorer combo so you can cache them on the object.)
whoosh.scoring.
MultiWeighting
(default, **weightings)¶基于字段从多个评分算法中选择。
唯一的非关键字参数指定默认值 Weighting
要使用的实例。关键字参数为特定字段指定加权实例。
例如,要使用 BM25
对于大多数领域,但是 Frequency
对于 id
字段和 TF_IDF
对于 keys
领域:
mw = MultiWeighting(BM25(), id=Frequency(), keys=TF_IDF())
参数: | default -- 用于关键字参数中未指定的字段的权重实例。 |
---|
whoosh.scoring.
ReverseWeighting
(weighting)¶包装一个权重对象,并从0中减去包装模型的分数,实质上是反转权重模型。