详解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中的几种常见的数据类型
Feb 10 Python
Python中第三方库Requests库的高级用法详解
Mar 12 Python
CentOS 7 安装python3.7.1的方法及注意事项
Nov 01 Python
对python的输出和输出格式详解
Dec 08 Python
Python 处理文件的几种方式
Aug 23 Python
pytorch模型预测结果与ndarray互转方式
Jan 15 Python
Python类super()及私有属性原理解析
Jun 15 Python
python 爬虫如何实现百度翻译
Nov 16 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
Dec 17 Python
python Autopep8实现按PEP8风格自动排版Python代码
Mar 02 Python
python必学知识之文件操作(建议收藏)
May 30 Python
Python爬虫基础之简单说一下scrapy的框架结构
Jun 26 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获取网页内容方法总结
2008/12/04 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
2012/02/22 PHP
深入理解用mysql_fetch_row()以数组的形式返回查询结果
2013/06/05 PHP
php中Session的生成机制、回收机制和存储机制探究
2014/08/19 PHP
Yii2分页的使用及其扩展方法详解
2016/05/23 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
2016/09/30 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
2016/12/07 PHP
thinkPHP模板引擎用法示例
2016/12/08 PHP
[原创]php实现数组按拼音顺序排序的方法
2017/05/03 PHP
可兼容php5与php7的cURL文件上传功能实例分析
2018/05/11 PHP
jquery中dom操作和事件的实例学习 下拉框应用
2011/12/01 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
2016/05/19 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
详细讲解JavaScript中的this绑定
2016/10/10 Javascript
JS中关于事件处理函数名后面是否带括号的问题
2016/11/16 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
jQuery制作图片旋转效果
2017/02/02 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
2017/07/15 Javascript
ES6 迭代器与可迭代对象的实现
2019/02/11 Javascript
vue全局自定义指令-元素拖拽的实现代码
2019/04/14 Javascript
vue实现输入一位数字转汉字功能
2019/12/13 Javascript
node crawler如何添加promise支持
2020/02/01 Javascript
python中将一个全部为int的list 转化为str的list方法
2018/04/09 Python
学Python 3的理由和必要性
2019/11/19 Python
pytorch中torch.max和Tensor.view函数用法详解
2020/01/03 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
Superdry瑞典官网:英国日本街头风品牌
2017/05/17 全球购物
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
意大利宠物用品购物网站:Bauzaar
2018/09/15 全球购物
试用期转正员工自我评价
2014/09/18 职场文书
离职报告范文
2014/11/04 职场文书
小学生思想品德评语
2014/12/31 职场文书
2015年团支书工作总结
2015/04/03 职场文书
教你快速构建一个基于nginx的web集群项目
2021/11/27 Servers