如何计算出文本数据的相似矩阵?
今天要计算texts中两两文本计算相似性,生成texts对应的相似矩阵。我们需要先将text转为为向量,texts转化后就是文档-词频矩阵。
texts = ['吃着火锅唱着歌,突然失业了怎么办?','北京今年高考外语口试取消!外语口试费用将全额退还','北京取消外语口试到底怎么回事?','最新:今年北京市统一高考外语口试不再举行','北京市取消2020年高考外语口试','先上岗、再考证!2020年上半年中小学教师资格考试推迟','上万个公司都在用的机器学习服务SageMaker,AWS宣布要在中国推出了']texts
['吃着火锅唱着歌,突然失业了怎么办?','北京今年高考外语口试取消!外语口试费用将全额退还','北京取消外语口试到底怎么回事?','最新:今年北京市统一高考外语口试不再举行','北京市取消2020年高考外语口试','先上岗、再考证!2020年上半年中小学教师资格考试推迟','上万个公司都在用的机器学习服务SageMaker,AWS宣布要在中国推出了']
中文语料准备
现在有texts,希望将其变成文档词频矩阵,已知有scikit-learn机器学习库可以将英文语料转化为文档词频矩阵。
但并不能直接使用scikit-learn,我们一定要先将中文转为成 类英文形态 ,即词语之间用空格间隔。
转化代码如下
import jiebacorpus = [' '.join(jieba.lcut(text)) for text in texts]corpus
Building prefix dict from the default dictionary ...
Dumping model to file cache /var/folders/sc/3mnt5tgs419_hk7s16gq61p80000gn/T/jieba.cache
Loading model cost 0.768 seconds.
Prefix dict has been built successfully.['吃 着 火锅 唱着歌 , 突然 失业 了 怎么办 ?','北京 今年 高考 外语 口试 取消 ! 外语 口试 费用 将 全额 退还','北京 取消 外语 口试 到底 怎么回事 ?','最新 :今年 北京市 统一 高考 外语 口试 不再 举行','北京市 取消 2020 年 高考 外语 口试','先 上岗 、 再 考证 !2020 年 上半年 中小学 教师资格 考试 推迟','上万个 公司 都 在 用 的 机器 学习 服务 SageMaker , AWS 宣布 要 在 中国 推出 了']
生成文档词频矩阵
有了符合scikit-learn输入要求的数据格式,我们就可以很方便的将语料数据转化为中文文档词频矩阵(doc-term-matrix)。
有两种统计词频的方法
TfidfVectorizer
CountVectorizer
一般情况下用TfidfVectorizer,关于两者区别大家有精力去看一下这篇
如何从文本中提取特征信息?
from sklearn.feature_extraction.text import TfidfVectorizertfidf = TfidfVectorizer()
#dtm(doc-term-matrix)
dtm = tfidf.fit_transform(corpus)
dtm
<7x39 sparse matrix of type '<class 'numpy.float64'>'with 53 stored elements in Compressed Sparse Row format>
dtm是一个形状为7*39
矩阵
7 文档数(文本数)
39 词语数(语料中涉及到的词语数)
这里我们看一下tfidf一共发现了39个词,分别是
feature_words = tfidf.get_feature_names()
print(feature_words)
['2020', 'aws', 'sagemaker', '上万个', '上半年', '上岗', '不再', '中国', '中小学', '举行', '今年', '全额', '公司', '到底', '北京', '北京市', '取消', '口试', '唱着歌', '外语', '失业', '学习', '宣布', '怎么办', '怎么回事', '推出', '推迟', '教师资格', '最新', '服务', '机器', '火锅', '突然', '统一', '考证', '考试', '费用', '退还', '高考']
计算文本相似矩阵
现在已经可以确定,我们已经拥有了文档-词频矩阵,
from sklearn.metrics.pairwise import cosine_similarity, pairwise_distances
接下来我们要计算出7*7
文档相似矩阵(这里我们的测试文本有7条)。
from sklearn.metrics.pairwise import cosine_similarity, pairwise_distancescos_sim_matrix = cosine_similarity(dtm)#相似矩阵形状
print(cos_sim_matrix.shape)
print()
print(cos_sim_matrix)
(7, 7)[[1. 0. 0. 0. 0. 0.0. ][0. 1. 0.4698711 0.362457 0.49069644 0.0. ][0. 0.4698711 1. 0.14816366 0.35816398 0.0. ][0. 0.362457 0.14816366 1. 0.42708997 0.0. ][0. 0.49069644 0.35816398 0.42708997 1. 0.140144110. ][0. 0. 0. 0. 0.14014411 1.0. ][0. 0. 0. 0. 0. 0.1. ]]
pairwise_sim_matrix = pairwise_distances(dtm)print(pairwise_sim_matrix.shape)
print()
print(pairwise_sim_matrix)
(7, 7)[[0. 1.41421356 1.41421356 1.41421356 1.41421356 1.414213561.41421356][1.41421356 0. 1.02968821 1.12919706 1.00926068 1.414213561.41421356][1.41421356 1.02968821 0. 1.30524813 1.13299252 1.414213561.41421356][1.41421356 1.12919706 1.30524813 0. 1.07042985 1.414213561.41421356][1.41421356 1.00926068 1.13299252 1.07042985 0. 1.311377821.41421356][1.41421356 1.41421356 1.41421356 1.41421356 1.31137782 0.1.41421356][1.41421356 1.41421356 1.41421356 1.41421356 1.41421356 1.414213560. ]]
pairwise_distances方法是 cosine_similarity减1后取绝对值得到的。
将相似矩阵存到txt中
计算得到的cos_sim_matrix和pairwise_sim_matrix是numpy中的array数据类型,可以使用numpy.savetxt函数将矩阵信息存储到txt中。
当然到这一步,也可以想办法存到别的文件格式中
import numpy as npnp.savetxt('cos_sim_matrix.txt', cos_sim_matrix)
np.savetxt('pairwise_sim_matrix.txt', pairwise_sim_matrix)
读取txt中的相似矩阵
如果后续需要在python中分析,可能需要用到数据读取。
import numpy as npmatrix = np.loadtxt('cos_sim_matrix.txt')
matrix
array([[1. , 0. , 0. , 0. , 0. ,0. , 0. ],[0. , 1. , 0.4698711 , 0.362457 , 0.49069644,0. , 0. ],[0. , 0.4698711 , 1. , 0.14816366, 0.35816398,0. , 0. ],[0. , 0.362457 , 0.14816366, 1. , 0.42708997,0. , 0. ],[0. , 0.49069644, 0.35816398, 0.42708997, 1. ,0.14014411, 0. ],[0. , 0. , 0. , 0. , 0.14014411,1. , 0. ],[0. , 0. , 0. , 0. , 0. ,0. , 1. ]])
公众号后台回复关键词 相似矩阵, 可获得该数据集
往期文章
中文文本分析相关资源汇总
cnsenti中文情绪情感分析库
70G上市公司定期报告数据集
两行代码读取pdf、docx文件
三行代码计算文本相似性
5个小问题带你理解列表推导式
文本数据清洗之正则表达式
Python网络爬虫与文本数据分析
综述:文本分析在市场营销研究中的应用
LabelStudio多媒体数据标注工具[5星推荐]
如何批量下载上海证券交易所上市公司年报
Loughran&McDonald金融文本情感分析库
如何使用Python快速构建领域内情感词典
Python数据分析相关学习资源汇总帖
漂亮~pandas可以无缝衔接Bokeh
YelpDaset: 酒店管理类数据集10+G
看在这么多数据面子上,给我点好看可好❤
如何计算出文本数据的相似矩阵?相关推荐
- 【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 逐行遍历文件文本数据 | 获取文件中的文本行 | 查询文本行数据 | 追加文件数据 | 使用占位符方式拼接字符串 )
文章目录 一.逐行遍历文件文本数据 1.获取文件中的文本行 2.查询文本行数据 3.追加文件数据 4.使用占位符方式拼接字符串 二.完整代码示例 一.逐行遍历文件文本数据 1.获取文件中的文本行 调用 ...
- 可以用来分析文本数据的Python工具的完整指南
探索性数据分析是任何机器学习工作流程中最重要的部分之一,自然语言处理也是如此. 但是,应该选择哪些工具来有效地浏览和可视化文本数据? 在本文(Shahul Es最初在 Neptune博客 上发布 )中 ...
- Python 文本语义识别,文本转化为图数据库,文本摘要图展示,文本数据图谱化
一.文本语义识别,并进行图谱化表示: 1.统计词频 文本预处理:对文本进行分句.分词,统计词频 2.textrank (1).TextRank算法是由PageRank算法改进而来的,二者的思想有相同之 ...
- 文本数据的传统特征提取方法
作者:Dipanjan (DJ) Sarkar 编译:ronghuaiyang 导读 介绍了一些传统但是被验证是非常有用的,现在都还在用的策略,用来对非结构化的文本数据提取特征. 介绍 在本文中,我们 ...
- 如何用Pandas处理文本数据?
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过Datawhale干货 作者:耿远昊,Datawhale成员,华东师范大学 文本数据是指不能参与算 ...
- 8W+文本数据,全景式展现中国教育发展情况
来源:兴富同学 本文约5800字,建议阅读8分钟. 本文介绍了通过文本数据分析,全方面展示了中国教育发展的情况. 前面使用爬虫的方法动态获取了教育资讯,完成之后就会很自然就会想,能不能把所有的文本都获 ...
- 独家 | 文本数据探索性数据分析结合可视化和NLP产生见解(附代码)
作者:Susan Li 翻译:吴金笛 校对:和中华 本文约5000字,建议阅读12分钟. 本文使用电子商务的评价数据集作为实例来介绍基于文本数据特征的数据分析和可视化. 作为数据科学家或NLP专家,可 ...
- 基于深度学习的文本数据特征提取方法之Glove和FastText
2019-12-03 20:49:51 作者:Dipanjan (DJ) Sarkar 编译:ronghuaiyang 导读 今天接着昨天的内容,给大家介绍Glove模型和FastText模型,以及得 ...
- 机器学习实战:朴素贝叶斯算法在新闻文本数据上的分类表现
https://www.toutiao.com/a6647102437532369421/ 2019-01-17 08:01:00 大家好,今天跟大家学习一下通过sklearn的朴素贝叶斯模型实战.前 ...
最新文章
- 服务行为 之 并发与实例化
- 东方文学网新进作品【2】
- OSPF邻接关系状态机
- 计算机桌面组成部分教案,三年级信息技术第五课设置个性桌面教学设计
- dts音效大师安卓版_dts音效大师
- 荣耀手表gs3和华为gt3 哪个好
- 你的私密照片可能正被“合法”观看
- 在上海相亲碰到如此势利贪婪的“80后”女孩
- 二分图/二部图(bipartite graph)
- 3G、4G、5G有何不同之处,你真的懂吗?
- 复合效应 达伦哈迪_哈迪·哈里里(Hadi Hariri):“我们需要研究新事物”
- Linux安装库时安装源错误,linux环境下golang安装第三方库的时候出错的决办法
- unity拖拽UI生成Cube并跟随鼠标移动,放置点可放下
- 点云处理需要多大的计算机,一种点云数据处理方法、装置、计算机设备和存储介质与流程...
- php实战 --电商网站后台开发 1.1 需求分析
- That引导的宾语从句
- 速盘-不一样的度盘神器
- VBS弹出选择打印机对话框
- HTML 各种按钮,图片按钮,打开文件按钮
- 2006德国世界杯32强口号-励志篇