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正则表达式去掉数字中的逗号(python正则匹配逗号)
Dec 25 Python
python实现带声音的摩斯码翻译实现方法
May 20 Python
Python生成随机数组的方法小结
Apr 15 Python
python数据抓取分析的示例代码(python + mongodb)
Dec 25 Python
对python列表里的字典元素去重方法详解
Jan 21 Python
教你如何编写、保存与运行Python程序的方法
Jul 12 Python
python自动生成model文件过程详解
Nov 02 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
Nov 08 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
Feb 21 Python
Python configparser模块应用过程解析
Aug 14 Python
python 获取字典特定值对应的键的实现
Sep 29 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
Jan 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 memcache扩展的三种安装方法
2009/04/26 PHP
PHP session_start()问题解疑(详细介绍)
2013/07/05 PHP
PHP使用mysqli操作MySQL数据库的简单方法
2017/02/04 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
2019/05/09 PHP
Jquery 自定义动画概述及示例
2013/03/29 Javascript
Js日期选择器并自动加入到输入框中示例代码
2013/08/02 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
jQuery实现延迟跳转的方法
2015/06/05 Javascript
基于javascript数组实现图片轮播
2016/05/02 Javascript
老生常谈javascript变量的命名规范和注释
2016/09/29 Javascript
使用微信小程序开发前端【快速入门】
2016/12/05 Javascript
javascript基础知识讲解
2017/01/11 Javascript
Bootstrap超大屏幕的实现代码
2017/03/22 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
利用node.js爬取指定排名网站的JS引用库详解
2017/07/25 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
微信小程序视图template模板引用的实例详解
2017/09/20 Javascript
vue自定义全局组件(自定义插件)的用法
2018/01/30 Javascript
JS中touchstart事件与click事件冲突的解决方法
2018/03/12 Javascript
讲解vue-router之命名路由和命名视图
2018/05/28 Javascript
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
2018/08/09 jQuery
微信小程序之事件交互操作实例分析
2018/12/03 Javascript
微信小程序外卖选购页实现切换分类与数量加减功能案例
2019/01/15 Javascript
Vue实现导航栏点击当前标签变色功能
2020/08/19 Javascript
Vue Router history模式的配置方法及其原理
2019/05/30 Javascript
微信小程序实现锚点功能
2019/11/20 Javascript
vue中用 async/await 来处理异步操作
2020/07/18 Javascript
Python中if __name__ == "__main__"详细解释
2014/10/21 Python
python实现2048小游戏
2015/03/30 Python
CSS3教程:边框属性border的极致应用
2009/04/02 HTML / CSS
英国邮购活的植物主要供应商:Gardening Direct
2019/01/28 全球购物
如何进行Linux分区优化
2013/02/12 面试题
优秀党支部事迹材料
2014/01/14 职场文书
个人四风问题整改措施
2014/10/24 职场文书
Ajax是什么?Ajax高级用法之Axios技术
2021/04/21 Javascript