参考链接: Python 3中的文本分析

学习目标:

利用gensim包分析文档相似度使用jieba进行中文分词了解TF-IDF模型

环境:

Python 3.6.0 |Anaconda 4.3.1 (64-bit)

工具:

jupyter notebook

注:为了简化问题,本文没有剔除停用词“stop-word”。实际应用中应该要剔除停用词。

首先引入分词API库jieba、文本相似度库gensim

import jieba

from gensim import corpora,models,similarities

以下doc0-doc7是几个最简单的文档,我们可以称之为目标文档,本文就是分析doc_test(测试文档)与以上8个文档的相似度。

doc0 = "我不喜欢上海"

doc1 = "上海是一个好地方"

doc2 = "北京是一个好地方"

doc3 = "上海好吃的在哪里"

doc4 = "上海好玩的在哪里"

doc5 = "上海是好地方"

doc6 = "上海路和上海人"

doc7 = "喜欢小吃"

doc_test="我喜欢上海的小吃"

分词

首先,为了简化操作,把目标文档放到一个列表all_doc中。

all_doc = []

all_doc.append(doc0)

all_doc.append(doc1)

all_doc.append(doc2)

all_doc.append(doc3)

all_doc.append(doc4)

all_doc.append(doc5)

all_doc.append(doc6)

all_doc.append(doc7)

以下对目标文档进行分词,并且保存在列表all_doc_list中

all_doc_list = []

for doc in all_doc:

doc_list = [word for word in jieba.cut(doc)]

all_doc_list.append(doc_list)

把分词后形成的列表显示出来:

print(all_doc_list)

[[‘我’, ‘不’, ‘喜欢’, ‘上海’],  [‘上海’, ‘是’, ‘一个’, ‘好’, ‘地方’],  [‘北京’, ‘是’, ‘一个’, ‘好’, ‘地方’],  [‘上海’, ‘好吃’, ‘的’, ‘在’, ‘哪里’],  [‘上海’, ‘好玩’, ‘的’, ‘在’, ‘哪里’],  [‘上海’, ‘是’, ‘好’, ‘地方’],  [‘上海’, ‘路’, ‘和’, ‘上海’, ‘人’],  [‘喜欢’, ‘小吃’]]

以下把测试文档也进行分词,并保存在列表doc_test_list中

doc_test_list = [word for word in jieba.cut(doc_test)]

doc_test_list

[‘我’, ‘喜欢’, ‘上海’, ‘的’, ‘小吃’]

制作语料库

首先用dictionary方法获取词袋(bag-of-words)

dictionary = corpora.Dictionary(all_doc_list)

词袋中用数字对所有词进行了编号

dictionary.keys()

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]

编号与词之间的对应关系

dictionary.token2id

{‘一个’: 4,  ‘上海’: 0,  ‘不’: 1,  ‘人’: 14,  ‘北京’: 8,  ‘和’: 15,  ‘哪里’: 9,  ‘喜欢’: 2,  ‘在’: 10,  ‘地方’: 5,  ‘好’: 6,  ‘好吃’: 11,  ‘好玩’: 13,  ‘小吃’: 17,  ‘我’: 3,  ‘是’: 7,  ‘的’: 12,  ‘路’: 16}

以下使用doc2bow制作语料库

corpus = [dictionary.doc2bow(doc) for doc in all_doc_list]

语料库如下。语料库是一组向量,向量中的元素是一个二元组(编号、频次数),对应分词后的文档中的每一个词。

[[(0, 1), (1, 1), (2, 1), (3, 1)],  [(0, 1), (4, 1), (5, 1), (6, 1), (7, 1)],  [(4, 1), (5, 1), (6, 1), (7, 1), (8, 1)],  [(0, 1), (9, 1), (10, 1), (11, 1), (12, 1)],  [(0, 1), (9, 1), (10, 1), (12, 1), (13, 1)],  [(0, 1), (5, 1), (6, 1), (7, 1)],  [(0, 2), (14, 1), (15, 1), (16, 1)],  [(2, 1), (17, 1)]]

以下用同样的方法,把测试文档也转换为二元组的向量

doc_test_vec = dictionary.doc2bow(doc_test_list)

doc_test_vec

[(0, 1), (2, 1), (3, 1), (12, 1), (17, 1)]

相似度分析

使用TF-IDF模型对语料库建模

tfidf = models.TfidfModel(corpus)

获取测试文档中,每个词的TF-IDF值

tfidf[doc_test_vec]

[(0, 0.08112725037593049),  (2, 0.3909393754390612),  (3, 0.5864090631585919),  (12, 0.3909393754390612),  (17, 0.5864090631585919)]

对每个目标文档,分析测试文档的相似度

index = similarities.SparseMatrixSimilarity(tfidf[corpus], num_features=len(dictionary.keys()))

sim = index[tfidf[doc_test_vec]]

sim

array([ 0.54680777, 0.01055349, 0. , 0.17724207, 0.17724207,  0.01354522, 0.01279765, 0.70477605], dtype=float32)

根据相似度排序

sorted(enumerate(sim), key=lambda item: -item[1])

[(7, 0.70477605),  (0, 0.54680777),  (3, 0.17724207),  (4, 0.17724207),  (5, 0.013545224),  (6, 0.01279765),  (1, 0.010553493),  (2, 0.0)]

从分析结果来看,测试文档与doc7相似度最高,其次是doc0,与doc2的相似度为零。大家可以根据TF-IDF的原理,看看是否符合预期。  最后总结一下文本相似度分析的步骤:

读取文档 对要计算的多篇文档进行分词 对文档进行整理成指定格式,方便后续进行计算 计算出词语的词频【可选】对词频低的词语进行过滤 建立语料库词典 加载要对比的文档 将要对比的文档通过doc2bow转化为词袋模型对词袋模型进行进一步处理,得到新语料库 将新语料库通过tfidfmodel进行处理,得到tfidf通过token2id得到特征数 12、稀疏矩阵相似度,从而建立索引 13、得到最终相似度结果

[转载] 用Python进行简单的文本相似度分析相关推荐

  1. python进行简单的文本相似度分析

    python进行简单的文本相似度分析 本文利用gensim包.jieba包和TF-IDF模型进行简单的文本相似度分析.从而能够让我们确定,哪句话和哪句话相似程度是多少.文本相似度分析是自然语言处理中常 ...

  2. python 拼音相似度_Python实现简单的文本相似度分析操作详解

    本文实例讲述了Python实现简单的文本相似度分析操作.分享给大家供大家参考,具体如下: 学习目标: 1.利用gensim包分析文档相似度 2.使用jieba进行中文分词 3.了解TF-IDF模型 环 ...

  3. python jieba 文本相似度_文本相似度分析(基于jieba和gensim)

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

  4. python文本相似度分析_文本相似度分析(基于jieba和gensim)

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

  5. Python 搜索、排序、复杂度分析

    Python 搜索.排序.复杂度分析 算法是计算机程序的一个基本的构建模块.评价算法质量的最基本的标准是正确性,另一个重要的标准是运行时间性能.当在一台真实.资源有限的计算机上运行一个算法的时候,经济 ...

  6. python实现文本情感分析_用python实现简单的文本情感分析

    很久没在公众号发布新内容,在这段时间内没想到有这么多python爱好者关注了我,港真的,心里很兴奋激动. 今天给大家带来我刚刚实现了的简单多文本情感分析代码,代码环境python3.5 原理 比如这么 ...

  7. 【NLP】Python实例:基于文本相似度对申报项目进行查重设计

    Python实例:申报项目查重系统设计与实现 作者:白宁超 2017年5月18日17:51:37 摘要:关于查重系统很多人并不陌生,无论本科还是硕博毕业都不可避免涉及论文查重问题,这也对学术不正之风起 ...

  8. python 文本相似度现状_python文本相似度分析

    如何用python计算文本的相似度 同学欢迎来到CSS布局HTML~文本的相似度计算是NLP(自然语言处理)方向的范畴,感兴趣可以找相关的书籍详细学习研究.同学问的这个问题,可以搜索:python文本 ...

  9. gensim基本使用+文本相似度分析

    gensim基本使用 gensim 是一个通过衡量词组(或更高级结构,如整句或文档)模式来挖掘文档语义结构的工具 三大核心概念:文集(语料)–>向量–>模型 文集: 将原始的文档处理后生成 ...

最新文章

  1. Nginx——location配置
  2. Tensorflow【实战Google深度学习框架】TFLearn大宝剑
  3. 豪华版飞机大战系列(六)--附源代码
  4. 数据结构与算法--再来聊聊数组
  5. linux能挂载的文件类型,mount命令是如何自动识别挂载点的文件系统类型的
  6. 线程协作-CountDownLatch
  7. 在Ubuntu中为root用户启用界面登录
  8. jq 展示数据小细节
  9. centos磁盘满了,查找大文件并清理
  10. python中文视频教程-中谷教育python中文视频教程(python视频教程) 完整版
  11. 微软苏州2018冬季实习面试经历
  12. String实现 intern
  13. sns.relplot
  14. linux下的挂载点和分区是什么关系(详解挂载点)
  15. 笔记|角度传感器angular transducer
  16. jQuery之图片显示篇A
  17. 汤臣倍健,行业第一的下坡路
  18. Mac 电脑安装putty
  19. vue中引入js,然后new js里的方法
  20. american主板网卡灯关机后还亮_玩游戏电脑自己关机。主机灯一闪一闪的。显示器黑屏。键盘鼠标不亮。切短电源才不亮、求大神帮忙看看、、...

热门文章

  1. 【Atcoder agc020 C】Median Sum,序列子集和中位数,bitset,01背包
  2. java+jdk+1.6.0+45+64_jdk1.6.0_45.tar.gz
  3. openresty的html文件夹在,Openresty 配置访问静态文件,拆分路径
  4. 保存文件_正确保存Zbrush文件
  5. bzoj 1432: [ZJOI2009]Function
  6. bzoj 1046: [HAOI2007]上升序列
  7. HBase因hostname可能引起的RIT问题。HBASE的ip和hostname坑
  8. centos7(linux)使用心得
  9. python深度学习库keras——各类网络层
  10. 简述隐含表法化简状态步骤