scoring 模块

此模块包含用于评分(和排序)搜索结果的类。

基类

class whoosh.scoring.WeightingModel

记分模型的抽象基类。WeightingModel对象提供了一个方法, scorer ,返回的实例 whoosh.scoring.Scorer .

基本上,weightingmodel对象存储模型的配置信息(例如,bm25f模型中b和k1的值),然后根据其他运行时信息(搜索者、字段名和术语文本)创建记分器实例来进行实际评分。

final(searcher, docnum, score)

返回每个文档的最终得分。您可以在子类中使用此方法将文档级别的调整应用于分数,例如使用存储字段的值来影响分数(尽管这会很慢)。

加权使用的模型子类 final() 应该有属性 use_final 设置为 True .

参数
  • searcher -- whoosh.searching.Searcher 用于索引。

  • docnum -- 正在计分的文档的文档编号。

  • score -- 文档的累计期限分数。

返回类型

float

idf(searcher, fieldname, text)

返回给定术语的文档反转频率。

scorer(searcher, fieldname, text, qf=1)

返回的实例 whoosh.scoring.Scorer 为给定的搜索者、字段名和术语文本配置。

class 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。

class whoosh.scoring.WeightScorer(maxweight)

一个简单地将重量作为分数返回的记分员。这对于更复杂的权重模型来说非常有用,当它们被要求为不可计分的字段(不存储字段长度)提供一个记分员时,它们将返回。

class whoosh.scoring.WeightLengthScorer

记分员的基类,其中每个文档的唯一变量是术语权重和字段长度。

子类应重写 _score(weight, length) 方法返回具有给定权重和长度的文档的分数,并调用 setup() 方法在初始值设定项的末尾设置公共属性。

评分算法类

class 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)
参数
  • B -- 自由参数,见BM25文献。窗体的关键字参数 fieldname_B (例如, body_B )为b设置字段特定值。

  • K1 -- 自由参数,见BM25文献。

class whoosh.scoring.TF_IDF
class whoosh.scoring.Frequency

评分实用程序类

class 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.)

class whoosh.scoring.MultiWeighting(default, **weightings)

基于字段从多个评分算法中选择。

唯一的非关键字参数指定默认值 Weighting 要使用的实例。关键字参数为特定字段指定加权实例。

例如,要使用 BM25 对于大多数领域,但是 Frequency 对于 id 字段和 TF_IDF 对于 keys 领域:

mw = MultiWeighting(BM25(), id=Frequency(), keys=TF_IDF())
参数

default -- 用于关键字参数中未指定的字段的权重实例。

class whoosh.scoring.ReverseWeighting(weighting)

包装一个权重对象,并从0中减去包装模型的分数,实质上是反转权重模型。