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 -- 文档的累计期限分数。
- 返回类型
-
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中减去包装模型的分数,实质上是反转权重模型。