当前位置: 首页 > news >正文

文本相似度方案

文章目录

  • SequenceMatcher
  • 余弦相似度
  • 基于逆向文档频率向量化

SequenceMatcher

from difflib import SequenceMatcher s1 = "1.2 章节标题【abc】"
s2 = "1.2 章节标题【abc】、【she】、【this】"
SequenceMatcher(None, s1, s2).ratio()
# 0.6666666666666666

 

余弦相似度

  1. 文本向量化
import jieba  # 分词库# 基于词频的向量化
s1_list = list(jieba.cut(s1))
# ['1.2', ' ', '章节', '标题', '【', 'abc', '】']s2_list = list(jieba.cut(s2))
# ['1.2', ' ', '章节', '标题', '【', 'abc', '】', '、', '【', 'she', '】', '、', '【', 'this', '】']# 统计语料库
corpus = set(s1_list) | set(s2_list)
# {' ', '1.2', 'abc', 'she', 'this', '、', '【', '】', '标题', '章节'}# 文档词频统计
arr1 = np.array([s1_list.count(i) for i in corpus])
# array([0, 1, 1, 1, 0, 0, 1, 1, 1, 1])arr2 = np.array([s2_list.count(i) for i in corpus])
# array([2, 1, 1, 1, 1, 1, 1, 1, 3, 3])
  1. 计算cosine_theta值
from sklearn.metrics.pairwise import cosine_similarity# 计算余弦相似度
score = cosine_similarity(arr1.reshape(1, -1), arr2.reshape(1, -1))
# array([[0.77204865]])

可以看出余弦相似度比普通的SequenceMatcher具有更好的效果。

 

基于逆向文档频率向量化

 ss1 = " ".join(s1_list)In [42]: ss1
Out[42]: '1.2   章节 标题 【 abc 】'In [43]: ss2 = " ".join(s2_list)In [44]: ss2
Out[44]: '1.2   章节 标题 【 abc 】 、 【 she 】 、 【 this 】'In [45]: from sklearn.feature_extraction.text import TfidfVectorizerIn [46]: vector = TfidfVectorizer()In [47]: r = vector.fit_transform([ss1, ss2])In [48]: r
Out[48]: 
<2x5 sparse matrix of type '<class 'numpy.float64'>'with 8 stored elements in Compressed Sparse Row format>In [49]: r.toarray()
Out[49]: 
array([[0.57735027, 0.        , 0.        , 0.57735027, 0.57735027],[0.37930349, 0.53309782, 0.53309782, 0.37930349, 0.37930349]])In [50]: rr = r.toarray()In [51]: r
Out[51]: 
<2x5 sparse matrix of type '<class 'numpy.float64'>'with 8 stored elements in Compressed Sparse Row format>In [52]: rr
Out[52]: 
array([[0.57735027, 0.        , 0.        , 0.57735027, 0.57735027],[0.37930349, 0.53309782, 0.53309782, 0.37930349, 0.37930349]])
http://www.lryc.cn/news/468100.html

相关文章:

  • appium 的工作原理
  • ECharts饼图-富文本标签,附视频讲解与代码下载
  • 关于在windows10系统64位安装luasocket问题
  • 模型拆解(二):GeleNet
  • RTE 2024 隐藏攻略
  • django 部署服务器后 CSS 样式丢失的问题
  • 基于springboot的网上服装商城推荐系统的设计与实现
  • 盘古信息IMS系统助力制造企业释放新质生产力
  • ArcGIS 10.8 安装教程
  • Redis学习笔记(二)--Redis的安装与配置
  • 软件工程之软件系统设计与软件开发方法
  • pip命令行安装pytest 一直报错
  • 如何在Debian操作系统上安装Doker
  • 代码随想录刷题学习日记
  • OpenText ALM Octane,为您的 DevOps 管道提供质量保证
  • 【python实操】python小程序之参数化以及Assert(断言)
  • 探索CSS动画下的按钮交互美学
  • 241024-Ragflow离线部署Docker-Rootless环境配置修改
  • 网络基础概念:广播域、冲突域与VLAN解析
  • 【MySQL】C语言连接MySQL数据库3——事务操作和错误处理API
  • ARM嵌入式学习--第六天(电子电路基础知识)
  • JAVA----单例模式
  • 基于递推式最小二乘法的PMSM参数辨识MATLAB仿真模型
  • 记录一次部署 k8s 集群无法启动
  • Linux下MySQL8.x的编译安装与使用
  • cpuinfo实践记录
  • 【Java】ArrayList相关操作及其案例
  • 手机pdf阅读器,用手机也能够阅读、编辑pdf文件
  • 通过 Twitter Token 实现授权与操作
  • 100个SSM框架(Spring + Spring MVC + MyBatis)毕业设计选题