向量空间模型VSM:

VSM的介绍:

一个文档可以由文档中的一系列关键词组成,而VSM则是用这些关键词的向量组成一篇文档,其中的每个分量代表词项在文档中的相对重要性。

VSM的例子:

比如说,一个文档有分词和去停用词之后,有N个关键词(或许去重后就有M个关键词),文档关键词相应的表示为(d1,d2,d3,...,dn),而每个关键词都有一个对应的权重(w1,w1,...,wn)。对于一篇文档来说,或许所含的关键词项比较少,文档向量化后的向量维度可能不是很大。而对于多个文档(2篇文档或两篇文档以上),则需要合并所有文档的关键词(关键词不能重复),形成一个不重复的关键词集合,这个关键词集合的个数就是每个文档向量化后的向量的维度。打个比方说,总共有2篇文档A和B,其中A有5个不重复的关键词(a1,a2,a3,a4,a5),B有6个关键词(b1,b2,b3,b4,b5,b6),而且假设b1和a3重复,则可以形成一个简单的关键词集(a1,a2,a3,a4,a5,,b2,b3,b4,b5,b6),则A文档的向量可以表示为(ta1,ta2,ta3,ta4,ta5,0,0,0,0,0),B文档可以表示为(0,0,tb1,0,0,tb2,tb3,tb4,tb5,tb6),其中的tb表示的对应的词汇的权重。

最后,关键词的权重一般都是有TF-IDF来表示,这样的表示更加科学,更能反映出关键词在文档中的重要性,而如果仅仅是为数不大的文档进行比较并且关键词集也不是特别大,则可以采用词项的词频来表示其权重(这种表示方法其实不怎么科学)。

TF-IDF权重计算:

TF的由来:

以前在文档搜索的时候,我们只考虑词项在不在文档中,在就是1,不在就是0。其实这并不科学,因为那些出现了很多次的词项和只出现了一次的词项会处于等同的地位,就是大家都是1.按照常理来说,文档中词项出现的频率越高,那么就意味着这个词项在文档中的地位就越高,相应的权重就越大。而这个权重就是词项出现的次数,这样的权重计算结果被称为词频(term frequency),用TF来表示。

IDF的出现:

在用TF来表示权重的时候,会出现一个严重的问题:就是所有 的词项都被认为是一样重要的。但在实际中,某些词项对文本相关性的计算来说毫无意义,举个例子,所有的文档都含有汽车这个词汇,那么这个词汇就没有区分能力。解决这个问题的直接办法就是让那些在文档集合中出现频率较高的词项获得一个比较低的权重,而那些文档出现频率较低的词项应该获得一个较高的权重。

为了获得出现词项T的所有的文档的数目,我们需要引进一个文档频率df。由于df一般都比较大,为了便于计算,需要把它映射成一个较小的范围。我们假设一个文档集里的所有的文档的数目是N,而词项的逆文档频率(IDF)。计算的表达式如下所示:

通过这个idf,我们就可以实现罕见词的idf比较高,高频词的idf比较低。

TF-IDF的计算:

TF-IDF = TF * IDF

有了这个公式,我们就可以对文档向量化后的每个词给予一个权重,若不含这个词,则权重为0。

余弦相似度的计算:

有了上面的基础知识,我们可以将每个分好词和去停用词的文档进行文档向量化,并计算出每一个词项的权重,而且每个文档的向量的维度都是一样的,我们比较两篇文档的相似性就可以通过计算这两个向量之间的cos夹角来得出。下面给出cos的计算公式:

分母是每篇文档向量的模的乘积,分子是两个向量的乘积,cos值越趋向于1,则说明两篇文档越相似,反之越不相似。

文本比较实例:

对文本进行去停用词和分词:

文本未分词前,如下图所示:

文本分词和去停用词后,如下图所示:

词频统计和文档向量化

对经过上一步处理过的文档,我们可以统计每个文档中的词项的词频,并且将其向量化,下面我直接给出文档向量化之后的结果。注意:在这里由于只是比较两篇文档的相似性,所以我只用了tf来作为词项的权重,并未使用tf-idf:

向量化后的结果是:

[1,1,1,1,1,1,1,1,1,1,1,1,1,1]

两篇文档进行相似度的计算,我会给出两篇文档的原文和最终计算的相似度:

文档原文如下所示:

文档A的内容

文档B的内容

余弦相似度代码实现:

1 importmath2 #两篇待比较的文档的路径

3 sourcefile = '1.txt'

4 s2 = '2.txt'

5

6 #关键词统计和词频统计,以列表形式返回

7 defCount(resfile):8 t ={}9 infile = open(resfile, 'r', encoding='utf-8')10 f =infile.readlines()11 count =len(f)12 #print(count)

13 infile.close()14

15 s = open(resfile, 'r', encoding='utf-8')16 i =017 while i

python 文本相似度_python实现余弦相似度文本比较相关推荐

  1. ML:文本、图像等数值化数据相似度计算之余弦相似度计算三种python代码实现

    ML:文本.图像等数值化数据相似度计算之余弦相似度计算三种python代码实现 目录 相似度计算之余弦相似度计算 输出结果 三种python代码实现

  2. 【推荐系统->相似度算法】余弦相似度

    转自相似度算法之余弦相似度 余弦距离,也称为余弦相似度,是用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小的度量. 余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫&qu ...

  3. python 文本聚类可视化_Python 文本相似度和聚类

    Python 文本相似度和聚类 文本数据是非结构化的和高噪声的.在执行文本分类时,拥有标记合理的训练数据和有监督学习大有裨益.但是,文档聚类是一个无监督的学习过程,将尝试通过让机器学习各种各样的文本文 ...

  4. Python简单实现基于VSM的余弦相似度计算

    在知识图谱构建阶段的实体对齐和属性值决策.判断一篇文章是否是你喜欢的文章.比较两篇文章的相似性等实例中,都涉及到了向量空间模型(Vector Space Model,简称VSM)和余弦相似度计算相关知 ...

  5. 文本相似度检测之余弦相似度

    为什么文本也需要余弦相似度 文本的余弦相似度是为了计算文本的相似程度而引入的一种方法,例如我们要比较这样两句话的相似程度: A句子:你笑起来真好看. B句子:你笑起来不好看. 这两句话,看起来很相似了 ...

  6. python 文本处理模块_Python文本处理几种方法

    Python文本处理几种方法 方法一:readline函数#-*- coding: UTF-8 -*- f = open("D:\pythontest\splm_ugslmd.log&quo ...

  7. python文本特征提取实例_Python文本特征抽取与向量化算法学习

    本文为大家分享了Python文本特征抽取与向量化的具体代码,供大家参考,具体内容如下 假设我们刚看完诺兰的大片<星际穿越>,设想如何让机器来自动分析各位观众对电影的评价到底是"赞 ...

  8. python相册图片处理_Python实现图片相似度计算

    图片相似度 _ 概述 今天在用一个软件清理手机时,看到了一个比较好的功能:相似图片删除.软件识别出相册中类似的图片,删除相似图片,进而释放手机存储. 上网查了这个功能的基本实现算法,有挺多算法求图片相 ...

  9. 相似度算法之余弦相似度

    转自:http://blog.csdn.net/u012160689/article/details/15341303 余弦距离,也称为余弦相似度,是用向量空间中两个向量夹角的余弦值作为衡量两个个体间 ...

最新文章

  1. shell脚本将命令的输出结果赋值给变量
  2. 博客作业01-抽象数据类型
  3. SD_CUSTOMER_MAINTAIN_ALL
  4. python中的数据类型有哪些是可阅读,Python中典型的数据类型中哪个只能阅读不能修改...
  5. 同步和异步GET,POST请求
  6. 编程语言API性能大比拼
  7. LVM 的创建,扩展,缩减及建立快照
  8. 数据库(学习整理)----5--Oracle常用的组函数
  9. 约束,修改表结构,添加删除约束
  10. 女神周迅离婚,Python分析国内离婚情况,结果触目惊心!
  11. testlink mysql_windows下testlink环境搭建
  12. 半监督3D医学图像分割(四):SASSNet
  13. 数学建模论文(国赛)写作建议
  14. C#时钟控件 (C# Clock Control)
  15. 近源渗透测试之Keylogger实战
  16. 怎么样在迅捷CAD编辑器的图中输入文字
  17. 【unity学习记录】TileMap基础知识(详细版)
  18. 如何在webrtc中切换音频输出设备
  19. Nokia 诺基亚 6030 湖南区域可用频道波段
  20. 如何将adobe pdf背景设置为护眼色

热门文章

  1. codevs 1052:地鼠游戏
  2. 坑爹的uint32_t
  3. javascript 键值转换
  4. 数据库基础知识——DML语言
  5. 【剑指offer】面试题26:树的子结构(Java)
  6. B1015/A1062 . 德才论 (25)
  7. 400错误是什么原因_499错误是什么?499错误的原因及解决方法
  8. php显示动态通告信息方式,Joomla PHP通知,警告和错误指南
  9. php flush nginx,Nginx+phpfastcgi下flush输出问题
  10. Python中矩阵库Numpy基本操作