详解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正则表达式判断字符串是否是全部小写示例
Dec 25 Python
Python实现从百度API获取天气的方法
Mar 11 Python
Flask入门教程实例:搭建一个静态博客
Mar 27 Python
Python的Bottle框架中返回静态文件和JSON对象的方法
Apr 30 Python
python批量制作雷达图的实现方法
Jul 26 Python
python字典操作实例详解
Nov 16 Python
Python使用遗传算法解决最大流问题
Jan 29 Python
Win10系统下安装labelme及json文件批量转化方法
Jul 30 Python
简单了解python装饰器原理及使用方法
Dec 18 Python
提高python代码运行效率的一些建议
Sep 29 Python
Django+Nginx+uWSGI 定时任务的实现方法
Jan 22 Python
python中 Flask Web 表单的使用方法
May 20 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/04/18 PHP
PHP实现递归无限级分类
2015/10/22 PHP
PHP记录页面停留时间的方法
2016/03/30 PHP
如何通过PHP实现Des加密算法代码实例
2020/05/09 PHP
基于jquery的兼容各种浏览器的iframe自适应高度的脚本
2010/08/13 Javascript
nodejs win7下安装方法
2012/05/24 NodeJs
js使用eval解析json实例与注意事项分享
2014/01/18 Javascript
点击弹出层效果&弹出窗口后网页背景变暗效果的实现代码
2014/02/10 Javascript
jQuery淡入淡出元素让其效果更为生动
2014/09/01 Javascript
Javascript基础教程之for循环
2015/01/18 Javascript
JavaScript实现三级联动菜单效果
2017/08/16 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
详解swipe使用及竖屏页面滚动方法
2018/06/28 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
vue踩坑记-在项目中安装依赖模块npm install报错
2019/04/02 Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
2019/08/13 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
2019/10/24 Javascript
在vue中把含有html标签转为html渲染页面的实例
2019/10/28 Javascript
微信小程序点击item使之滚动到屏幕中间位置
2020/03/25 Javascript
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
python实现一个简单的ping工具方法
2019/01/31 Python
Python3基础教程之递归函数简单示例
2019/06/07 Python
python,Django实现的淘宝客登录功能示例
2019/06/12 Python
详解Python3定时器任务代码
2019/09/23 Python
Django配置文件代码说明
2019/12/04 Python
Tensorflow实现部分参数梯度更新操作
2020/01/23 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
CSS3实现DIV圆角效果完整代码
2012/10/10 HTML / CSS
一些Unix笔试题和面试题
2013/01/22 面试题
日本语毕业生自荐信
2014/02/01 职场文书
高中生学习计划书
2014/09/15 职场文书
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
国家税务局干部作风整顿整改措施
2014/09/18 职场文书
检察院对照“四风”认真查找问题落实整改措施
2014/09/26 职场文书
运动会广播稿200米(5篇)
2014/10/15 职场文书
阳光体育运动标语口号
2015/12/26 职场文书