详解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编程argparse入门浅析
Feb 07 Python
Python面向对象程序设计之继承与多继承用法分析
Jul 13 Python
Django实战之用户认证(用户登录与注销)
Jul 16 Python
python 批量修改/替换数据的实例
Jul 25 Python
启动Atom并运行python文件的步骤
Nov 09 Python
Python实现二叉树的常见遍历操作总结【7种方法】
Mar 06 Python
Python面向对象程序设计之类的定义与继承简单示例
Mar 18 Python
django 消息框架 message使用详解
Jul 22 Python
pytorch中获取模型input/output shape实例
Dec 30 Python
Python文件时间操作步骤代码详解
Apr 13 Python
python中有函数重载吗
May 28 Python
TensorFlow Autodiff自动微分详解
Jul 06 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
Discuz!X中SESSION机制实例详解
2015/09/23 PHP
thinkPHP订单数字提醒功能的实现方法
2016/12/01 PHP
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
20条学习javascript的编程规范的建议
2014/11/28 Javascript
jQuery获取URL请求参数的方法
2015/07/18 Javascript
详解jQuery中的元素的属性和相关操作
2015/08/14 Javascript
Vue.js每天必学之过渡与动画
2016/09/06 Javascript
jQuery的事件预绑定
2016/12/05 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
基于JavaScript实现的快速排序算法分析
2017/04/14 Javascript
ES6学习教程之模板字符串详解
2017/10/09 Javascript
详解React native fetch遇到的坑
2018/08/30 Javascript
微信小程序按钮点击跳转页面详解
2019/05/06 Javascript
js实现随机div颜色位置 类似满天星效果
2019/10/24 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
JavaScript多种图形实现代码实例
2020/06/28 Javascript
JS实现简易日历效果
2021/01/25 Javascript
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
python学习笔记:字典的使用示例详解
2014/06/13 Python
python中的多重继承实例讲解
2014/09/28 Python
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
Python实现PS滤镜功能之波浪特效示例
2018/01/26 Python
详解HTML5.2版本带来的修改
2020/05/06 HTML / CSS
美国知名玩具品牌:Melissa & Doug
2016/08/16 全球购物
幼师自荐信
2013/10/26 职场文书
《孔子拜师》教学反思
2014/02/24 职场文书
公民授权委托书
2014/10/15 职场文书
婚庆答谢词
2015/01/04 职场文书
邀请函的格式
2015/01/30 职场文书
领导干部学习心得体会
2016/01/23 职场文书
学校趣味运动会开幕词
2016/03/04 职场文书
如何利用JavaScript实现二叉搜索树
2021/04/02 Javascript
python实现股票历史数据可视化分析案例
2021/06/10 Python
HTML5+CSS+JavaScript实现捉虫小游戏设计和实现
2021/10/16 HTML / CSS
MySQL如何快速创建800w条测试数据表
2022/03/17 MySQL