首页 > 编程语言 >【python学习】使用 jieba和 rank_bm25进行文本相似度计算

【python学习】使用 jieba和 rank_bm25进行文本相似度计算

时间:2024-08-12 12:54:01浏览次数:15  
标签:jieba sentence python BM25Okapi rank sentences query 句子

介绍如何使用 jieba 分词库和 rank_bm25 库中的 BM25Okapi 算法来计算文本相似度。我们将通过一个简单的示例,展示如何实现这一过程。

准备句子列表

首先,我们准备一个包含多个句子的列表:

sentences = [
    "这是一个测试句子",
    "温格高赢得了2023环法冠军",
    "北京奥运会在2008年8月8日开幕",
    "波士顿马拉松是历史悠久的一项比赛",
    "何杰即将出战巴黎奥运会的马拉松项目"
]

使用 Jieba 进行分词

接下来,我们使用 jieba 对每个句子进行分词:

import jieba

tokenized_sentences = [list(jieba.cut(sentence)) for sentence in sentences]

初始化 BM25Okapi

然后,我们使用分词后的句子列表来初始化 BM25Okapi 模型:

from rank_bm25 import BM25Okapi

bm25 = BM25Okapi(tokenized_sentences)

查询句子

我们定义一个查询句子,并对其进行分词:

query = "2024波士顿马拉松在哪天举行"
tokenized_query = list(jieba.cut(query))

计算相似度得分

使用 BM25Okapi 模型,我们可以计算查询句子与每个句子之间的相似度得分:

scores = bm25.get_scores(tokenized_query)

输出相似度得分

最后,我们将每个句子与其对应的相似度得分打印出来:

for sentence, score in zip(sentences, scores):
    print(f"Sentence: {sentence}\nScore: {score}\n")

完整代码

import jieba
from rank_bm25 import BM25Okapi

# 准备句子列表
sentences = [
    "这是一个测试句子",
    "温格高赢得了2023环法冠军",
    "北京奥运会在2008年8月8日开幕",
    "波士顿马拉松是历史悠久的一项比赛",
    "何杰即将出战巴黎奥运会的马拉松项目"
]

# 使用 jieba 进行分词
tokenized_sentences = [list(jieba.cut(sentence)) for sentence in sentences]
bm25 = BM25Okapi(tokenized_sentences)

# 查询句子
query = "2024波士顿马拉松在哪天举行"

# 对查询进行分词
tokenized_query = list(jieba.cut(query))

# 计算相似度得分
scores = bm25.get_scores(tokenized_query)

# 输出相似度得分
for sentence, score in zip(sentences, scores):
    print(f"Sentence: {sentence}\nScore: {score}\n")

输出结果

运行以上代码后,将得到以下输出:

Sentence: 这是一个测试句子
Score: 0.0

Sentence: 温格高赢得了2023环法冠军
Score: 0.0

Sentence: 北京奥运会在2008年8月8日开幕
Score: 0.9349891818451999

Sentence: 波士顿马拉松是历史悠久的一项比赛
Score: 1.4532501521917194

Sentence: 何杰即将出战巴黎奥运会的马拉松项目
Score: 0.32044974916305996

从输出中可以看出,句子“波士顿马拉松是历史悠久的一项比赛”与查询句子的相似度最高,其次是“北京奥运会在2008年8月8日开幕”。

标签:jieba,sentence,python,BM25Okapi,rank,sentences,query,句子
From: https://blog.csdn.net/m0_54007171/article/details/141019878

相关文章

  • 亲测有效!!!python实现抖音直播间评论区最新评论爬取
    ``importtime#事件库,用于硬性等待importthreadingfrombs4importBeautifulSoupfromseleniumimportwebdriver#导入selenium的webdriver模块fromselenium.webdriver.chrome.serviceimportServicelive_dy_url='https://live.douyin.com/36947836004'#直播......
  • Loguru:Python 日志终极解决方案
    日志的重要性日志的作用非常重要,日志可以记录用户的操作、程序的异常,还可以为数据分析提供依据,日志的存在意义就是为了能够在程序在运行过程中记录错误,方便维护和调试,能够快速定位出错的地方,减少维护成本。每个程序员都应该知道,不是为了记录日志而记录日志,日志也不是随意记的。要......
  • 计算机毕业设计必看必学! ! 89344 springboot大学生就业管理系统,原创定制程序, java、
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对大学生就业管理系统等问题,对大学生就业管理系统进行研究分析,然后开发设计出大学生就业管理......
  • 一文告诉你如何用 Python 对图片和视频进行高清修复
    估计大家应该在网上看过很多用AI修复的高清视频,最近我也有相关需求,需要修复几张图片。于是便去GitHub上寻找相关开源项目,结果还真找到一个,效果还很不错,这里特意分享出来给大家。首先将https://github.com/xinntao/Real-ESRGAN.git克隆下来,项目结构如下:然后我们要安装相关......
  • 使用 Python 操作 Stable Diffusion 进行 AI 绘图
    在几年前,AI领域对于普通人来说,还是无法触及的高岭之花。但随着chatGPT的爆火,AI变得越来越大众化,大量的工具让你可以在不具备任何前置知识的情况下使用AI,其中最火热的便是AI绘图了。相信很多人都知道Midjourney这个网站,只要输入相关的文字,便可通过网站背后的AI产出相对......
  • 简单的python web项目的docker-compose.yml 示例
    一个简单的pythonweb项目,包含redis,mysql,nginx,定时业务调度等其中web启动注册了自定义命令flaskcreate-db&&flaskinit-db&&uwsgi/web/uwsgi.iniversion:'3.5'services:db:image:mysqlcontainer_name:yeping_mysqlcommand:--default-......
  • Epson C4校准和Python通讯流程
    第一章简介1.1机器人型号EsonC41.2.目的使用EponC4机械臂,通过python进行指令控制,在通讯之前,进行了原点和工具坐标系的校准1.3.流程C4机械臂的机械原点校准C4机械臂的工具坐标系校准C4机械臂的通讯第二章机械原点校准2.1.原点校准-硬件操作2.1.1.原点校准......
  • python实现文字识别
    在Python中实现文字识别(OCR,OpticalCharacterRecognition)的一种流行方式是使用开源库如Tesseract。Tesseract是一个由HP实验室开发、后来由Google优化的OCR引擎,支持多种操作系统,并且能够识别多种语言的文本。步骤1:安装Tesseract首先,你需要在你的系统上安装Tesseract。......
  • CSP真题答案《202309-01、02》基于Python的实现
    注意:注释在测试CSP时应全部删除!!!第一题:#键盘输入两个数以空格隔开,分别为n,mn,m=map(int,input().split())#根据n值可以循环输入n行值,得到一个列表(操作数)madenum=[list(map(int,input().split()))for_inrange(n)]#根据m值可以循环输入m行值,得到一个列表(初始......
  • OpenAI API: How do I handle errors in Python?
    题意:在使用OpenAIAPI进行Python开发时,怎样处理错误?问题背景:Itriedusingthebelowcode,buttheOpenAIAPIdoesn'thavethe AuthenticationError methodinthelibrary.HowcanIeffectivelyhandlesucherror.我尝试使用下面的代码,但是OpenAIAPI的库中并没......