计算文本相似度,输出相似度最高的n个

news2025/4/5 22:35:43

TF-IDF

import jieba
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

# 示例句子列表
sentences = [
    "今天天气真好,阳光明媚。",
    "关键字匹配是一种常见的文本处理任务。",
    "计算机不认识人类语言,要转成词向量。",
    "富强、民主、文明、和谐、自由、平等、公正、法治、爱国、敬业、诚信、友善。",
    "中文分词工具对文本处理很有帮助。",
]

# 输入的查询句子
query_sentence = "关键字匹配和文本处理任务"

# 创建DataFrame
data = {"Sentence": sentences}
df = pd.DataFrame(data)

# 分词并建立TF-IDF特征向量
def preprocess(text):
    words = jieba.lcut(text)
    return " ".join(words)

df["Preprocessed_Sentence"] = df["Sentence"].apply(preprocess)
query_sentence = preprocess(query_sentence)

# 计算相似度
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(list(df["Preprocessed_Sentence"]) + [query_sentence])
similarities = cosine_similarity(tfidf_matrix)
query_similarity = similarities[-1, :-1]  # 最后一行是查询句子

# 获取相似度最高的n个句子
n = 10  # 想要获取的相似句子数量
top_indices = query_similarity.argsort()[-n:][::-1]

# 创建包含相似句子和相似度的DataFrame
similar_sentences = df.loc[top_indices, "Sentence"].tolist()
similarity_scores = [query_similarity[i] for i in top_indices]

result_data = {"Similar_Sentence": similar_sentences, "Similarity_Score": similarity_scores}
result_df = pd.DataFrame(result_data)

print("查询句子:", query_sentence)
print("\n相似度最高的句子:")
result_df

在这里插入图片描述

Spacy

import warnings
warnings.filterwarnings("ignore")
import spacy
import pandas as pd

# 加载Spacy中文语言模型
nlp = spacy.load("zh_core_web_sm")

# 示例中文句子数据框
data = {
    "Sentences": [
    "今天天气真好,阳光明媚。",
    "关键字匹配是一种常见的文本处理任务。",
    "计算机不认识人类语言,要转成词向量。",
    "富强、民主、文明、和谐、自由、平等、公正、法治、爱国、敬业、诚信、友善。",
    "中文分词工具对文本处理很有帮助。",
    ]
}
df = pd.DataFrame(data)

# 选择要比较的目标句子
target_sentence = "关键字匹配和文本处理任务"

# 计算所有句子的相似度
similarity_scores = []
for sentence in df["Sentences"]:
    doc1 = nlp(target_sentence)
    doc2 = nlp(sentence)
    similarity = doc1.similarity(doc2)
    similarity_scores.append(similarity)

# 将相似度得分添加到数据框中
df["Similarity Score"] = similarity_scores

# 根据相似度得分降序排序,选择相似度最高的n个句子
n = 10  # 选择前n个最相似的句子
top_n_similar_sentences = df.sort_values(by="Similarity Score", ascending=False).head(n)

# 打印DataFrame
top_n_similar_sentences

在这里插入图片描述

Bert

import warnings
warnings.filterwarnings("ignore")
from transformers import AutoTokenizer, AutoModel
import pandas as pd
import torch
from sklearn.metrics.pairwise import cosine_similarity

# 加载BERT模型和分词器
model_name = "model/bert-base-chinese"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)

# 示例中文句子数据框
data = {
    "Sentences": [
    "今天天气真好,阳光明媚。",
    "关键字匹配是一种常见的文本处理任务。",
    "计算机不认识人类语言,要转成词向量。",
    "富强、民主、文明、和谐、自由、平等、公正、法治、爱国、敬业、诚信、友善。",
    "中文分词工具对文本处理很有帮助。",
    ]
}
df = pd.DataFrame(data)

# 选择要比较的目标句子
target_sentence = "关键字匹配和文本处理任务"

# 计算所有句子的相似度
similarity_scores = []
target_embedding = model(**tokenizer(target_sentence, return_tensors="pt", padding=True, truncation=True)).last_hidden_state.mean(dim=1)

for sentence in df["Sentences"]:
    # 使用分词器编码句子
    sentence_embedding = model(**tokenizer(sentence, return_tensors="pt", padding=True, truncation=True)).last_hidden_state.mean(dim=1)
    
    # 计算余弦相似度
    similarity = cosine_similarity(target_embedding.detach().numpy(), sentence_embedding.detach().numpy())[0][0]
    similarity_scores.append(similarity)

# 将相似度得分添加到数据框中
df["Similarity Score"] = similarity_scores

# 根据相似度得分降序排序,选择相似度最高的n个句子
n = 10  # 选择前两个最相似的句子
top_n_similar_sentences = df.sort_values(by="Similarity Score", ascending=False).head(n)

# 打印DataFrame
top_n_similar_sentences

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1138208.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是虚拟主播?

随着科技的不断发展,人工智能技术已经逐渐渗透到各个行业,为企业带来了前所未有的变革。在视频制作领域,美摄作为一家领先的智能视频技术提供商,针对企业需求推出了一款创新的虚拟主播解决方案,旨在帮助企业实现高效、…

「滚雪球学Java」:常用类(章节汇总)

🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!&#xf…

机器学习实验六:决策树-海洋生物例子

#创建数据集 import numpy as np import pandas as pd from sklearn import tree from sklearn.tree import DecisionTreeClassifier import graphviz def createDataSet():row_data {no surfacing:[1,1,1,0,0],flippers:[1,1,0,1,1],fish:[yes,yes,no,no,no]}dataSet pd.Dat…

轻松搭建Linux宝塔面板并实现公网访问Discuz论坛,让您的论坛更具吸引力

文章目录 前言1.安装基础环境2.一键部署Discuz3.安装cpolar工具4.配置域名访问Discuz5.固定域名公网地址6.配置Discuz论坛 前言 Crossday Discuz! Board(以下简称 Discuz!)是一套通用的社区论坛软件系统,用户可以在不需要任何编程的基础上&a…

js中的Formdata数据结构

这里写目录标题 一、基本概念二、常用方法1.append(name, value)、set(name, value)2.get()、getAll()3.has(name)4.delete(name)5.keys(),values(),entries() 三、其他细节1.for of遍历2.转为对象3.结合 URLSearchParams 转为queryString 一、基本概念 FormData 提供了一种表…

推送内容有误怎么办?MobPush撤回/取消推送为您排忧解难

消息推送已成为深度连接APP和用户的利器,对推送内容的准确性和时效性的要求也更为严格,倘若推送的内容出现错误,或推送的内容已经失去了时效性,此时又该怎么办呢?别急,近日MobPush全新上线了取消推送和撤回…

Lightroom学习之路

基础知识 常用快捷键 双击修改图片下右边布局的属性,快速回到初始值 B站学习笔记 1、导入到图库为图片标星级,后期优先处理星级高的图片 2、修改照片-基础-白平衡有吸管吸颜色会自动平衡照片颜色 3、直方图左右上角三角形,选中后照片会显示…

04 # 手写 apply

apply apply 的作用跟 call 的作用是一样的&#xff0c;只不过传递的参数是以数组的形式 手写 apply <script>Function.prototype.kaimoApply function (content, args) {// 没有东西指向 window&#xff0c;将 content 包装成对象content content ? Object(conten…

LeetCode刷题之分隔链表(图解➕代码)

首先直接进入主题&#xff0c;题目链接&#x1f517;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 源代码在最后&#xff0c;有更优解的朋友欢迎在评论里指导我一番&#xff01; 1.题目分析 通过题目分析得出结论&#xff1a; 1. 将链表分为k个子…

一文拿捏内网穿透利器之frp(反向代理软件相关)

一文拿捏内网穿透利器之frp 一、什么是 frp 1.1 内网穿透 如下图所示, 一般情况下, 公网内的设备都能够被任意一台设备访问到!! 而不同局域网内的设备是相互隔离的, 局域网 A 的设备是无法访问到局域网 B 内的设备 而内网穿透技术, 顾名思义就是能让公网、或者当前局域网外的任…

一个进程最多可以创建多少个线程

前言 话不多说&#xff0c;先来张脑图~ linux 虚拟内存知识回顾 虚拟内存空间长啥样 在 Linux 操作系统中&#xff0c;虚拟地址空间的内部又被分为内核空间和用户空间两部分&#xff0c;不同位数的系统&#xff0c;地址空间的范围也不同。 比如最常见的 32 位和 64 位系统&…

操作系统:进程与线程(一)进程与线程的概念及处理机调度算法

一战成硕 2.1 进程与线程2.1.1 进程的概念和特征2.1.2 进程的状态与转换2.1.3 进程的组织2.1.4 进程控制2.1.5 进程的通信2.1.6 线程和多线程模型 2.2 处理机调度2.2.1 调度的概念2.2.2 调度的目标2.2.3 调度的实现2.2.4 典型的调度算法 2.1 进程与线程 2.1.1 进程的概念和特征…

MODBUS-TCP通信客户端如何访问服务器端RS485总线上的从站(SMART PLC梯形图程序)

SMART PLC的 MODBUS-TCP通信请参考下面文章链接: S7-200SMART PLC ModbusTCP通信(多服务器多从站轮询)_matlab sumilink 多个modbustcp读写_RXXW_Dor的博客-CSDN博客文章浏览阅读6.2k次,点赞5次,收藏10次。MBUS_CLIENT作为MODBUS TCP客户端通过S7-200 SMART CPU上的以太网…

若依ruoyi-nbcio如何做一个仿钉钉流程设计器的思考

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 看到有些流程图采用仿钉钉的流程设计&#xff0c;比如下面界面&#xff1a; 这种方式虽然简单&#xff0c…

Python 中的 Pexpect

我们将通过示例介绍Python中的Pexpect。 Python 中的 Pexpect Python 是一种非常流行的语言&#xff0c;用于数据科学和机器学习。 它是一种非常强大的语言&#xff0c;因为 Python 具有可用于不同目的的内置库。 在这篇文章中&#xff0c;我们将研究Python中的pexpect。 Pex…

找不到msvcr90.dll无法继续执行代码怎么解决

msvcr90.dll是Microsoft Visual C 2008 SP1可再发行程序包中的一个动态链接库文件。它包含了用于支持C编程语言的类和函数。动态链接库是一种可重用的代码模块&#xff0c;它可以在多个应用程序之间共享&#xff0c;从而减少代码量并提高开发效率。那么遇到msvcr90.dll丢失怎么…

【计算机网络】从输入URL到页面都显示经历了什么??

文字总结 ① DNS 解析&#xff1a;当用户输入一个网址并按下回车键的时候&#xff0c;浏览器获得一个域名&#xff0c;而在实际通信过程中&#xff0c;我们需要的是一个 IP 地址&#xff0c;因此我们需要先把域名转换成相应 IP 地址。浏览器会首先从缓存中找是否存在域名&…

【继承之extends关键字和super关键字】

文章目录 继承是什么&#xff1f;为什么要继承&#xff1f;怎么继承&#xff1f;继承的语法 关键字extends 子类中访问父类的成员变量1.子类和父类的成员变量不同名2.子类和父类成员变量同名 子类中访问父类的成员方法1. .子类和父类的成员方法名字不同2..子类和父类的成员方法…

JUC并发编程之Synchronized锁优化

目录 1. Java对象头 2. Synchronized锁优化 2.1 偏向锁 2.2 轻量级锁 2.3 重量级锁 2.4 各种锁对比 1. Java对象头 HotSpot虚拟机中&#xff0c;对象在内存中存储的布局可以分为三块区域&#xff1a;对象头&#xff08;Header&#xff09;、实例数据&#xff08;Instance D…

数据结构 C语言 2.1 线性表抽象数据类型 2.2 小议顺序表

一、线性表抽象数据类型 线性表的定义 定义&#xff1a;零个或多个数据元素的有限序列 线性表的特点&#xff1a; 1.它是一个序列 数据元素之间是有序的 数据元素之间是一对一的关系 2.有限性 线性表的数据元素个数是有限的 注意&#xff1a;零个数据元素的有限序列又…