详解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实现比较两段文本不同之处的方法
May 30 Python
Python正则表达式实现截取成对括号的方法
Jan 06 Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 Python
简单实现Python爬取网络图片
Apr 01 Python
对numpy中的数组条件筛选功能详解
Jul 02 Python
如何在django里上传csv文件并进行入库处理的方法
Jan 02 Python
使用Python的Turtle库绘制森林的实例
Dec 18 Python
Django 项目通过加载不同env文件来区分不同环境
Feb 17 Python
Python实现屏幕录制功能的代码
Mar 02 Python
Python内存映射文件读写方式
Apr 24 Python
python Cartopy的基础使用详解
Nov 01 Python
OpenCV实现常见的四种图像几何变换
Apr 01 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
在WAMP环境下搭建ZendDebugger php调试工具的方法
2011/07/18 PHP
一个严格的PHP Session会话超时时间设置方法
2014/06/10 PHP
学习php开源项目的源码指南
2014/12/21 PHP
写出更好的JavaScript之undefined篇(上)
2009/11/22 Javascript
Javascript 中的 && 和 || 使用小结
2010/04/25 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
jQuery移除元素自动解绑事件实现思路及代码
2014/05/31 Javascript
简单谈谈javascript中this的隐式绑定
2016/02/22 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
2016/07/07 Javascript
JS获取input file绝对路径的方法(推荐)
2016/08/02 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
浅析Javascript中双等号(==)隐性转换机制
2017/10/27 Javascript
js实现图片上传并预览功能
2018/08/06 Javascript
vue 实现小程序或商品秒杀倒计时
2019/04/14 Javascript
Django模板继承 extend标签实例代码详解
2019/05/16 Javascript
layui实现鼠标移动到单元格上显示数据的方法
2019/09/11 Javascript
Nautil 中使用双向数据绑定的实现
2019/10/02 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
基于canvas实现手写签名(vue)
2020/05/21 Javascript
[54:41]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VGJ.T VS paiN
2018/03/31 DOTA
python中的一些类型转换函数小结
2013/02/10 Python
在Python中用split()方法分割字符串的使用介绍
2015/05/20 Python
Python编程之字符串模板(Template)用法实例分析
2017/07/22 Python
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
python中@property和property函数常见使用方法示例
2019/10/21 Python
执行Python程序时模块报错问题
2020/03/26 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
2020/05/10 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
Mytheresa美国官网:德国知名的女性奢侈品电商
2017/05/27 全球购物
司机岗位职责说明书
2014/07/29 职场文书
告知书格式
2015/07/01 职场文书
2016年春季运动会加油稿
2015/07/22 职场文书
新店开业策划方案怎么书写?
2019/07/05 职场文书
Pandas加速代码之避免使用for循环
2021/05/30 Python
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
2021/06/23 Python