跳转到主要内容

各种BM25算法用于文档排名

项目描述

Rank-BM25:一个两行搜索引擎

Anaconda-Server Badge Test PyPI - Version GitHub

这些算法集合用于查询文档集并返回与查询最相关的文档。这些算法最常见的用例,正如你可能猜到的,是创建搜索引擎。

到目前为止,已实现的算法有

  • Okapi BM25
  • BM25L
  • BM25+
  • BM25-Adpt
  • BM25T

这些算法来自这篇论文,其中对每种方法进行了很好的概述,并相互进行了基准测试。一个很好的包括点是,它们比较了不同的预处理方式,如词干化与非词干化、停用词去除或不去除等。如果你对这个主题不太熟悉,这是一篇很好的读物。

安装

安装此包的最简单方法是使用pip,通过

pip install rank_bm25

如果您想确保您获得的是最新版本,您可以直接通过github安装它

pip install git+ssh://git@github.com/dorianbrown/rank_bm25.git

使用方法

在这个例子中,我们将使用BM25Okapi算法,但其他算法的使用方式基本上相同。

初始化

首先需要创建BM25类的实例,它读取文本语料库并进行一些索引

from rank_bm25 import BM25Okapi

corpus = [
    "Hello there good man!",
    "It is quite windy in London",
    "How is the weather today?"
]

tokenized_corpus = [doc.split(" ") for doc in corpus]

bm25 = BM25Okapi(tokenized_corpus)
# <rank_bm25.BM25Okapi at 0x1047881d0>

请注意,此包不执行任何文本预处理。如果您想进行诸如小写化、停用词去除、词干化等操作,您需要自己完成。

唯一的要求是,该类接收字符串的列表的列表,这些字符串是文档标记。

文档排名

现在我们已经创建了文档索引,可以提交查询并查看哪些文档与查询最相关

query = "windy London"
tokenized_query = query.split(" ")

doc_scores = bm25.get_scores(tokenized_query)
# array([0.        , 0.93729472, 0.        ])

值得注意的是,我们还需要对查询进行分词,并应用与文档相同的预处理步骤,以便进行苹果对苹果的比较

除了获取文档得分外,您还可以使用以下方法检索最佳文档

bm25.get_top_n(tokenized_query, corpus, n=1)
# ['It is quite windy in London']

就是这样!

项目详情


下载文件

下载适合您平台文件。如果您不确定该选择哪个,请了解更多关于安装包的信息。

源分发

haystack_bm25-1.0.2.tar.gz (8.7 kB 查看哈希值)

上传时间

构建分发

haystack_bm25-1.0.2-py2.py3-none-any.whl (8.8 kB 查看哈希值)

上传时间 Python 2 Python 3

支持