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实现mysql的单引号字符串过滤方法
Nov 14 Python
Face++ API实现手势识别系统设计
Nov 21 Python
python对视频画框标记后保存的方法
Dec 07 Python
python itchat给指定联系人发消息的方法
Jun 11 Python
将tf.batch_matmul替换成tf.matmul的实现
Jun 18 Python
解析Tensorflow之MNIST的使用
Jun 30 Python
python如何安装下载后的模块
Jul 03 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
Dec 10 Python
python基于OpenCV模板匹配识别图片中的数字
Mar 31 Python
一文搞懂Python Sklearn库使用
Aug 23 Python
asyncio异步编程之Task对象详解
Mar 13 Python
Python 避免字典和元组的多重嵌套问题
Jul 15 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
德生PL660的电路分析和打磨
2021/03/02 无线电
PHP4之COOKIE支持详解
2006/10/09 PHP
PHP生成压缩文件实例
2015/02/07 PHP
PHP读取mssql json数据中文乱码的解决办法
2016/04/11 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
向大师们学习Javascript(视频与PPT)
2009/12/27 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
读jQuery之一(对象的组成)
2011/06/11 Javascript
JAVASCRIPT函数作用域和提前声明 分享
2013/08/22 Javascript
jQuery关于导航条背景切换效果实现示例
2013/09/04 Javascript
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
2013/11/03 Javascript
jQuery学习笔记之jQuery原型属性和方法
2014/06/09 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
2016/01/05 Javascript
微信小程序开发教程-手势解锁实例
2017/01/06 Javascript
详解使用vue脚手架工具搭建vue-webpack项目
2017/05/10 Javascript
vue.js 上传图片实例代码
2017/06/22 Javascript
微信小程序公用参数与公用方法用法示例
2019/01/09 Javascript
vue中 this.$set的用法详解
2019/09/06 Javascript
node运行js获得输出的三种方式示例详解
2020/07/02 Javascript
js+canvas实现图片格式webp/png/jpeg在线转换
2020/08/22 Javascript
pandas 数据实现行间计算的方法
2018/06/08 Python
Flask-Mail用法实例分析
2018/07/21 Python
Python使用OpenPyXL处理Excel表格
2020/07/02 Python
pycharm 关闭search everywhere的解决操作
2021/01/15 Python
纯CSS改变webkit内核浏览器的滚动条样式
2014/04/17 HTML / CSS
西班牙英格列斯百货官网:El Corte Inglés
2016/09/25 全球购物
Europcar德国:全球汽车租赁领域的领导者
2018/08/15 全球购物
后勤人员自我评价怎么写
2013/09/19 职场文书
英文简历中的自我评价用语
2013/12/09 职场文书
食品厂厂长岗位职责
2014/01/30 职场文书
保护动物的标语
2014/06/11 职场文书
穷人该怎么创业?谨记以下几点
2019/07/11 职场文书
Nginx下SSL证书安装部署步骤介绍
2021/12/06 Servers
Android超详细讲解组件ScrollView的使用
2022/03/31 Java/Android
MySQL数据库之存储过程 procedure
2022/06/16 MySQL