Atitit nlp 文本相似性计算

目录

1. 原理编 1

1.1. 4.1基于拼音相似度的汉语模糊搜索算法 2

1.2. (1)最长公共子串(基于词条空间) 2

1.3. 2

1.4. (2)最长公共子序列(基于权值空间、词条空间) 2

1.5. 2

1.6. (3)最少编辑距离法(基于词条空间) 2

1.7. 2

1.8. (4)汉明距离(基于权值空间) 2

1.9. 2

1.10. (5)余弦值(基于权值空间) 2

2. Apache Commons Text库计算文本相似性 3

3. 其他 3

3.1. 相同字符数 3

3.2. 编辑距离(edit distance) 4

3.2.1. 莱文斯坦距离,又称Levenshtein距离 4

3.2.2. Jaro距离 4

4. SimHash  文章相似性计算 4

4.1.1. 定义 4

4.1.2. 应用 5

5. 语义相似性 5

6. 参考: 5

  1. 原理编

TFIDF

TFIDF的方法只能是算一个权重,比较文本相似度最常用的是计算余弦值,利用权重来建模型

可能我没说太明白,是用您说的方法求余弦值来作为相似度,这也只能是两两比较,做不到【批量】

如果只要是有一连串相同字节的就认为是相似, 可以这样: 把2个文件分成N份, 求出每一份的CRC32值(MD5等都行),然后判断这些校验值, 如果有任意2个相等,相似度就加一点.

如果是图像相似度的判断,比如一个人的2张照片,那就麻烦了,涉及到图像特征提取比较.

  1. 4.1基于拼音相似度的汉语模糊搜索算法

最长公共子序列

最小编辑距离算法

5.总结

衡量文本相似度的几种手段:

  1. (1)最长公共子串(基于词条空间)
  2. (2)最长公共子序列(基于权值空间、词条空间)
  3. (3)最少编辑距离法(基于词条空间)
  4. (4)汉明距离(基于权值空间)
  5. (5)余弦值(基于权值空间)
  1. Apache Commons Text库计算文本相似性
  1. 其他

    1. 相同字符数

在传统的字符串比较过程中,我们考虑字符串中每个字符是否相等,并且考虑了字符出现的顺序,如果不考虑字符出现的顺序,我们可以利用两个文本之间相同的字符数量,很简单不再赘述,可以利用common lang中的getFuzzyDistance:

int dis = StringUtils.getFuzzyDistance(term, query, Locale.CHINA);

  1. 编辑距离(edit distance)

    1. 莱文斯坦距离,又称Levenshtein距离

俄罗斯科学家弗拉基米尔·莱文斯坦在1965年提出这个概念。

实现方式

我们可以利用common lang中StringUtils的函数来计算:

int dis = StringUtils.getLevenshteinDistance(s1, s2);

  1. Jaro距离

定义

Jaro Distance也是字符串相似性的一种度量方式,也是一种编辑距离,Jaro 距离越高本文相似性越高;而Jaro–Winkler distance是Jaro Distance的一个变种。据说是用来判定健康记录上两个名字是否相同,也有说是是用于人口普查。从最初其应用我们便可看出其用法和用途,其定义如下

同样我们可以利用common lang中的getJaroWinklerDistance函数来实现,注意这里实现的是Jaro–Winkler distance

double dis = StringUtils.getJaroWinklerDistance(reviewName.toLowerCase(), newsName.toLowerCase())

  1. SimHash  文章相似性计算

    1. 定义

SimHash是一种局部敏感hash,它也是Google公司进行海量网页去重使用的主要算法。
传统的Hash算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上仅相当于伪随机数产生算法。传统的hash算法产生的两个签名,如果原始内容在一定概率下是相等的;如果不相等,除了说明原始内容不相等外,不再提供任何信息,因为即使原始内容只相差一个字节,所产生的签名也很可能差别很大。所以传统的Hash是无法在签名的维度上来衡量原内容的相似度,而SimHash本身属于一种局部敏感哈希算法,它产生的hash签名在一定程度上可以表征原内容的相似度。
我们主要解决的是文本相似度计算,要比较的是两个文章是否相似,当然我们降维生成了hash签名也是用于这个目的。看到这里估计大家就明白了,我们使用的simhash就算把文章中的字符串变成 01 串也还是可以用于计算相似度的,而传统的hash却不行。

我们可以来做个测试,两个相差只有一个字符的文本串,“你妈妈喊你回家吃饭哦,回家罗回家罗” 和 “你妈妈叫你回家吃饭啦,回家罗回家罗”。
通过simhash计算结果为:
1000010010101101111111100000101011010001001111100001001011001011
1000010010101101011111100000101011010001001111100001101010001011
通过传统hash计算为:
0001000001100110100111011011110
1010010001111111110010110011101

通过上面的例子我们可以很清晰的发现simhash的局部敏感性,相似文本只有部分01变化,而hash值很明显,即使变化很小一部分,也会相差很大

  1. 应用

simhash从最一开始用的最多的场景便是大规模文本的去重,对于爬虫从网上爬取的大规模语料数据,我们需要进行预处理,删除重复的文档才能进行后续的文本处理和挖掘,那么利用simhash是一种不错的选择,其计算复杂度和效果都有一个很好的折中。
但是在实际应用过程中,也发现一些badcase,完全无关的文本正好对应成了相同的simhash,精确度并不是很高,而且simhash更适用于较长的文本,但是在大规模语料进行去重时,simhash的计算速度优势还是很不错的。

  1. 语义相似性

在NLP中有时候我们度量两个短文本或者说更直接的两个词语的相似性时,直接通过字面距离是无法实现的,如:中国-北京,意大利-罗马,这两个短语之间的相似距离应该是类似的,因为都是首都与国家的关系;再比如(男人、男孩),(女人、女孩)应该是相同的关系,但是我们看其字面距离都是0。
想要做到语义层面的度量,我们需要用到机器学习建模,而自然语言的问题转化为机器学习的首要问题便是找到一种方法把自然语言的符号数学化。

NLP点滴——文本相似度 - 小琪琪来啦 - 博客园.html

  1. 参考:

文本相似度算法 - chenglinhust的专栏 - 博客频道 - CSDN.NET.htm

paip.判断文本相似度的算法.txt

(9+条消息)Java回炉重造(三)使用Apache Commons Text库计算文本相似性_jaccard相似系数、余弦相似度 - The quiter you become, the more you can hear. - CSDN博客.html

使用simhash以及海明距离判断内容相似程度 - 纪玉奇 - 博客园.html

Atitit nlp 文本相似性计算 目录 1. 原理编 1 1.1. 4.1基于拼音相似度的汉语模糊搜索算法 2 1.2. (1)最长公共子串(基于词条空间) 2 1.3. 2 1.4. (2相关推荐

  1. 计算文本相似度_Python文本相似性计算

    安装simtext库 pip install simtext 上文本相似性计算代码 from simtext import similaritytextA = '批量爬取网页,需要根据网页之间URL的 ...

  2. 文本相似性计算之编辑距离详解

    文本相似性计算之编辑距离详解 概述: 编辑距离(Edit Distance):是一个度量两个字符序列之间差异的字符串度量标准,两个单词之间的编辑距离是将一个单词转换为另一个单词所需的单字符编辑(插入. ...

  3. 用Python计算最长公共子序列和最长公共子串

    如何用Python计算最长公共子序列和最长公共子串 1. 什么是最长公共子序列?什么是最长公共子串? 1.1. 最长公共子序列(Longest-Common-Subsequences,LCS) 最长公 ...

  4. 文本相似性计算--MinHash和LSH算法

    给定N个集合,从中找到相似的集合对,如何实现呢?直观的方法是比较任意两个集合.那么可以十分精确的找到每一对相似的集合,但是时间复杂度是O(n2).此外,假如,N个集合中只有少数几对集合相似,绝大多数集 ...

  5. 关于最长公共子序列问题的空间优化

    /*** 最长公共子序列* 优化了内存空间的使用* 观察到一件事: 每一个元素的计算,只和其在左上, 左边, 上边的三个元素相关* 可以考虑len(x) + 3* 3个变量 定义为leftAbove, ...

  6. 最长公共子序列(O(n)空间优化、O(nlogn)时间优化)

    普通算法 对于求最长公共子序列,最普遍的就是时间复杂度为O(n^2),空间复杂度为O(n*n)算法.重要的是,若要求出最长公共子序列是什么,则必须使用这一种算法,具体代码如下: int dp[maxn ...

  7. [NLP] 文本分类之TextCNN模型原理和实现(超详细)

    1. 模型原理 1.1论文 Yoon Kim在论文(2014 EMNLP) Convolutional Neural Networks for Sentence Classification提出Tex ...

  8. python 编辑距离 2组匹配_Python文本相似性计算之编辑距离详解

    编辑距离 编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一 ...

  9. 求最长公共子序列python_用Python计算最长公共子序列和最长公共子串

    1. 什么是最长公共子序列?什么是最长公共子串? 1.1. 最长公共子序列(Longest-Common-Subsequences,LCS) 最长公共子序列(Longest-Common-Subseq ...

  10. 《跨语言文本相似性检测》第一周—前期调研

    <跨语言文本相似性检测>第一周-前期调研 文本相似度计算在信息检索.数据挖掘.机器翻译.文档复制检测等领域有着广泛的应用. 文本相似性流程 分词-->权重-->选择相应算法 文 ...

最新文章

  1. Android setMovementMethod() 方法
  2. exchange 2010 search mailbox 的幕后强大功能
  3. getBoundingClientRect计算页面元素的offsetLeft、offsetTop
  4. golang beego框架对运行异常的处理
  5. JVM的常用配置参数
  6. 冒死揭秘安利_赵丽颖新剧开播备受争议?冒死安利
  7. SAP 电商云 Spartacus UI B2B checkout 点击 Continue 不能跳转到下一页面
  8. 非常全面的阿里的Java面试题目,涵盖Java基础+高级+架构
  9. 陈常青老师的讲座的笔记
  10. 针对不同手机系统的LBS地图定位解决方案
  11. Urllib3 库详解
  12. 【VTK】装配体Assembly的使用
  13. 盘姬工具箱v1.10最新版 非常实用的工具箱软件
  14. 泛微工作流程管理解决方案(转载)
  15. 浦发银行面试笔试经历
  16. GOM传奇文件目录功能说明
  17. Python查询物理机硬盘、主板、BIOS序列号(用于认证Windows设备)
  18. 二维码扫描+长按识别二维码demo
  19. 申请ssl 验证域名 失败了 中间证书
  20. Centos | 一招解决所有 ImportError: xxx: cannot open shared object file

热门文章

  1. android自动登录_游戏社区App (三):客户端与服务端的加密处理 和 登录
  2. python+php+变量传递,将变量从php传递给python,将python传递给php
  3. copying mysql status_MySQL主从复制延迟原因及处理思路
  4. 实验室计算机系统权限管理规程,计算机辅助建筑设计实验室使用规范(试行)...
  5. HTML中标签的ref属性,itemref(属性) | itemref (attribute)
  6. FindFirstFile
  7. fin.is_open()与fin.open()
  8. 结构体typedef struct和struct
  9. ubuntu 修改ip后,老ip仍然存在的问题
  10. 单机数据库优化的一些实践