介绍如何使用 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