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中的reduce内建函数使用方法指南
Aug 31 Python
django admin添加数据自动记录user到表中的实现方法
Jan 05 Python
Python装饰器(decorator)定义与用法详解
Feb 09 Python
详解python--模拟轮盘抽奖游戏
Apr 12 Python
python反编译学习之字节码详解
May 19 Python
python多线程下信号处理程序示例
May 31 Python
python 使用plt画图,去除图片四周的白边方法
Jul 09 Python
关于tf.reverse_sequence()简述
Jan 20 Python
Django用户登录与注册系统的实现示例
Jun 03 Python
Selenium webdriver添加cookie实现过程详解
Aug 12 Python
matplotlib 多个图像共用一个colorbar的实现示例
Sep 10 Python
Django中日期时间型字段进行年月日时分秒分组统计
Nov 27 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 文件缓存函数
2011/10/08 PHP
php递归使用示例(php递归函数)
2014/02/14 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
2015/03/24 PHP
php生成图片缩略图的方法
2015/04/07 PHP
PHP-FPM之Chroot执行环境详解
2015/08/03 PHP
php版微信小店调用api示例代码
2016/11/12 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
2018/05/12 PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
2019/06/14 PHP
Laravel Eloquent ORM 多条件查询的例子
2019/10/10 PHP
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
2011/08/28 Javascript
在Iframe中获取父窗口中表单的值(示例代码)
2013/11/22 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
2013/11/26 Javascript
基于Jquery实现键盘按键监听
2014/05/11 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
原生js制作日历控件实例分享
2016/04/06 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
html判断当前页面是否在iframe中的实例
2016/11/30 Javascript
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
jsonp实现百度下拉框功能的方法分析
2019/05/10 Javascript
VUE-ElementUI 自定义Loading图操作
2020/11/11 Javascript
python selenium自动上传有赞单号的操作方法
2018/07/05 Python
python使用百度文字识别功能方法详解
2019/07/23 Python
Tensorflow 实现分批量读取数据
2020/01/04 Python
关于python 的legend图例,参数使用说明
2020/04/17 Python
使用CSS3实现input多选框自定义样式的方法示例
2019/07/19 HTML / CSS
Saucony澳大利亚官网:美国跑鞋品牌,运动鞋中的劳斯莱斯
2018/05/05 全球购物
加拿大领先家居家具网上购物:Aosom.ca
2020/05/27 全球购物
Java中各种基本数据类型的默认值都是什么
2016/12/22 面试题
仓库管理员岗位职责
2014/03/19 职场文书
教师党员学习群众路线心得体会
2014/11/04 职场文书
2014年文艺部工作总结
2014/11/17 职场文书
幼儿教师继续教育培训心得体会
2016/01/19 职场文书
2019求职信:应届生求职信范文
2019/04/24 职场文书
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL
分享一个vue实现的记事本功能案例
2022/04/11 Vue.js