内容简介:今天要计算texts中两两文本计算相似性,生成texts对应的相似矩阵。我们需要先将text转为为向量,texts转化后就是文档-词频矩阵。现在有texts,希望将其变成文档词频矩阵,已知有scikit-learn机器学习库可以将英文语料转化为文档词频矩阵。但并不能直接使用scikit-learn,我们一定要先将中文转为成
今天要计算texts中两两文本计算相似性,生成texts对应的相似矩阵。我们需要先将text转为为向量,texts转化后就是文档-词频矩阵。
texts = ['吃着火锅唱着歌,突然失业了怎么办?', '北京今年高考外语口试取消!外语口试费用将全额退还', '北京取消外语口试到底怎么回事?', '最新:今年北京市统一高考外语口试不再举行', '北京市取消2020年高考外语口试', '先上岗、再考证!2020年上半年中小学教师资格考试推迟', '上万个公司都在用的机器学习服务SageMaker,AWS宣布要在中国推出了'] texts
['吃着火锅唱着歌,突然失业了怎么办?', '北京今年高考外语口试取消!外语口试费用将全额退还', '北京取消外语口试到底怎么回事?', '最新:今年北京市统一高考外语口试不再举行', '北京市取消2020年高考外语口试', '先上岗、再考证!2020年上半年中小学教师资格考试推迟', '上万个公司都在用的机器学习服务SageMaker,AWS宣布要在中国推出了']
中文语料准备
现在有texts,希望将其变成文档词频矩阵,已知有scikit-learn机器学习库可以将英文语料转化为文档词频矩阵。
但并不能直接使用scikit-learn,我们一定要先将中文转为成 类英文形态 ,即词语之间用空格间隔。
转化代码如下
import jieba corpus = [' '.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 TfidfVectorizer tfidf = 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_distances cos_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.14014411 0. ] [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.41421356 1.41421356] [1.41421356 0. 1.02968821 1.12919706 1.00926068 1.41421356 1.41421356] [1.41421356 1.02968821 0. 1.30524813 1.13299252 1.41421356 1.41421356] [1.41421356 1.12919706 1.30524813 0. 1.07042985 1.41421356 1.41421356] [1.41421356 1.00926068 1.13299252 1.07042985 0. 1.31137782 1.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.41421356 0. ]]
pairwise_distances方法是 cosine_similarity减1后取绝对值得到的。
将相似矩阵存到txt中
计算得到的cos_sim_matrix和pairwise_sim_matrix是numpy中的array数据类型,可以使用numpy.savetxt函数将矩阵信息存储到txt中。
当然到这一步,也可以想办法存到别的文件格式中
import numpy as np np.savetxt('cos_sim_matrix.txt', cos_sim_matrix) np.savetxt('pairwise_sim_matrix.txt', pairwise_sim_matrix)
读取txt中的相似矩阵
如果后续需要在 python 中分析,可能需要用到数据读取。
import numpy as np matrix = 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. ]])
公众号后台回复关键词 相似矩阵 , 可 获得该数据集
往期文章
看在这么多数据面子上,给我点好看可好❤
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 机器学习 | SVD矩阵分解算法,对矩阵做拆分,然后呢?
- golang 算法-矩阵
- 彻底理解矩阵乘法
- [开源项目]矩阵数据的意义
- iphone – :CGAffineTransformInvert:奇异矩阵
- golang顺时针打印矩阵
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。