基于词频的文本相似度

  • 文本
  • 分词
  • 统计词频
  • 词频向量
  • 相似度计算
  • 应用

项目源码: https://github.com/zhang2172268/mygit/tree/master/textSimilarity/textSimilarity

文本

  • 原理(基于词频):统计词频,构建词频特征向量,利用特征向量夹角余弦表示文本相似度。

    统计文本中每个词出现的次数,即词频,通过词频构建文本向量,通过计算两个文本向量之间的余弦相似度,反映两个文本之间的相似度;这类算法也有缺点,没有很好地解决文本数据中存在的自然语言问题,即同义词和多义词。
  • 文本分词->去掉停用词->统计词频->构建词频向量->计算余弦相似度

分词

第一步进行文本分词

词是最小的能够独立活动的有意义的语言成分,英文单词之间是以空格作为自然分界符的,而汉语是以字为基本的书写单位,词语之间没有明显的区分标记,因此中文是一定要分词的。

  • 基于jieba分词第三方库。
  • 介绍一下jieba第三方库所用到的算法。
    • 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG);
    • 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合;
    • 对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法。
  • 我主要是用这个库来实现文本的精确分词,接着拿到这些词的出现的频率,构建基于词频的特征向量。通过特征向量借助多种算法来求文本相似度。
  • 注:在linux下编码方式是UTF-8的,但是在windows下编码方式是GBK的;但是jieba 分词只支持UTF-8编码方式,因此我在windows下VS中使用jieba 时,要先将词的编码方式进行转换。
第二步去掉停用词

人类语言包含很多功能词。与其他词相比,功能词没有什么实际含义。 停用词主要包括数字、标点符号及使用频率特高的词(代词,语气助词、副词、介词、连接词 )等。

我们
怎么办
总之
此外 然而 不如 不妨 。 , ?

停用词不代表实际意义,所以不需要统计停用词的词频,停用词不参与构建词频向量。

统计词频

第三步统计词频
  • 词频

    • 词频即为单词在文章中出现的次数。
    • 词频的大小一般可以反映一个词在一篇文章中的重要性,词频越大,可以认为该词越重要。
    • 一篇文章的语义可以由一组关键词简要概括,比如"今天早上八点钟,我要去教室上课",关键词"八点,教室,上课"。
  • 分词编码
    • 在构建文本词频向量时,需要考虑向量的意义,也必须保证向量的一致性,这样才有可比性。
    • 意义:文本的语义,用词频来表示
      一致性:如何保证一致性?向量中的每一维值都应该表示相同的意思。
      更具体的说,一致性就体现在两个文本向量的每一维都应该表示同一个词的词频。
      举个例子:
      文档1:今天/有事/,/没办法/去/教室/上课/了
      文档2:真想/去/教室/上课/,/但是/今天/有事/,/去不了/教室/了
      文档1中的词频:[今天:1,有事:1,没办法:1,去:1,教室:1,上课:1,了:1]
      文档2中的词频:[真想:1,去:1,教室:2,上课:1,但是:1, 今天:1,有事:1,去不了:1,了:1]
  • 去掉停用词之后:
    文档1中的词频:[有事:1,没办法:1,去:1,教室:1,上课:1]
    文档2中的词频:[真想:1,去:1,教室:2,上课:1, 有事:1,去不了:1]

    • 直接用上述词频构建每一个文本的词频向量无意义,每一维表示的意思不同,两个向量没有可比性。
    • 构建一致的词频向量:给每一维的词频编码,然后去看每一维的词频向量。
    • 把两个文本中的所有有效词全部编码,对于长文本可以按词频从大到小排序,取前n个关键词按照码值构建词频向量.
      比如:
      文档1中的词频:[有事:1,没办法:1,去:1,教室:1,上课:1]
      文档2中的词频:[真想:1,去:1,教室:2,上课:1, 有事:1,去不了:1]
      所有有效词:比特,去,真想,上课,有事,去不了,没办法
      给所有有效词编码:教室:0,去:1,真想:2,上课:3,有事:4,去不了:5,没办法:6

词频向量

第四步统计词频向量

通过上述词的编码值,构建词频向量
文档1中的词频:[0:1,1:1,2:0,3:1,4:1,5:0,6:1]
文档2中的词频:[0:2,1:1,2:1,3:1, 4:1,5:1,6:0]
文档1词频向量:[1,1,0,1,1,0,1]
文档2词频向量:[2,1,1,1, 1,1,0]

相似度计算

第五步计算余弦相似度

余弦相似度,是通过计算两个向量的夹角余弦值来评估他们的相似度:

其它常用计算向量相似度的方式:欧几里得距离,jaccard系数(类似余弦相似度),曼哈顿距离(类似欧几里得距离)。

应用

论文检测,文本分类。

基于词频的文本相似度相关推荐

  1. 【NLP实战】基于ALBERT的文本相似度计算

    实战是学习一门技术最好的方式,也是深入了解一门技术唯一的方式.因此,NLP专栏推出了实战专栏,让有兴趣的同学在看文章之余也可以自己动手试一试. ALBERT是一个比BERT要轻量,效果更好的模型,本篇 ...

  2. 基于Java的文本相似度计算

    目录 1. 前言 1.1 开发环境: 1.2 初步设想 1.3 参考资料 2. HanLP 2.1 在Java中使用HanLP库 2.2 分词函数 3. 双文本对比 3.1 步骤分解 3.2 完整代码 ...

  3. 基于Gensim计算文本相似度

    实现方案1 import jieba from gensim import corpora, models, similarities if __name__ == '__main__':base_d ...

  4. 余弦定理的应用:基于文字的文本相似度计算

    最近由于工作项目,需要判断两个txt文本是否相似,于是开始在网上找资料研究,因为在程序中会把文本转换成String再做比较,所以最开始找到了这篇关于 距离编辑算法 Blog写的非常好,受益匪浅. 于是 ...

  5. 7-44 基于词频的文件相似度 (30 分)(思路加详解+set容器简便做法)兄弟们冲呀呀呀呀呀 今天你AC了吗

    一:题目 实现一种简单原始的文件相似度计算,即以两文件的公共词汇占总词汇的比例来定义相似度.为简化问题,这里不考虑中文(因为分词太难了),只考虑长度不小于3.且不超过10的英文单词,长度超过10的只考 ...

  6. PAT 基于词频的文件相似度 (set) -- 解题报告

    解题思路 每个文件内的单词存放到单独的一个 set 中.询问时直接遍历其中一个 set(必须是 size 较小的那个,否则会超时在最后一个测试点),用 count() 查找另一个 set 中存不存在这 ...

  7. 基于隐马尔科夫模型文本相似度问题研究

    文本相似度是表示两个或者多个文本之间匹配程度的一个度量参数,相似度数值大,说明文本相似度高:反之文件相似程度就低.文本相似度的精确计算问题是进行信息处理的关键. 在如今信息技术飞速发展的互联网时代,文 ...

  8. 从0到1,了解NLP中的文本相似度

    本文由云+社区发表 作者:netkiddy 导语 AI在2018年应该是互联网界最火的名词,没有之一.时间来到了9102年,也是项目相关,涉及到了一些AI写作相关的功能,为客户生成一些素材文章.但是, ...

  9. 从0到1,了解NLP中的文本相似度 1

    导语 AI在2018年应该是互联网界最火的名词,没有之一.时间来到了9102年,也是项目相关,涉及到了一些AI写作相关的功能,为客户生成一些素材文章.但是,AI并不一定最懂你,客户对于AI写出来的文章 ...

最新文章

  1. python有强大吗_python有多强大
  2. [Buzz Today]2012.08.08
  3. C++的const限定符
  4. 【POJ 3614 Sunscreen】贪心 优先级队列
  5. 【Elasticsearch】es 7 Failed to parse value [analyzed] as only [true] or [false] are allowed
  6. [插头DP自我总结]
  7. python接口自动化(六)--发送get请求接口(详解)
  8. 【多线程】CAS乐观锁
  9. bzoj 4260: Codechef REBXOR(01字典树)
  10. 各厂商服务器存储默认管理口登录信息(默认IP、用户名、密码)收集
  11. 民间借贷、网贷vs信用卡
  12. 发现了一个开源的sip软电话项目(C#)
  13. cpu控制器如何工作
  14. c语言 菜单选择,设计一通过 c语言 个简单实用的菜单,通过菜单选择不同的菜单项并实现相应的功能。...
  15. stm8s001 - SWIM复用为ADC输入 ADC电压值不准确?
  16. 超级App+快应用:移动应用研发新思路
  17. 20190729 现代田园女权
  18. samb连接linux服务器,在Windows上访问Linux下的Samba服务器的方法
  19. css box-shadow 使用
  20. 苹果笔记本包_通勤收纳新体验:tomtoc苹果电脑包

热门文章

  1. gin框架学习三之gorm
  2. 有道云笔记-windows10部分系统无法安装、闪退、崩溃现象处理办法
  3. aBey区块链联合创始人Ciprian Pungila博士在2019年马耳他区块链峰会上发表开幕演讲
  4. MT6169芯片资料,MT6169射频应用笔记及布局指南
  5. 苹果设计组件库_建立设计系统和组件库
  6. 计算机事实性知识,在信息时代,有许多可以处理和存储大量信息的计算机系统。信息包括数据和事实。数据、事实、信息和知识之间存在着关系...
  7. 高通Camera 驱动调试要点(二)
  8. 混沌与秩序服务器无响应,混沌与秩序2无法连接服务器是什么原因
  9. 次世代游戏制作工作流程
  10. 佟强——对外经济贸易大学信息学院