详解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读取oracle函数返回值
Jul 18 Python
Python脚本获取操作系统版本信息
Dec 17 Python
Python2.7编程中SQLite3基本操作方法示例
Aug 09 Python
快速入门python学习笔记
Dec 06 Python
python实现验证码识别功能
Jun 07 Python
pandas 将索引值相加的方法
Nov 15 Python
python实现图书借阅系统
Feb 20 Python
python实现大文本文件分割
Jul 22 Python
在python中用url_for构造URL的方法
Jul 25 Python
python3安装OCR识别库tesserocr过程图解
Apr 02 Python
Python爬虫requests库多种用法实例
May 28 Python
教你如何用python开发一款数字推盘小游戏
Apr 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
PHP获取文件绝对路径的代码(上一级目录)
2011/05/29 PHP
php多维数组去掉重复值示例分享
2014/03/02 PHP
PHP输出日历表代码实例
2015/03/27 PHP
PHP折半(二分)查找算法实例分析
2018/05/12 PHP
Yii2压缩PHP中模板代码的输出问题
2018/08/28 PHP
jquery应该如何来设置改变按钮input的onclick事件
2012/12/10 Javascript
javaScript中with函数用法实例分析
2015/06/08 Javascript
常用的Javascript数据验证插件
2015/08/04 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
模拟javascript中的sort排序(简单实例)
2016/08/17 Javascript
JS中this上下文对象使用方式
2016/10/09 Javascript
Vue生命周期示例详解
2017/04/12 Javascript
利用JS对iframe父子(内外)页面进行操作的方法教程
2017/06/15 Javascript
JavaScript数据类型的存储方法详解
2017/08/25 Javascript
EasyUI Tree树组件无限循环的解决方法
2017/09/27 Javascript
webpack external模块的具体使用
2018/03/10 Javascript
分析javascript原型及原型链
2018/03/18 Javascript
ES6关于Promise的用法详解
2018/05/07 Javascript
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
jQuery中each和js中forEach的区别分析
2019/02/27 jQuery
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
Django+Ajax+jQuery实现网页动态更新的实例
2018/05/28 Python
python os.path模块常用方法实例详解
2018/09/16 Python
Python反爬虫技术之防止IP地址被封杀的讲解
2019/01/09 Python
欧舒丹加拿大官网:L’Occitane加拿大
2017/10/29 全球购物
Order by的几种用法
2013/06/16 面试题
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
Boolean b = new Boolean(“abcde”); 会编译错误码
2013/11/27 面试题
法律专业实习鉴定
2013/12/22 职场文书
小学学校门卫岗位职责
2014/08/03 职场文书
优秀纪检干部材料
2014/08/27 职场文书
大三学生英语考试作弊检讨书
2015/01/01 职场文书
庐山导游词
2015/02/03 职场文书
2015年仓管员工作总结
2015/04/21 职场文书
初中家长意见
2015/06/03 职场文书