【Pyhton 数据分析】通过gensim进行文本相似度分析
环境描述
Python环境:Python 3.6.1
系统版本:windows7 64bit
文件描述
一共有三个文件,分别是:file_01.txt、file_02.txt、file_03.txt
file_01.txt文件内容:
我吃过糖之后,发现我的牙齿真的很疼
file_02.txt文件内容:
牙疼不是病疼起来要人命.
file_03.txt文件内容:
我的肚子不舒服!与此同时,牙疼也让我接近崩溃
文本相似度分析步骤
- 打开并读取文档内容
- 对要进行分析的文档分词
- 格式化文档
- 计算词频(可以过滤词频较小的词)
- 通过语料库建立字典
- 加载要对比的文档
- 将要对比的文档通过doc2bow转化为稀疏向量
- 对稀疏向量进行进一步处理,得到新语料库
- 将新语料库通过tfidfmodel进行处理,得到tfidf
- 通过token2id得到特征数
- 稀疏矩阵相似度,从而建立索引
- 得到相似度结果
实现代码
#-*- coding:utf-8 -*- #导入所需的模块
from gensim import corpora,models,similarities
import jieba
from collections import defaultdict #打开并读取文件
f1 = "D:/reptile/file/file_01.txt"
f2 = "D:/reptile/file/file_02.txt" content1 = open(f1,encoding='UTF-8').read()
content2 = open(f2,encoding='UTF-8').read() #对文档进行分词
data1 = jieba.cut(content1)
data2 = jieba.cut(content2) #整理文档格式,格式为:"词语1 词语2 ... 词语n "(词语之间用空格分隔)
str1 = ""
for item in data1:
str1+=item+" "
#print(str1)
str2 = ""
for item in data2:
str2+=item+" "
#print(str2) #split默认分隔符为空格
str_all = [str1,str2]
text = [[word for word in str3.split()]
for str3 in str_all] #计算词语频率
frequency = defaultdict(int)
for i in text:
for token in i:
frequency[token]+=1
#过滤词频为3的
'''
texts=[[word for word in text if frequency[token]>3]
for text in texts]
'''
#通过语料库建立词典
dictionary = corpora.Dictionary(text)
dictionary.save("D:/reptile/file/dict1.txt") #加载要对比的文档
f3 = "D:/reptile/file/file_03.txt"
content3 = open(f3,encoding='UTF-8').read()
data3 = jieba.cut(content3) str3 = ""
for item in data3:
str3+=item+" "
new_data = str3 #doc2bow将文件变成一个稀疏矩阵
new_vec = dictionary.doc2bow(new_data.split()) #对字典进行docbow处理,得到新的语料库
corpus = [dictionary.doc2bow(j) for j in text] #将corpus语料库持久化到磁盘中,词句可以删除
#corpora.MmCorpus.serialize("D:/reptile/file/New_Yuliaoku.mm",corpus) #将新的语料库通过TfidfModel处理,得到tfidf
tfidf = models.TfidfModel(corpus) #求特征数
featureNum = len(dictionary.token2id.keys()) #SparseMatrixSimilarity 稀疏矩阵相似度
index = similarities.SparseMatrixSimilarity(tfidf[corpus],num_features=featureNum) #得到结果
sim = index[tfidf[new_vec]] #打印结果
print(sim)
运行结果
[ 0.58554006 0.15430336]
该结果说明:file_03文件与file_02的相似度为0.15430336,与file_01的相似度为0.58554006
【Pyhton 数据分析】通过gensim进行文本相似度分析的更多相关文章
- python 用gensim进行文本相似度分析
http://blog.csdn.net/chencheng126/article/details/50070021 参考于这个博主的博文. 原理 1.文本相似度计算的需求始于搜索引擎. 搜索引擎需要 ...
- 文本相似度分析(基于jieba和gensim)
基础概念 本文在进行文本相似度分析过程分为以下几个部分进行, 文本分词 语料库制作 算法训练 结果预测 分析过程主要用两个包来实现jieba,gensim jieba:主要实现分词过程 gensim: ...
- 转:Python 文本挖掘:使用gensim进行文本相似度计算
Python使用gensim进行文本相似度计算 转于:http://rzcoding.blog.163.com/blog/static/2222810172013101895642665/ 在文本处理 ...
- 文本离散表示(三):TF-IDF结合n-gram进行关键词提取和文本相似度分析
这是文本离散表示的第二篇实战文章,要做的是运用TF-IDF算法结合n-gram,求几篇文档的TF-IDF矩阵,然后提取出各篇文档的关键词,并计算各篇文档之间的余弦距离,分析其相似度. TF-IDF与n ...
- TF-IDF 文本相似度分析
前阵子做了一些IT opreation analysis的research,从产线上取了一些J2EE server运行状态的数据(CPU,Menory...),打算通过训练JVM的数据来建立分类模型, ...
- Python 文本相似度分析
环境 Anaconda3 Python 3.6, Window 64bit 目的 利用 jieba 进行分词,关键词提取 利用gensim下面的corpora,models,similarities ...
- 基于python语言使用余弦相似性算法进行文本相似度分析
编写此脚本的目的: 本人从事软件测试工作,近两年发现项目成员总会提出一些内容相似的问题,导致开发抱怨.一开始想搜索一下是否有此类工具能支持查重的工作,但并没找到,因此写了这个工具.通过从纸上谈兵到着手 ...
- LSTM 句子相似度分析
使用句子中出现单词的Vector加权平均进行文本相似度分析虽然简单,但也有比较明显的缺点:没有考虑词序且词向量区别不明确.如下面两个句子: "北京的首都是中国"与"中国的 ...
- 【机器学习】使用gensim 的 doc2vec 实现文本相似度检测
环境 Python3, gensim,jieba,numpy ,pandas 原理:文章转成向量,然后在计算两个向量的余弦值. Gensim gensim是一个python的自然语言处理库,能够将文档 ...
随机推荐
- webpack2 热加载js 文件
如果只要普通的热加载 只要如下配置就好了 package.json { "devDependencies": { "webpack": "^2.6.1 ...
- bzoj 4017: 小Q的无敌异或
4017: 小Q的无敌异或 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 593 Solved: 197[Submit][Status][Discu ...
- 【树形dp】Codeforces Round #405 (rated, Div. 1, based on VK Cup 2017 Round 1) B. Bear and Tree Jumps
我们要统计的答案是sigma([L/K]),L为路径的长度,中括号表示上取整. [L/K]化简一下就是(L+f(L,K))/K,f(L,K)表示长度为L的路径要想达到K的整数倍,还要加上多少. 于是, ...
- bzoj 1689: [Usaco2005 Open] Muddy roads 泥泞的路
1689: [Usaco2005 Open] Muddy roads 泥泞的路 Description Farmer John has a problem: the dirt road from hi ...
- [POJ3728]The merchant
题目大意: 给你一棵n个结点的带权树,有q组询问,问你从u到v的路径上最大值与最小值的差(最大值在最小值后面). 思路: 首先考虑路径上合并两个子路径u->t和t->v时的情况. 假设我们 ...
- Java学习笔记(12)
eclipse使用的步骤: 1.选择工作目录.以后在Eclipse上面写的所有代码都是在工作目录上的 2.在Project Exploer窗口上新建一个工程,以后我们写代码都是以工程为单位的 3.在工 ...
- CDOJ 1281 暴兵的卿学姐 构造题
暴兵的卿学姐 题目连接: http://acm.uestc.edu.cn/#/problem/show/1281 Description 沈宝宝又和卿学姐开始玩SC2了! 自从沈宝宝学会新的阵型后,就 ...
- 新浪微博(t.sina)简单授权代码及API测试
http://www.eoeandroid.com/thread-53701-1-1.html package mobson.weiboku.view; import java.util.ArrayL ...
- tcpdump的使用
tcpdump命令的控制分4个部分 控制tcpdump行为 -c 控制抓取报文的个数 -p 非混杂模式 -s 限制报文长度,0 为不限制 -w 保存抓取的报文到指定路径 -r 从pcap报文读取报文 ...
- Unity3d通用工具类之生成文件的MD5
今天我们来写写工具类,这个类有什么用呢? 也就是无论你做什么项目,这个工具类你都可以拿来用,之所以通用,是可以适用所有项目. 这节我主要讲如何生成文件的MD5码. 那么这个MD5是个什么鬼东西,读者可 ...