详解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之不要红头文件(1)
Sep 28 Python
在Python中的Django框架中进行字符串翻译
Jul 27 Python
Python中不同进制的语法及转换方法分析
Jul 27 Python
Python多线程实现同步的四种方式
May 02 Python
基于Python实现的微信好友数据分析
Feb 26 Python
python中字符串的操作方法大全
Jun 03 Python
使用Scrapy爬取动态数据
Oct 21 Python
python使用Plotly绘图工具绘制气泡图
Apr 01 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
Aug 06 Python
python 使用csv模块读写csv格式文件的示例
Dec 02 Python
python基于selenium爬取斗鱼弹幕
Feb 20 Python
python用tkinter开发的扫雷游戏
Jun 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
深入理解php的MySQL连接类
2013/06/07 PHP
使用淘宝IP库获取用户ip地理位置
2013/10/27 PHP
初识PHP
2014/09/28 PHP
PHP四种基本排序算法示例
2015/04/09 PHP
Thinkphp5.0自动生成模块及目录的方法详解
2017/04/17 PHP
excel操作之Add Data to a Spreadsheet Cell
2007/06/12 Javascript
JQuery与iframe交互实现代码
2009/12/24 Javascript
jQuery操作 input type=checkbox的实现代码
2012/06/14 Javascript
js实现全屏漂浮广告移入光标停止移动
2013/12/02 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
JS函数定义方式的区别介绍
2016/03/22 Javascript
jQuery图片切换动画效果
2017/02/28 Javascript
js实现图片懒加载效果
2017/07/17 Javascript
jQueryUI Sortable 应用Demo(分享)
2017/09/07 jQuery
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
微信小程序实现全局搜索代码高亮的示例
2018/03/30 Javascript
JS回调函数 callback的理解与使用案例分析
2019/09/09 Javascript
Vue-cli3生成的Vue项目加载Mxgraph方法示例
2020/05/31 Javascript
详细分析React 表单与事件
2020/07/08 Javascript
[36:22]VP vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
状态机的概念和在Python下使用状态机的教程
2015/04/11 Python
Django自定义用户认证示例详解
2018/03/14 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
浅析css3中matrix函数的使用
2016/06/06 HTML / CSS
跨域修改iframe页面内容详解
2019/10/31 HTML / CSS
DAWGS鞋官方网站:鞋,凉鞋,靴子
2016/10/04 全球购物
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
HTC VIVE美国官网:VR虚拟现实眼镜
2018/02/13 全球购物
拉斯维加斯酒店、演出、旅游、俱乐部及更多:Vegas.com
2019/02/28 全球购物
写给老师的表扬信
2014/01/21 职场文书
总账会计岗位职责
2014/03/13 职场文书
报告会主持词
2014/04/02 职场文书
产品推广策划方案
2014/05/10 职场文书
保护校园环境倡议书
2015/04/28 职场文书
幼儿园教师读书笔记
2015/06/29 职场文书