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程序中操作文件之flush()方法的使用教程
May 24 Python
python list排序的两种方法及实例讲解
Mar 20 Python
Python+Turtle动态绘制一棵树实例分享
Jan 16 Python
使用Flask集成bootstrap的方法
Jul 24 Python
对pandas中时间窗函数rolling的使用详解
Nov 28 Python
Django框架 querySet功能解析
Sep 04 Python
python 实现查询Neo4j多节点的多层关系
Dec 23 Python
pymysql之cur.fetchall() 和cur.fetchone()用法详解
May 15 Python
在pycharm中关掉ipython console/PyDev操作
Jun 09 Python
Python爬虫如何应对Cloudflare邮箱加密
Jun 24 Python
浅析Python 多行匹配模式
Jul 24 Python
Python request中文乱码问题解决方案
Sep 17 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来自动调用不同服务器上的flash
2006/10/09 PHP
php面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
php采集文章中的图片获取替换到本地(实现代码)
2013/07/08 PHP
php使用preg_match()函数验证ip地址的方法
2017/01/07 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
详解PHP文件的自动加载(autoloading)
2018/02/04 PHP
php中curl和soap方式请求服务超时问题的解决
2018/06/11 PHP
一些经常会用到的Javascript检测函数
2010/05/31 Javascript
指定位置如果有图片显示图片,无图片显示广告的JS
2010/06/05 Javascript
JavaScript 一道字符串分解的题目
2011/08/03 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
JSON 数字排序多字段排序介绍
2013/09/18 Javascript
js实现俄罗斯方块小游戏分享
2014/01/31 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
2015/05/26 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
2015/08/12 Javascript
JavaScript浏览器对象之一Window对象详解
2016/06/03 Javascript
node.js的事件机制
2017/02/08 Javascript
Angular中ng-options下拉数据默认值的设定方法
2017/06/21 Javascript
深入理解jquery的$.extend()、$.fn和$.fn.extend()
2017/07/08 jQuery
详解angularjs跨页面传参遇到的一些问题
2018/11/01 Javascript
vue中slot(插槽)的介绍与使用
2018/11/12 Javascript
Vuex 使用 v-model 配合 state的方法
2018/11/13 Javascript
自动化Nginx服务器的反向代理的配置方法
2015/06/28 Python
详解Django框架中用户的登录和退出的实现
2015/07/23 Python
Python使用os模块和fileinput模块来操作文件目录
2016/01/19 Python
python处理csv数据动态显示曲线实例代码
2018/01/23 Python
Carolina工作鞋官网:Carolina Footwear
2019/03/14 全球购物
人力资源经理自我评价
2014/01/04 职场文书
驾驶员岗位职责
2014/01/29 职场文书
实习会计求职自荐信范文
2014/03/10 职场文书
2016年学校“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
react合成事件与原生事件的相关理解
2021/05/13 Javascript
Javascript中async与await的捕捉错误详解
2022/03/03 Javascript
MySQL的索引你了解吗
2022/03/13 MySQL
MySQL索引 高效获取数据的数据结构
2022/05/02 MySQL