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编写暴力破解FTP密码小工具
Nov 19 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
May 25 Python
详细解读Python中解析XML数据的方法
Oct 15 Python
简单讲解Python编程中namedtuple类的用法
Jun 21 Python
一个基于flask的web应用诞生(1)
Apr 11 Python
Python 文件操作的详解及实例
Sep 18 Python
基于Python中capitalize()与title()的区别详解
Dec 09 Python
transform python环境快速配置方法
Sep 27 Python
通过python爬虫赚钱的方法
Jan 29 Python
python 字典的打印实现
Sep 26 Python
wxPython修改文本框颜色过程解析
Feb 14 Python
Python编写冷笑话生成器
Apr 20 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里得到前天和昨天的日期的代码
2007/08/16 PHP
php中对2个数组相加的函数
2011/06/24 PHP
解析PHP中如何将数组变量写入文件
2013/06/06 PHP
页面乱码问题的根源及其分析
2013/08/09 PHP
JavaScript版代码高亮
2006/06/26 Javascript
JQuery 风格的HTML文本转义
2009/07/01 Javascript
javascript showModalDialog,open取得父窗口的方法
2010/03/10 Javascript
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
jquery 倒计时效果实现秒杀思路
2013/09/11 Javascript
JavaScript中定义函数的三种方法
2015/03/12 Javascript
js焦点文字滚动效果代码分享
2015/08/25 Javascript
JS原型链怎么理解
2016/06/27 Javascript
JS中BOM相关知识点总结(必看篇)
2016/11/22 Javascript
JS克隆,属性,数组,对象,函数实例分析
2016/11/26 Javascript
javascript内存分配原理实例分析
2017/04/10 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
2019/05/14 Javascript
layui复选框的全选与取消实现方法
2019/09/02 Javascript
laydate只显示时分 不显示秒的功能实现方法
2019/09/28 Javascript
js中关于Blob对象的介绍与使用
2019/11/29 Javascript
[03:24]CDEC.Y赛前采访 努力备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
Python实现删除Android工程中的冗余字符串
2015/01/19 Python
python 判断矩阵中每行非零个数的方法
2019/01/26 Python
Python使用dict.fromkeys()快速生成一个字典示例
2019/04/24 Python
图文详解python安装Scrapy框架步骤
2019/05/20 Python
python 进程的几种创建方式详解
2019/08/29 Python
python rolling regression. 使用 Python 实现滚动回归操作
2020/06/08 Python
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
将"引用"作为函数返回值类型的格式、好处和需要遵守的规则
2016/02/09 面试题
社区中秋节活动方案
2014/01/29 职场文书
大学生自我评价200字(4篇)
2014/09/17 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书
Python 内置函数速查表一览
2021/06/02 Python