学习目标:

1.利用gensim包分析文档相似度

2.使用jieba进行中文分词

3.了解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是jige几个最简单的文档,我们可以称之为目标文档,本文就是分析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)]

print(doc_test_listt)

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

制作语料库:

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

dictonary = corpora.Dictionary(all_doc_list)

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

dictionary.keys()

编号与词之间的对应关系

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的原理,看看是否符合预期.

最后总结一下文本相似度分析的步骤:

1.读取文档

2.对要计算的多篇文档进行分词

3.对文档进行整理成指定格式,方便后续进行计算

4.计算出词语的词频

5.[可选]对词频低的词语进行过滤

6.建立语料库词典

7.加载要对比的文档

8.将要对比的文档通过doc2bow转化为词袋模型

9.对词袋模型进行进一步处理,得到新语料库

10.将新语料库通过tfidfmodel进行处理, 得到tfidf

11.通过token2id得到特征数12、稀疏矩阵相似度, 从而建立索引13、得到最终相似结果。

python 拼音相似度_用Python进行简单的文本相似度分析相关推荐

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

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

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

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

  3. 编辑python用什么输入法_用Python从0开始实现一个中文拼音输入法!

    众所周知,中文输入法是一个历史悠久的问题,但也实在是个繁琐的活,不知道这是不是网上很少有人分享中文拼音输入法的原因,接着这次NLP Project的机会,我觉得实现一发中文拼音输入法,看看水有多深,结 ...

  4. python手机编程输入法_用Python写一个拼音输入法

    拼音输入法的简单实现可以归结为使用维特比算法求解汉字隐马尔可夫模型的问题:将用户输入的拼音转换为字层,使用维特比算法求解得到概率最大的一个"字链",这个"字链" ...

  5. python 文本相似度计算函数_一文讲述常见的文本相似度计算方法

    作者 | LU_ZHAO 责编 | 徐威龙 前言 在自然语言处理中,我们经常需要判定两个东西是否相似. 比如,在微博的热点话题推荐那里,我们需要比较微博之间的相似度,让相似度高的微博聚集在一起形成一个 ...

  6. python与贝叶斯_用Python实现贝叶斯定理

    写作说明 上一期我们讲了贝叶斯分类器,其中有很多的概率基础知识和贝叶斯定理.但是讲解的很没有重点,前半部分讲的是贝叶斯基础知识,最后很突兀的插进来一个文本分析-贝叶斯分类器.很多童鞋看到很累.其实上一 ...

  7. python需要具备什么_入门Python需要掌握哪些技能呢?

    随着人工智能时代的来临,Python开始崭露头角并迅速吸引了人们的广泛关注.很多人想要从事Python开发,但零基础入门Python,需要了解什么呢?看看你都掌握了吗? 1.Python是如何被解释执 ...

  8. python大牛 关东升_《Python从小白到大牛》第4章 Python语法基础

    本章主要为大家介绍Python的一些语法,其中包括标识符.关键字.常量.变量.表达式.语句.注释.模块和包等内容. 标识符和关键字 任何一种计算机语言都离不开标识符和关键字,因此下面将详细介绍Pyth ...

  9. python之禅 中文_《Python之禅》中对于Python编程过程中的一些建议

    <Python之禅>中对于Python编程过程中的一些建议 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  <Python之禅>中对于Pyt ...

  10. python画交互式地图_使用Python构建交互式地图-入门指南

    python画交互式地图 Welcome to The Beginner's Guide to Building Interactive Maps in Python 欢迎使用Python构建交互式地 ...

最新文章

  1. 从Nginx绑定80端口学套接字编程
  2. Sharepoint the file is locked for use domain\user edit.文件被锁定,解锁方式
  3. 第十周软件工程作业-每周例行报告
  4. python 局域网扫描_Python 简化版扫描局域网存活主机
  5. python中的是干什么用的_python主要用来干什么?
  6. [2019.3.25]多项式求逆
  7. delphi 的 pos 函数 对中文支持不好。
  8. 单例设计模式(懒汉式,饿汉式)
  9. 计算机知识脑筋急转弯,10道智力题图片及答案大全|2018年朋友圈最烧脑的10道智力题 附答案_最火软件站...
  10. 软件安全测试之应用安全测试
  11. 设置notepad++背景护眼色
  12. 苹果手机html5定位,苹果手机常去地点可以记录多长时间?
  13. css动感线条,使用css3制作动感导航条示例
  14. Qt报错 error: C1083
  15. Gradient vanishing and explosion
  16. 中国共享汽车行业需求状况及发展前景预测报告(新版)2022-2027年
  17. python协程池_python3下multiprocessing、threading和gevent性能对比—-暨进程池、线程池和协程池性能对比 | 学步园...
  18. Linux中使用sendmail发送邮件,指定任意邮件发送人
  19. ‘xxx‘ “将对您的电脑造成伤害。 您应该将它移到废纸篓。”mac一直弹窗并关不掉的解决方式
  20. 宇视科技的摄像头添加至别的品牌录像机黑屏

热门文章

  1. ENVI数据类型和MATLAB数据类型对比
  2. 2.kafka 安装
  3. 13. 在后台配置主题
  4. 11. JavaScript 对象
  5. 《数学之美》—闪光的不一定是金子
  6. 量子纠缠2——CHSH不等式
  7. 内置函数dict()字典
  8. 微信统一支付接口返回“签名错误”的可能原因
  9. MySQL 基础理论面试题整理
  10. CentOS 通过yum来升级php到php5.6