python文本数据相似度的度量


Posted in Python onMarch 12, 2018

编辑距离

编辑距离,又称为Levenshtein距离,是用于计算一个字符串转换为另一个字符串时,插入、删除和替换的次数。例如,将'dad'转换为'bad'需要一次替换操作,编辑距离为1。

nltk.metrics.distance.edit_distance函数实现了编辑距离。

from nltk.metrics.distance import edit_distance

str1 = 'bad'
str2 = 'dad'
print(edit_distance(str1, str2))

N元语法相似度

n元语法只是简单地表示文本中n个标记的所有可能的连续序列。n元语法具体是这样的

import nltk

#这里展示2元语法
text1 = 'Chief Executive Officer'

#bigram考虑匹配开头和结束,所有使用pad_right和pad_left
ceo_bigrams = nltk.bigrams(text1.split(),pad_right=True,pad_left=True)

print(list(ceo_bigrams))
[(None, 'Chief'), ('Chief', 'Executive'), 
('Executive', 'Officer'), ('Officer', None)]

2元语法相似度计算

import nltk

#这里展示2元语法
def bigram_distance(text1, text2):
  #bigram考虑匹配开头和结束,所以使用pad_right和pad_left
  text1_bigrams = nltk.bigrams(text1.split(),pad_right=True,pad_left=True)
  
  text2_bigrams = nltk.bigrams(text2.split(), pad_right=True, pad_left=True)
  
  #交集的长度
  distance = len(set(text1_bigrams).intersection(set(text2_bigrams)))
  
  return distance


text1 = 'Chief Executive Officer is manager'

text2 = 'Chief Technology Officer is technology manager'

print(bigram_distance(text1, text2)) #相似度为3

jaccard相似性

jaccard距离度量的两个集合的相似度,它是由 (集合1交集合2)/(结合1交结合2)计算而来的。

实现方式

from nltk.metrics.distance import jaccard_distance

#这里我们以单个的字符代表文本
set1 = set(['a','b','c','d','a'])
set2 = set(['a','b','e','g','a'])

print(jaccard_distance(set1, set2))

0.6666666666666666

masi距离

masi距离度量是jaccard相似度的加权版本,当集合之间存在部分重叠时,通过调整得分来生成小于jaccard距离值。

from nltk.metrics.distance import jaccard_distance,masi_distance

#这里我们以单个的字符代表文本
set1 = set(['a','b','c','d','a'])
set2 = set(['a','b','e','g','a'])

print(jaccard_distance(set1, set2))
print(masi_distance(set1, set2))

0.6666666666666666
0.22000000000000003

余弦相似度

nltk提供了余弦相似性的实现方法,比如有一个词语空间

word_space = [w1,w2,w3,w4]

text1 = 'w1 w2 w1 w4 w1'
text2 = 'w1 w3 w2'

#按照word_space位置,计算每个位置词语出现的次数

text1_vector = [3,1,0,1]
text2_vector = [1,1,1,0]

[3,1,0,1]意思是指w1出现了3次,w2出现了1次,w3出现0次,w4出现1次。

好了下面看代码,计算text1与text2的余弦相似性

from nltk.cluster.util import cosine_distance

text1_vector = [3,1,0,1]
text2_vector = [1,1,1,0]

print(cosine_distance(text1_vector,text2_vector))

0.303689376177

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python GAE、Django导出Excel的方法
Nov 24 Python
python和C语言混合编程实例
Jun 04 Python
linux 下实现python多版本安装实践
Nov 18 Python
python实现将pvr格式转换成pvr.ccz的方法
Apr 28 Python
python+requests+unittest API接口测试实例(详解)
Jun 10 Python
Python实现的多线程同步与互斥锁功能示例
Nov 30 Python
Python识别快递条形码及Tesseract-OCR使用详解
Jul 15 Python
python flask搭建web应用教程
Nov 19 Python
Python如何获取Win7,Win10系统缩放大小
Jan 10 Python
Python对称的二叉树多种思路实现方法
Feb 28 Python
Django使用list对单个或者多个字段求values值实例
Mar 31 Python
Python torch.flatten()函数案例详解
Aug 30 Python
python使用jieba实现中文分词去停用词方法示例
Mar 11 #Python
python实现拓扑排序的基本教程
Mar 11 #Python
Python实现图片尺寸缩放脚本
Mar 10 #Python
TensorFlow平台下Python实现神经网络
Mar 10 #Python
python构建深度神经网络(续)
Mar 10 #Python
python构建深度神经网络(DNN)
Mar 10 #Python
Python使用numpy实现BP神经网络
Mar 10 #Python
You might like
一个简单的PHP验证码实现代码
2014/05/10 PHP
PHP 断点续传实例详解
2017/11/11 PHP
PHP设计模式之委托模式定义与用法简单示例
2018/08/13 PHP
Laravel实现批量更新多条数据
2020/04/06 PHP
js confirm()方法的使用方法实例
2013/07/13 Javascript
js获取php变量的实现代码
2013/08/10 Javascript
js 浏览本地文件夹系统示例代码
2013/10/24 Javascript
基于javascript实现判断移动终端浏览器版本信息
2014/12/09 Javascript
jQuery内容过滤选择器用法分析
2015/02/10 Javascript
JS实现漂亮的淡蓝色滑动门效果代码
2015/09/23 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
input框中的name和id的区别
2016/11/16 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
React操作真实DOM实现动态吸底部的示例
2017/10/23 Javascript
JavaScript中Require调用js的实例分享
2017/10/27 Javascript
详解express + mock让前后台并行开发
2018/06/06 Javascript
前端性能优化建议
2020/09/17 Javascript
JS实现可以用键盘方向键控制的动画
2020/12/11 Javascript
js属性对象的hasOwnProperty方法的使用
2021/02/05 Javascript
python使用rsa加密算法模块模拟新浪微博登录
2014/01/22 Python
python使用chardet判断字符串编码的方法
2015/03/13 Python
python进阶_浅谈面向对象进阶
2017/08/17 Python
python实现批量命名照片
2020/06/18 Python
CSS3制作轮播图的一种方法
2019/11/11 HTML / CSS
台湾饭店和机票预订网站:Expedia台湾
2016/08/05 全球购物
荷兰鞋类购物网站:Donelli
2019/05/24 全球购物
意向书范文
2014/03/31 职场文书
奠基仪式策划方案
2014/05/15 职场文书
银行金融服务方案
2014/06/11 职场文书
煤矿安全生产月活动总结
2014/07/05 职场文书
党员群众路线剖析材料
2014/10/08 职场文书
未婚证明书模板
2014/10/08 职场文书
工程部部长岗位职责
2015/02/12 职场文书
六一儿童节新闻稿
2015/07/17 职场文书
看看如何用Python绘制小米新版天价logo
2021/04/20 Python
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
2021/08/30 Java/Android