python比较两个字符串相似度_详解Python 字符串相似性的几种度量方法
字符串的相似性比较应用场合很多,像拼写纠错、文本去重、上下文相似性等。
评价字符串相似度最常见的办法就是:把一个字符串通过插入、删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数,这种就是编辑距离(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 字符串相似性的几种度量方法
本文地址: http://www.cppcns.com/jiaoben/python/270773.html
python比较两个字符串相似度_详解Python 字符串相似性的几种度量方法相关推荐
- python函数中可变参数的传递方式_详解Python函数可变参数定义及其参数传递方式...
Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1. func(*args) 传入的参数为以元组形式存在args中,如: def func(*args): ...
- python中get函数是什么意思_详解python中get函数的用法(附代码)_后端开发
strncmp函数用法详解_后端开发 strncmp函数为字符串比较函数,其函数语法为"int strncmp ( const char * str1, const char * str2, ...
- python中groupby()函数讲解与示例_详解python中groupby函数通俗易懂
一.groupby 能做什么? python中groupby函数主要的作用是进行数据的分组以及分组后地组内运算! 对于数据的分组和分组运算主要是指groupby函数的应用,具体函数的规则如下: df[ ...
- python的装饰器迭代器与生成器_详解python中的生成器、迭代器、闭包、装饰器
迭代是访问集合元素的一种方式.迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 1|1可迭代对象 以直接作用于 for ...
- python中heapq的库是什么_详解Python中heapq模块的用法
详解Python中heapq模块的用法 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: 详解Python中heapq模块的用法.txt ] (友情提示:右键点上行t ...
- python中ifelifelse用在什么结构_详解Python if-elif-else知识点
有的时候,一个 if - else - 还不够用.比如,根据年龄的划分:条件1:18岁或以上:adult 条件2:6岁或以上:teenager 条件3:6岁以下:kid Python if-elif- ...
- python文件对象是可以迭代的_详解python可迭代对象、迭代器和生成器
可迭代对象 什么是可迭代对象?顾名思义就是可以迭代的一个对象,再通俗点就是可以被for循环遍历的对象,如常用的list.str等数据类型.我们可以使用isinstance来判断这个数据是否是可迭代对象 ...
- python中字典和json的区别_详解python中的json和字典dict
定义 python中,json和dict非常类似,都是key-value的形式,而且json.dict也可以非常方便的通过dumps.loads互转.既然都是key-value格式,为啥还需要进行格式 ...
- python for和while的用法区别_详解python while 函数及while和for的区别
1.while循环(只有在条件表达式成立的时候才会进入while循环) while 条件表达式: pass while 条件表达式: pass else: pass 不知道循环次数,但确定循环条件的时 ...
最新文章
- 大数据和高并发的解决方案汇总
- 计算机桌面文件管理窗口,隐藏Win10此电脑窗口的6个额外文件夹
- GitHub 上有哪些好用的爬虫?
- java map的理解_java中的hashmap理解
- Logic-算法-八个箱子找一个最轻的
- iOS关于armv7,armv7s,arm64,i386,x86_64等问题
- Bella Protocol已按计划调整流动性挖矿奖励方案
- java png生成webp图片_PNG转WEBP格式的动态图
- 《新浪微博用户兴趣建模系统架构》阅读笔记
- hive中的集合操作函数
- MDui库又一次更新了,重构了绘制的相关逻辑
- C语言快速解决反转链表
- 车架号 生成 java_JAVA匹配车架号以及生成虚拟车架号
- 成功解决微信跳转到手机默认浏览器下载
- 计算机室内设计绘图,室内设计中手绘和电脑制图的比较
- 标准之争:影响 IPv6 部署的经济学因素
- qt显示温度℃度数°或中文等特殊符号
- 手指检测心跳设计——传感器制作篇
- 二叉树的基本概念和性质
- 关于嵌入式编程的思考
热门文章
- ORACLE 定时执行存储过程
- ORACLE的基本语法集锦
- 织梦本地调试运行PHP不显示图片,织梦dedecms不能下载远程图片实现图片本地化解决方法...
- IntelliJ IDEA 提交代码时出现:Code analysis failed with exception: com.intellij.psi......(亲测)
- docker部署django项目、mysql主从搭建、django实现读写分离
- Centos 安装python 3.7 遇到 ModuleNotFoundError: No module named _ctypesmake [install] Error 1(亲测下面的红字内容)
- PHP如何保存当前用户
- mysql 排序后 下一条记录_Mysql如何使用order by工作
- 看微软 Windows 30年发展简史,你用过最早的系统版本是什么?
- 方正ceb阅读器手机版_海信阅读手机A5Pro 经典版评测:体验和阅读完美平衡