详解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 相关文章推荐
Python2.x中文乱码问题解决方法
Jun 02 Python
在Python的Django框架中使用通用视图的方法
Jul 21 Python
详解python如何调用C/C++底层库与互相传值
Aug 10 Python
基于Python函数的作用域规则和闭包(详解)
Nov 29 Python
Python+request+unittest实现接口测试框架集成实例
Mar 16 Python
Python2和Python3.6环境解决共存问题
Nov 09 Python
Python 中Django安装和使用教程详解
Jul 03 Python
Python利用matplotlib做图中图及次坐标轴的实例
Jul 08 Python
Django中Middleware中的函数详解
Jul 18 Python
Python Django 简单分页的实现代码解析
Aug 21 Python
python pip如何手动安装二进制包
Sep 30 Python
Pyqt5将多个类组合在一个界面显示的完整示例
Sep 04 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
探讨:web上存漏洞及原理分析、防范方法
2013/06/29 PHP
php中的常用魔术方法总结
2013/08/02 PHP
PHP禁止个别IP访问网站
2013/10/30 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
2019/09/29 PHP
js 火狐下取本地路径实现思路
2013/04/02 Javascript
jQuery仿Excel表格编辑功能的实现代码
2013/05/01 Javascript
基于JavaScript实现复选框的全选和取消全选
2017/02/09 Javascript
JS html时钟制作代码分享
2017/03/03 Javascript
js实现瀑布流效果(自动生成新的内容)
2017/03/16 Javascript
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
vue 项目常用加载器及配置详解
2018/01/22 Javascript
JS改变页面颜色源码分享
2018/02/24 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
2018/05/28 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
2018/08/22 Javascript
js取0-9随机取4个数不重复的数字代码实例
2019/03/27 Javascript
Vue实现点击按钮复制文本内容的例子
2019/11/09 Javascript
Python3 处理JSON的实例详解
2017/10/29 Python
Python实现购物车程序
2018/04/16 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
Python2.x与3​​.x版本有哪些区别
2020/07/09 Python
Python confluent kafka客户端配置kerberos认证流程详解
2020/10/12 Python
Html5原创俄罗斯方块(基于canvas)
2019/01/07 HTML / CSS
aden + anais英国官网:美国婴儿贴身用品品牌
2019/09/08 全球购物
Andrew Marc官网:设计师外套的领先制造商
2019/10/30 全球购物
实习教师自我鉴定
2013/09/27 职场文书
商场经理竞聘演讲稿
2014/01/01 职场文书
股权转让协议书范本
2014/04/12 职场文书
专家推荐信模板
2014/05/09 职场文书
学校社会实践活动总结
2014/07/03 职场文书
2014年房地产销售工作总结
2014/12/01 职场文书
慈善募捐倡议书
2015/04/27 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书
幼儿园音乐教学反思
2016/02/18 职场文书
python - timeit 时间模块
2021/04/06 Python