详解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根据开头和结尾字符串获取中间字符串的方法
Mar 26 Python
使用Python读写文本文件及编写简单的文本编辑器
Mar 11 Python
Python中属性和描述符的正确使用
Aug 23 Python
python3利用smtplib通过qq邮箱发送邮件方法示例
Dec 03 Python
python 根据时间来生成唯一的字符串方法
Jan 14 Python
python获取txt文件词向量过程详解
Jul 05 Python
python爬虫神器Pyppeteer入门及使用
Jul 13 Python
Python 捕获代码中所有异常的方法
Aug 03 Python
python获取时间戳的实现示例(10位和13位)
Sep 23 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
Mar 03 Python
如何在C++中调用Python
May 21 Python
Python 视频画质增强
Apr 28 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
世界收音机发展史
2021/03/01 无线电
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
2015/10/21 PHP
php读取torrent种子文件内容的方法(测试可用)
2016/05/03 PHP
tp5 实现列表数据根据状态排序
2019/10/18 PHP
ExtJS GTGrid 简单用户管理
2009/07/01 Javascript
jquery全选/全不选/反选另一种实现方法(配合原生js)
2013/04/07 Javascript
js 表单提交后按钮变灰的实例代码
2013/08/16 Javascript
JavaScript函数详解
2015/02/27 Javascript
JavaScript中诡异的delete操作符
2015/03/12 Javascript
javascript中使用new与不使用实例化对象的区别
2015/06/22 Javascript
jquery实现动静态条形统计图
2015/08/17 Javascript
基于jQuery实现动态搜索显示功能
2016/05/05 Javascript
jQuery通用的全局遍历方法$.each()用法实例
2016/07/04 Javascript
浅谈jquery fullpage 插件增加头部和版权的方法
2018/03/20 jQuery
Node.js控制台彩色输出的方法与原理实例详解
2019/12/01 Javascript
[01:00:44]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第三局
2016/03/04 DOTA
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
python抓取文件夹的所有文件
2018/02/27 Python
浅析Python装饰器以及装饰器模式
2018/05/28 Python
解决Pycharm下面出现No R interpreter defined的问题
2018/10/29 Python
python实现ip地址查询经纬度定位详解
2019/08/30 Python
python系列 文件操作的代码
2019/10/06 Python
基于python求两个列表的并集.交集.差集
2020/02/10 Python
python pandas dataframe 去重函数的具体使用
2020/07/20 Python
Python读取ini配置文件传参的简单示例
2021/01/05 Python
CSS3实现的闪烁跳跃进度条示例(附源码)
2013/08/19 HTML / CSS
HTML5 Canvas玩转酷炫大波浪进度图效果实例(附demo)
2016/12/14 HTML / CSS
AmazeUI导航的示例代码
2020/08/14 HTML / CSS
实习生个人的自我评价
2013/12/08 职场文书
工程造价专业大学生职业生涯规划书
2014/01/18 职场文书
校园广播稿500字
2014/02/04 职场文书
工艺员岗位职责
2014/02/11 职场文书
小学校园之星事迹材料
2014/05/16 职场文书
2014财务年度工作总结
2014/11/11 职场文书
年终工作总结范文
2019/06/20 职场文书
导游词之江苏同里古镇
2019/11/18 职场文书