环境描述

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文件内容:

我的肚子不舒服!与此同时,牙疼也让我接近崩溃

文本相似度分析步骤

  1. 打开并读取文档内容
  2. 对要进行分析的文档分词
  3. 格式化文档
  4. 计算词频(可以过滤词频较小的词)
  5. 通过语料库建立字典
  6. 加载要对比的文档
  7. 将要对比的文档通过doc2bow转化为稀疏向量
  8. 对稀疏向量进行进一步处理,得到新语料库
  9. 将新语料库通过tfidfmodel进行处理,得到tfidf
  10. 通过token2id得到特征数
  11. 稀疏矩阵相似度,从而建立索引
  12. 得到相似度结果

实现代码

#-*- 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进行文本相似度分析的更多相关文章

  1. python 用gensim进行文本相似度分析

    http://blog.csdn.net/chencheng126/article/details/50070021 参考于这个博主的博文. 原理 1.文本相似度计算的需求始于搜索引擎. 搜索引擎需要 ...

  2. 文本相似度分析(基于jieba和gensim)

    基础概念 本文在进行文本相似度分析过程分为以下几个部分进行, 文本分词 语料库制作 算法训练 结果预测 分析过程主要用两个包来实现jieba,gensim jieba:主要实现分词过程 gensim: ...

  3. 转:Python 文本挖掘:使用gensim进行文本相似度计算

    Python使用gensim进行文本相似度计算 转于:http://rzcoding.blog.163.com/blog/static/2222810172013101895642665/ 在文本处理 ...

  4. 文本离散表示(三):TF-IDF结合n-gram进行关键词提取和文本相似度分析

    这是文本离散表示的第二篇实战文章,要做的是运用TF-IDF算法结合n-gram,求几篇文档的TF-IDF矩阵,然后提取出各篇文档的关键词,并计算各篇文档之间的余弦距离,分析其相似度. TF-IDF与n ...

  5. TF-IDF 文本相似度分析

    前阵子做了一些IT opreation analysis的research,从产线上取了一些J2EE server运行状态的数据(CPU,Menory...),打算通过训练JVM的数据来建立分类模型, ...

  6. Python 文本相似度分析

    环境 Anaconda3 Python 3.6, Window 64bit 目的 利用 jieba 进行分词,关键词提取 利用gensim下面的corpora,models,similarities ...

  7. 基于python语言使用余弦相似性算法进行文本相似度分析

    编写此脚本的目的: 本人从事软件测试工作,近两年发现项目成员总会提出一些内容相似的问题,导致开发抱怨.一开始想搜索一下是否有此类工具能支持查重的工作,但并没找到,因此写了这个工具.通过从纸上谈兵到着手 ...

  8. LSTM 句子相似度分析

    使用句子中出现单词的Vector加权平均进行文本相似度分析虽然简单,但也有比较明显的缺点:没有考虑词序且词向量区别不明确.如下面两个句子: "北京的首都是中国"与"中国的 ...

  9. 【机器学习】使用gensim 的 doc2vec 实现文本相似度检测

    环境 Python3, gensim,jieba,numpy ,pandas 原理:文章转成向量,然后在计算两个向量的余弦值. Gensim gensim是一个python的自然语言处理库,能够将文档 ...

随机推荐

  1. 【JAVA】在线程里使用线程外的变量为什么一定要是final类型

    这个情况真的碰到很多,开始的时候也很难理解,但是既然IDE提示要final那我就final咯,跑通就行管那么多呢.然而这并不是科学的学习方法,万一面试问你呢那不是倒了大霉. OK,看了一些

  2. 【置换群/模拟】NOIP2005-篝火晚会

    [问题描述] 佳佳刚进高中,在军训的时候,由于佳佳吃苦耐劳,很快得到了教官的赏识,成为了“小教官”.在军训结束的那天晚上,佳佳被命令组织同学们进行篝火晚会.一共有n个同学,编号从1到n.一开始,同学们 ...

  3. bzoj 1783: [Usaco2010 Jan]Taking Turns

    1783: [Usaco2010 Jan]Taking Turns Description Farmer John has invented a new way of feeding his cows ...

  4. Java常用小笔记

    1.对list集合进行分页 //startIndex指的是开始的小标 从0开始,pageSize是每页记录数 int toIndex = new Integer(startIndex)+new Int ...

  5. [BZOJ1007](HNOI2008)水平可见直线(半平面交习题)

    Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的.     例如,对于直线:   ...

  6. 2015 百度之星 1003 棋盘占领 dfs

    棋盘占领 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://bestcoder.hdu.edu.cn/contests/contest_show ...

  7. 一次完整的HTTP请求的大致过程(转)

    说明:这些理论基本都来自网上,所以不一定准确,但一定是比较好理解的,如果要刨根问底,最好的方式就是看书,且要看权威的书. 一次完整的HTTP请求所经历的7个步骤 HTTP通信机制是在一次完整的HTTP ...

  8. mysql备份mysqldump

    mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump ...

  9. Java RSA加密算法生成公钥和私钥

    原文:http://jingyan.baidu.com/article/6dad5075f33466a123e36ecb.html?qq-pf-to=pcqq.c2c 目前为止,RSA是应用最多的公钥 ...

  10. js禁止复制粘贴

    1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键,其实是禁止快捷菜单,因为不光右键可以弹出这个菜单,键盘上空格 ...