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装饰器decorator用法实例
Nov 10 Python
python中redis的安装和使用
Dec 04 Python
django站点管理详解
Dec 12 Python
Python标准库笔记struct模块的使用
Feb 22 Python
利用Python将数值型特征进行离散化操作的方法
Nov 06 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
Jul 19 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
Aug 12 Python
Python编写打字训练小程序
Sep 26 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
Nov 07 Python
python获取整个网页源码的方法
Aug 03 Python
Python-typing: 类型标注与支持 Any类型详解
May 10 Python
python基础之文件处理知识总结
May 23 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
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
php上传中文文件名乱码问题处理方案
2015/02/03 PHP
php自动载入类用法实例分析
2016/06/24 PHP
jquery 年会抽奖程序
2011/12/22 Javascript
jquery全选checkBox功能实现代码(取消全选功能)
2013/12/10 Javascript
基于jquery的simpleValidate简易验证插件
2014/01/31 Javascript
js判断浏览器是否支持html5
2014/08/17 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
js改变embed标签src值的方法
2015/04/10 Javascript
怎么限制input的text里输入的值只能是数字(正则、js)
2016/05/16 Javascript
非常优秀的JS图片轮播插件Swiper的用法
2017/01/03 Javascript
vue-cli入门之项目结构分析
2017/04/20 Javascript
Vue2.x中的父组件传递数据至子组件的方法
2017/05/01 Javascript
js实现图片放大展示效果
2017/08/30 Javascript
vue中echarts3.0自适应的方法
2018/02/26 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
2018/09/18 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
js实现点赞效果
2020/03/16 Javascript
JS forEach跳出循环2种实现方法
2020/06/24 Javascript
python实现dict版图遍历示例
2014/02/19 Python
python使用urlparse分析网址中域名的方法
2015/04/15 Python
python实现自动登录
2018/09/17 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
大学生个人总结的自我评价
2013/10/05 职场文书
个人简历自我评价
2014/02/02 职场文书
地质灾害防治方案
2014/05/14 职场文书
班训口号大全
2014/06/18 职场文书
大学生感恩父母演讲稿
2014/08/28 职场文书
关于成绩下滑的自我检讨书
2014/09/20 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
党员干部学习三严三实心得体会
2016/01/05 职场文书
简单谈谈Python面向对象的相关知识
2021/06/28 Python
浅谈Redis的事件驱动模型
2022/05/30 Redis