当前位置: 首页 > 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.mrgr.cn/news/58081.html

相关文章:

  • 【OS】2.1.2 进程的状态与转换_进程的组织
  • 关闭或开启Win11系统的自动更新
  • 软件部署-Docker容器化技术(二)
  • Electron调用nodejs的cpp .node扩展【安全】
  • 【软件工程】软件项目管理/工程项目管理复习资料
  • 案例研究|DataEase嵌入式版助力软件开发商提升行业软件交付效率
  • SAM:Segment Anything
  • LSTM(Long Short-Term Memory,长短期记忆网络)在高端局效果如何
  • 新增Python运行环境、支持病毒扫描和计划任务短信告警,1Panel开源面板v1.10.20 LTS版本发布
  • 《计算机视觉》—— 换脸
  • 等差数列、等间距数据、等间隔数字、时间序列生成 by range(), arange(), linspace(), logspace()
  • Java-内部类
  • C++(面向对象、封装性、构造函数)
  • 李沐 权重衰退代码实现【动手学深度学习v2】
  • 代码随想录:206. 反转链表
  • 走进Java中的class文件
  • xtu oj String I
  • 数据库表开发 vs 面向接口开发
  • 结合PS软件制作一个艺术PCB的图片处理
  • 什么是RPC