环境描述

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. AvalonJS学习笔记(一)

    一.关于AvalonJS avalon是国内的一个MVVM框架,是从knockout发展起来的 分为两个版本 avalon.js版本,支持IE6及非常老的标准浏览器.这里的标准浏览器特指W3C阵营中的 ...

  2. [Atcoder Grand Contest 004] Tutorial

    Link: AGC004 传送门 A: …… #include <bits/stdc++.h> using namespace std; long long a,b,c; int main ...

  3. 【递推】【推导】【乘法逆元】UVA - 11174 - Stand in a Line

    http://blog.csdn.net/u011915301/article/details/43883039 依旧是<训练指南>上的一道例题.书上讲的比较抽象,下面就把解法具体一下.因 ...

  4. light oj 1236 - Pairs Forming LCM & uva 12546 - LCM Pair Sum

    第一题给定一个大数,分解质因数,每个质因子的个数为e1,e2,e3,……em, 则结果为((1+2*e1)*(1+2*e2)……(1+2*em)+1)/2. 代码如下: #include <st ...

  5. Node.js的http模块理解

    Node.js标准库提供了http模块,其中封装了一个高效的HTTP服务器和一个简易的HTTP客户端. http.Server是一个基于事件的HTTP服务器,它的核心由C++编写,兼顾高性能和简易性 ...

  6. Java高级架构师(一)第35节:Nginx的Location区段

    没有修饰符 表示:必须以指定模式开始. 表示/abc下的所有内容都可以被访问. = 表示与指定的模式精确匹配,可以带参数. 实例中要求区分大小写,并以c结尾. 实例中指定的正则表达式不区分大小写. 注 ...

  7. [转]No configuration found for the specified action解决办法

    使用Struts2,配置一切正常,使用常用tag也正常,但是在使用<s:form>标记时,发现控制台总是输出警告信息, 警告信息内容如下: 警告: ...... <div> h ...

  8. C# 中的.pdb/ .vshost.exe/ .vshost.exe.manifest文件

    转自 C# 中的.pdb/ .vshost.exe/ .vshost.exe.manifest文件讨论 pdb文件: 英文全称:Program Database File 中文全称:程序数据库 文件 ...

  9. FORM-加载前指定日期时间格式

    PRE-FORM -- Standard date format --BEGIN  set_application_property(DATE_FORMAT_COMPATIBILITY_MODE, ' ...

  10. 用LaTeX写线性规划

    线性规划由目标函数和若干约束构成,Latex中并没有直接的命令来写线性规划.简单的做法是使用\begin{eqnarray} … \end{eqnarray}命令,但eqnarray命令是使若干方程按 ...