详解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 psutil模块简单使用实例
Apr 28 Python
在Python的一段程序中如何使用多次事件循环详解
Sep 07 Python
python交互式图形编程实例(三)
Nov 17 Python
Python解决两个整数相除只得到整数部分的实例
Nov 10 Python
在Pandas中给多层索引降级的方法
Nov 16 Python
Python中的类与类型示例详解
Jul 10 Python
Django工程的分层结构详解
Jul 18 Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
Nov 25 Python
Python内置异常类型全面汇总
May 28 Python
基于Python爬取股票数据过程详解
Oct 21 Python
python 实现围棋游戏(纯tkinter gui)
Nov 13 Python
python中用ctypes模拟点击的实例讲解
Nov 26 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编写的导航条程序
2006/10/09 PHP
php mysql数据库操作分页类
2008/06/04 PHP
在PHP中利用wsdl创建标准webservice的实现代码
2011/12/07 PHP
在UpdatePanel内jquery easyui效果失效的解决方法
2010/04/11 Javascript
js的正则test,match,exec详细解析
2014/01/29 Javascript
浅谈jquery回调函数callback的使用
2015/01/30 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
2016/05/26 Javascript
Vue.js 和 MVVM 的注意事项
2016/11/07 Javascript
解析如何利用iframe标签以及js制作时钟
2016/12/08 Javascript
javascript垃圾收集机制的原理分析
2016/12/08 Javascript
详解JS中的attribute属性
2017/04/25 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
layer.open 按钮的点击事件关闭方法
2018/08/17 Javascript
Vue CLI 3搭建vue+vuex最全分析(推荐)
2018/09/27 Javascript
详解新手使用vue-router传参时注意事项
2019/06/06 Javascript
Flask 上传自定义头像的实例详解
2020/01/09 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
Python 开发工具通过 agent 代理使用的方法
2020/09/27 Python
python使用ctypes库调用DLL动态链接库
2020/10/22 Python
详解CSS3的opacity属性设置透明效果的用法
2016/05/09 HTML / CSS
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
军训自我鉴定怎么写
2014/02/13 职场文书
绿色家庭事迹材料
2014/05/01 职场文书
家长学校工作方案
2014/05/07 职场文书
奥林匹克运动会口号
2014/06/19 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
员工试用期自我鉴定范文
2014/09/15 职场文书
投标承诺函格式
2015/01/21 职场文书
2015高考寄语集锦
2015/02/27 职场文书
基于python的matplotlib制作双Y轴图
2021/04/20 Python
SQL Server中使用判断语句(IF ELSE/CASE WHEN )案例
2021/07/07 SQL Server
SQL Server表分区删除详情
2021/10/16 SQL Server
flex弹性布局详解
2022/03/20 HTML / CSS