详解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中operator模块的操作符使用示例总结
Jun 28 Python
浅谈function(函数)中的动态参数
Apr 30 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
Jun 20 Python
Python tkinter模块中类继承的三种方式分析
Aug 08 Python
Django内容增加富文本功能的实例
Oct 17 Python
python负载均衡的简单实现方法
Feb 04 Python
对python的输出和输出格式详解
Dec 08 Python
python中update的基本使用方法详解
Jul 17 Python
通过python实现windows桌面截图代码实例
Jan 17 Python
python 写函数在一定条件下需要调用自身时的写法说明
Jun 01 Python
浅谈Keras中shuffle和validation_split的顺序
Jun 19 Python
通过实例解析python and和or使用方法
Nov 14 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
关于COOKIE个数与大小的问题
2011/01/17 Javascript
Javascript面向对象扩展库代码分享
2012/03/27 Javascript
JavaScript中创建对象和继承示例解读
2014/02/12 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
javascript简单判断输入内容是否合法的方法
2016/05/11 Javascript
JS Attribute属性操作详解
2016/05/19 Javascript
修改js confirm alert 提示框文字的简单实例
2016/06/10 Javascript
JS求解三元一次方程组值的方法
2017/01/03 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
2017/02/14 Javascript
AngularJS中filter的使用实例详解
2017/08/25 Javascript
浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式)
2018/01/08 Javascript
jQuery实现参数自定义的文字跑马灯效果
2018/08/15 jQuery
详解vue服务端渲染浏览器端缓存(keep-alive)
2018/10/12 Javascript
通过实例讲解JS如何防抖动
2019/06/15 Javascript
python中as用法实例分析
2015/04/30 Python
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
在Python中使用gRPC的方法示例
2018/08/08 Python
Python日志模块logging基本用法分析
2018/08/23 Python
Python实战购物车项目的实现参考
2019/02/20 Python
解决Django Static内容不能加载显示的问题
2019/07/28 Python
wxpython自定义下拉列表框过程图解
2020/02/14 Python
Python descriptor(描述符)的实现
2020/11/15 Python
python 6种方法实现单例模式
2020/12/15 Python
Nisbets爱尔兰:英国最大的厨房和餐饮设备供应商
2019/01/26 全球购物
面向对象编程是如何提高软件开发水平的
2014/05/06 面试题
一套英文Java笔试题面试题
2016/04/21 面试题
技校生自我鉴定
2013/12/08 职场文书
事业单位接收函
2014/01/10 职场文书
动漫专业高职生职业生涯规划书
2014/02/15 职场文书
春季防火方案
2014/05/10 职场文书
2014年工商所工作总结
2014/12/09 职场文书
八一建军节慰问信
2015/02/14 职场文书
行政申诉状范文
2015/05/20 职场文书
2015年新农村建设工作总结
2015/05/22 职场文书
被告代理词范文
2015/05/25 职场文书
小学班主任心得体会
2016/01/07 职场文书