详解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中处理字符串之isdecimal()方法的使用
May 20 Python
python实现读取命令行参数的方法
May 22 Python
Python读取键盘输入的2种方法
Jun 16 Python
详解Python 模拟实现生产者消费者模式的实例
Aug 10 Python
python中matplotlib的颜色及线条控制的示例
Mar 16 Python
python实现比较文件内容异同
Jun 22 Python
Python实现删除排序数组中重复项的两种方法示例
Jan 31 Python
深入了解Python iter() 方法的用法
Jul 11 Python
基于python实现从尾到头打印链表
Nov 02 Python
python 实现在shell窗口中编写print不向屏幕输出
Feb 19 Python
Python查找不限层级Json数据中某个key或者value的路径方式
Feb 27 Python
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 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购物车模块功能分析(函数讲解,附源码)
2013/06/25 PHP
ThinkPHP查询返回简单字段数组的方法
2014/08/25 PHP
php面向对象程序设计中self与static的区别分析
2019/05/21 PHP
javascript使用appendChild追加节点实例
2015/01/12 Javascript
jQuery实现简单的文件上传进度条效果
2020/03/26 Javascript
js实现异步循环实现代码
2016/02/16 Javascript
JQUERY表单暂存功能插件分享
2016/02/23 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
20分钟成功编写bootstrap响应式页面 就这么简单
2016/05/12 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
vue.js实现带日期星期的数字时钟功能示例
2018/08/28 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
js实现unicode码字符串与utf8字节数据互转详解
2019/03/21 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
基于JS判断对象是否是数组
2020/01/10 Javascript
Python正则表达式介绍
2012/08/06 Python
Python3基础之条件与循环控制实例解析
2014/08/13 Python
Django的Modelforms用法简介
2019/07/27 Python
Python3 集合set入门基础
2020/02/10 Python
用css3写出气球样式的示例代码
2017/09/11 HTML / CSS
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
卡骆驰新加坡官网:Crocs新加坡
2018/06/12 全球购物
Big Green Smile法国:领先的英国有机和天然产品在线商店
2021/01/02 全球购物
小学语文课后反思精选
2014/04/25 职场文书
迎新生标语大全
2014/10/06 职场文书
公安民警正风肃纪剖析材料
2014/10/10 职场文书
2014年幼儿园教学工作总结
2014/12/04 职场文书
教育实习指导教师评语
2014/12/31 职场文书
2015年医药代表工作总结
2015/04/25 职场文书
2015年环卫处个人工作总结
2015/07/27 职场文书
网络新闻该怎么写?这些写作技巧你都知道吗?
2019/08/26 职场文书
Nginx反向代理多个服务器的实现方法
2021/03/31 Servers
nginx作grpc的反向代理踩坑总结
2021/07/07 Servers
业余无线电通联Q语
2022/02/18 无线电