最近帮很多本科毕业生做文本数据分析,经常遇到的一个需求是计算文档相似度。

思路:

抽取语料(所有文档)中的词语,构建词典(词语与数字对应起来)。

根据构建的词典对每个文档进行重新编码(将文档转化为向量)。

使用余弦计算相似度

下面的corpus是我在知乎live随便找到的几个评论,拿来当做测试的例子。好像数据不怎么好玩,大家跟着一起凑合凑合吧。

corpus = ['老师讲的很好很全面干货很多',

'讲述的很好干货满满',

'满满的干货很实用',

'感谢老师无私的分享啦',

'真水呵呵哒']

构建词典-学习语料特征

其实在机器学习里,学习语料的所有词语并将其转化为数字,这一步骤叫做特征化。强烈推荐对数据科学感兴趣的童鞋学学scikit-learn库,人工智能咱们小白可能还玩不转,但是调用封装好的机器学习算法,浅显的玩玩机器学习还是没啥难度的。

在scikit-learn中,涉及到文本数据特征化的类有sklearn.feature_extraction.text.CountVectorizer 和sklearn.feature_extraction.text.TfidfVectorizer 。我们先以常见的词频统计作为特征抽取的方式开始探索,由于scikit默认使用英文空格作为分词符号,所以处理中文数据前我们要分词并以空格间隔开来。

from sklearn.feature_extraction.text import CountVectorizer

import jieba

corpus = [' '.join(jieba.lcut(doc))

for doc in corpus]corpus

['老师 讲 的 很 好 很 全面 干货 很多',

'讲述 的 很 好 干货 满满',

'满满的 干货 很 实用',

'感谢 老师 无私 的 分享 啦',

'真水 呵呵 哒']

wordcounter = CountVectorizer()

#学习特征(构建词典)fit 并转化为特征矩阵。

matrix=wordcounter.fit_transform(corpus)

print(matrix.toarray())

#查看下特征与词语对应关系

print(wordcounter.get_feature_names())

[[1 0 0 0 1 1 0 0 0 0 0 1 0]

[0 0 0 0 1 0 0 0 1 0 0 0 1]

[0 0 0 1 1 0 0 0 0 1 0 0 0]

[0 1 0 0 0 0 1 1 0 0 0 1 0]

[0 0 1 0 0 0 0 0 0 0 1 0 0]]

['全面', '分享', '呵呵', '实用', '干货',

'很多', '感谢', '无私', '满满', '满满的',

'真水', '老师', '讲述']

计算相似度

这里使用scikit提供的cosine-similarity函数。

from sklearn.metrics.pairwise import cosine_similarity

cosine_similarity(matrix)

array([[1. , 0.28867513, 0.28867513, 0.25 , 0. ],

[0.28867513, 1. , 0.33333333, 0. , 0. ],

[0.28867513, 0.33333333, 1. , 0. , 0. ],

[0.25 , 0. , 0. , 1. , 0. ],

[0. , 0. , 0. , 0. , 1. ]])

我们看到这个矩阵是沿着对角线对称的,所以我们只需要看第一行。

第一个评论与第一个评论之间的相似度为1

第一个评论与第二个评论的相似度为0.28867513

第一个评论与第三个评论的相似度为0.28867513

第一个评论与第四个评论的相似度为0.25

第一个评论与第四个评论的相似度为0

高中数学知识cos相似性计算公式

本以为自己对这里很熟悉,结果自己写cos计算公式时居然出错了。粘贴到这里,帮助大家回忆高中知识。(a和b是向量)

#cos相似性计算

def cosVector(x,y):

result1=0.0

result2=0.0

result3=0.0

for i in range(len(x)):

result1 +=x[i]*y[i] #sum(a*b)

result2 +=x[i]**2 #sum(a*a)

result3 +=y[i]**2 #sum(b*b)

return str(result1/((result2*result3)**0.5))

vect1 = [1,0,1]

vect2 = [0,1,0]

vect3 = [1,1,1]

print("vect1与vect2相似度为:", cosVector(vect1, vect2))

print("vect1与vect3相似度为:", cosVector(vect1, vect3))

print("vect2与vect3相似度为:", cosVector(vect2, vect3))

vect1与vect2相似度为: 0.0

vect1与vect3相似度为: 0.8164965809277261

vect2与vect3相似度为: 0.5773502691896258

java文档相似度计算,计算文档与文档的相似度相关推荐

  1. 基于TF-IDF编码进行文本聚类分析:文档成对相似性计算、层次聚类(链接矩阵、树形图dendrogram绘制、聚类标签)

    基于TF-IDF编码进行文本聚类分析:文档成对相似性计算.层次聚类(链接矩阵.树形图dendrogram绘制.聚类标签) 目录

  2. DNF中伤害类型综合计算方式以及相关Excel文档

    DNF中伤害类型综合计算方式以及相关Excel文档 运算方式分类和区别 伤害加成类型分类 计算方式的使用 进一步验证中 一下部分算法可能存在问题. 运算方式分类和区别 运算方式总共3种,分别是 加算( ...

  3. java将后台数据库查询到的数据导出word文档当中

    java将后台数据库查询到的数据导出word文档当中 之前项目需求使用Java导出word文档,一直没有进行整理,今天把它进行整理出来,以便以后使用到:下面是导出的word文档. // 前端报告表格 ...

  4. 超级干货 :一文读懂大数据计算框架与平台(升级版)

    1. 前言 计算机的基本工作就是处理数据,包括磁盘文件中的数据,通过网络传输的数据流或数据包,数据库中的结构化数据等.随着互联网.物联网等技术得到越来越广泛的应用,数据规模不断增加,TB.PB量级成为 ...

  5. 一文读懂大数据计算框架与平台

    1. 前言 计算机的基本工作就是处理数据,包括磁盘文件中的数据,通过网络传输的数据流或数据包,数据库中的结构化数据等.随着互联网.物联网等技术得到越来越广泛的应用,数据规模不断增加,TB.PB量级成为 ...

  6. python 速度矢量表达式_一文总结词向量的计算、评估与优化

    原标题:一文总结词向量的计算.评估与优化 机器学习算法与Python学习 加星标,提升AI技能) Datawhale干货 作者:芙蕖, Datawhale优秀学习者 ,东北石油大学 为了处理语言,需要 ...

  7. java根据pdf模板生成pdf_Java 复制、压缩PDF文档

    在日常办公中,掌握操作PDF文档的能力尤为重要.在前文中我使用Java程序来演示过如何合并和拆分PDF文档.本文将介绍如何复制和压缩文档.通常复制文档有两种形式,一种是跨文档复制,即将一个文档复制到另 ...

  8. 字符串的回文子序列个数_计算给定字符串中回文子序列的数量

    字符串的回文子序列个数 Problem statement: 问题陈述: Given a string you have to count the total number of palindromi ...

  9. java中用流提取文档中的文字,语言实现从word文档中提取文本

    word中提取中文 打开Word,CTRL+F打开"查找替换"对话框. 点击下方的"查找替换"对话框的"高级"按钮. 点击"特殊字 ...

最新文章

  1. 投稿人就是AI顶会最好的「审稿人」!中国学者提出同行评审新机制
  2. 自考计算机英语答题技巧,自考英语题型答题技巧-自考英语写作
  3. Tree Constructer
  4. nasa电池数据集_文章分享—模型与滤波算法结合的锂电池剩余寿命预测方法
  5. K8S中如何跨namespace 访问服务?为什么ping不通ClusterIP?
  6. NetworkComms.Net github下载地址
  7. JAVA之所得税计算器
  8. 计算机组成原理第五版磁盘知识点,计算机组成原理知识点总结.doc
  9. php短视频源码,流式布局(代码)
  10. python 编写computer类
  11. 宿舍的呼噜神,快看过来,我这里有药!!!
  12. 《Real-Time Rendering 4th Edition》全文翻译 - 第6章 纹理化(上)6.1 ~ 6.3
  13. shell-grammar
  14. 小白java环境变量配置
  15. c语言中怎么画直线,ps如何画直线 【操作流程】
  16. idea不区分大小写提示
  17. 网易我的世界java怎么开光追_《我的世界》如何开启光线追踪?
  18. 单元测试(三) mockito入门
  19. __str__()方法
  20. 黑猴子的家:Centos 7.x 安装百度网盘baidunetdisk

热门文章

  1. 前端-网站性能优化——CDN加速
  2. 常见车规级芯片汇总 ---高通820A、高通8155P、高通8195 和 特斯拉HW3.0芯片
  3. 将solidworks中的模型导入comsol
  4. 【论文精读】2017-ICME-Remembering history with convolutional LSTM for anomaly detection
  5. 一种 低噪声放大器 电路结构
  6. MATLAB 数据分析
  7. GlusterFS介绍及安装部署
  8. sql 存储过程回滚用法
  9. 检测到磁盘可能为uefi引导_如何用uefi引导安装win7
  10. 【杭州·招聘】丁香园招中高级业务测试-内推岗位