详解Python 字符串相似性的几种度量方法


Posted in Python onAugust 29, 2019

字符串的相似性比较应用场合很多,像拼写纠错、文本去重、上下文相似性等。

评价字符串相似度最常见的办法就是:把一个字符串通过插入、删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数,这种就是编辑距离(edit distance)度量方法,也称为Levenshtein距离。海明距离是编辑距离的一种特殊情况,只计算等长情况下替换操作的编辑次数,只能应用于两个等长字符串间的距离度量。

其他常用的度量方法还有 Jaccard distance、J-W距离(Jaro?Winkler distance)、余弦相似性(cosine similarity)、欧氏距离(Euclidean distance)等。

python-Levenshtein 使用

使用 pip install python-Levenshtein 指令安装 Levenshtein

# -*- coding: utf-8 -*-
 
import difflib
# import jieba
import Levenshtein
 
str1 = "我的骨骼雪白 也长不出青稞"
str2 = "雪的日子 我只想到雪中去si"
 
# 1. difflib
seq = difflib.SequenceMatcher(None, str1,str2)
ratio = seq.ratio()
print 'difflib similarity1: ', ratio
 
# difflib 去掉列表中不需要比较的字符
seq = difflib.SequenceMatcher(lambda x: x in ' 我的雪', str1,str2)
ratio = seq.ratio()
print 'difflib similarity2: ', ratio
 
# 2. hamming距离,str1和str2长度必须一致,描述两个等长字串之间对应位置上不同字符的个数
# sim = Levenshtein.hamming(str1, str2)
# print 'hamming similarity: ', sim
 
# 3. 编辑距离,描述由一个字串转化成另一个字串最少的操作次数,在其中的操作包括 插入、删除、替换
sim = Levenshtein.distance(str1, str2)
print 'Levenshtein similarity: ', sim
 
# 4.计算莱文斯坦比
sim = Levenshtein.ratio(str1, str2)
print 'Levenshtein.ratio similarity: ', sim
 
# 5.计算jaro距离
sim = Levenshtein.jaro(str1, str2 )
print 'Levenshtein.jaro similarity: ', sim
 
# 6. Jaro?Winkler距离
sim = Levenshtein.jaro_winkler(str1 , str2 )
print 'Levenshtein.jaro_winkler similarity: ', sim

输出:

difflib similarity1:  0.246575342466
difflib similarity2:  0.0821917808219
Levenshtein similarity:  33
Levenshtein.ratio similarity:  0.27397260274
Levenshtein.jaro similarity:  0.490208958959
Levenshtein.jaro_winkler similarity:  0.490208958959

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用logging模块发送邮件代码示例
Jan 18 Python
Python实现二维数组输出为图片
Apr 03 Python
Python查看微信撤回消息代码
Jun 07 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
Jul 10 Python
Python3爬楼梯算法示例
Mar 04 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
Apr 26 Python
Python time库基本使用方法分析
Dec 13 Python
tensorflow 模型权重导出实例
Jan 24 Python
Python3爬虫中Splash的知识总结
Jul 10 Python
利用Python pandas对Excel进行合并的方法示例
Nov 04 Python
python实现登录与注册系统
Nov 30 Python
Python OpenCV实现图像模板匹配详解
Apr 07 Python
python多线程同步之文件读写控制
Feb 25 #Python
python线程中的同步问题及解决方法
Aug 29 #Python
python实现H2O中的随机森林算法介绍及其项目实战
Aug 29 #Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
Aug 29 #Python
深入了解python中元类的相关知识
Aug 29 #Python
Django shell调试models输出的SQL语句方法
Aug 29 #Python
python实现文件的分割与合并
Aug 29 #Python
You might like
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
2011/08/23 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
jQuery前台数据获取实现代码
2011/03/16 Javascript
js代码验证手机号码和电话号码是否合法
2015/07/30 Javascript
JavaScript基本数据类型及值类型和引用类型
2015/08/25 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
如何检测JavaScript的各种类型
2016/07/30 Javascript
BootStrap Datetimepicker 汉化的实现代码
2017/02/10 Javascript
Vue.js实现可排序的表格组件功能示例
2019/02/19 Javascript
LayUI动态设置checkbox不显示的解决方法
2019/09/02 Javascript
layui 动态设置checbox 选中状态的例子
2019/09/02 Javascript
vue组件中节流函数的失效的原因和解决方法
2020/12/02 Vue.js
[06:16]第十四期-国士无双绝地翻盘之撼地神牛
2014/06/24 DOTA
使用Python发送邮件附件以定时备份MySQL的教程
2015/04/25 Python
Python中集合的内建函数和内建方法学习教程
2015/08/19 Python
基于Python和Scikit-Learn的机器学习探索
2017/10/16 Python
详解django2中关于时间处理策略
2019/03/06 Python
使用Bazel编译TensorBoard教程
2020/02/15 Python
django 利用Q对象与F对象进行查询的实现
2020/05/15 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
2020/09/02 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
2021/03/02 Python
CSS3让登陆面板3D旋转起来
2016/05/03 HTML / CSS
如何用canvas实现在线签名的示例代码
2018/07/10 HTML / CSS
法国时尚童装网站:Melijoe
2016/08/10 全球购物
会计系个人求职信范文分享
2013/12/20 职场文书
大学生演讲稿
2014/04/25 职场文书
我的中国梦演讲稿500字
2014/08/19 职场文书
安全责任书范文
2014/08/25 职场文书
歌咏比赛口号大全
2015/12/25 职场文书
老舍《猫》教学反思
2016/02/17 职场文书
创业计划书之青年旅馆
2019/09/23 职场文书
LayUI+Shiro实现动态菜单并记住菜单收展的示例
2021/05/06 Javascript
sql中mod()函数取余数的用法
2021/05/29 SQL Server
对讲机知识
2022/04/07 无线电
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript