用于文档排序的各种BM25算法

rank-bm25的Python项目详细描述


rank-bm25:两行搜索引擎

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

到目前为止,已经实现的算法是:

  • Okapi BM25
  • BM25L
  • BM25+

待办事项:

  • BM25 ADPT
  • BM25T

这些算法是从this paper中提取的,它给出了每个方法的一个很好的概述,并且还将它们相互作为基准。一个很好的例子是,他们比较了不同类型的预处理,比如词干处理与不词干处理、是否删除stopword等等。如果你对这个主题还不熟悉,那就好好读一读。

安装

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

pip install rank_bm25

如果您想确保获得最新版本,可以直接从github使用

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

用法

对于本例,我们将使用BM25Okapi算法,但其他算法的使用方式几乎相同。

初始化

首先要创建BM25类的实例,它在文本语料库中读取并对其进行索引:

fromrank_bm25importBM25Okapicorpus=["Hello there good man!","It is quite windy in London","How is the weather today?"]tokenized_corpus=[doc.split(" ")fordocincorpus]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']

就这样!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
使用JAVA从CSV文件读取列   javacom。苹果eawt。应用程序“访问限制”   java使用split将字符串拆分为子字符串。字符串(“”);   java Liferay自定义portlet本地化   java如何通过外部IP访问Weblogic(在虚拟盒上)URL?   java多事件侦听器和适配器   拖放java Jlayeredpane缩放,loo儿童鼠标事件   java如何创建流式传输到http响应的文件   与清单相关的java问题。罐装MF   Android中的java,如何检查我的参数是否包含值图像   使用Eclipse将java编译为特定的JRE   java为什么反向操作允许溢出处理?   java FirebaseStorage。getReferenceFromUrl(未知源)   为什么Java不允许从父构造函数创建子对象