字符串的相似性比较应用场合很多,像拼写纠错、文本去重、上下文相似性等。

评价字符串相似度最常见的办法就是:把一个字符串通过插入、删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数,这种就是编辑距离(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 字符串相似性的几种度量方法相关推荐

  1. python函数中可变参数的传递方式_详解Python函数可变参数定义及其参数传递方式...

    Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1. func(*args) 传入的参数为以元组形式存在args中,如: def func(*args): ...

  2. python中get函数是什么意思_详解python中get函数的用法(附代码)_后端开发

    strncmp函数用法详解_后端开发 strncmp函数为字符串比较函数,其函数语法为"int strncmp ( const char * str1, const char * str2, ...

  3. python中groupby()函数讲解与示例_详解python中groupby函数通俗易懂

    一.groupby 能做什么? python中groupby函数主要的作用是进行数据的分组以及分组后地组内运算! 对于数据的分组和分组运算主要是指groupby函数的应用,具体函数的规则如下: df[ ...

  4. python的装饰器迭代器与生成器_详解python中的生成器、迭代器、闭包、装饰器

    迭代是访问集合元素的一种方式.迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 1|1可迭代对象 以直接作用于 for ...

  5. python中heapq的库是什么_详解Python中heapq模块的用法

    详解Python中heapq模块的用法 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  详解Python中heapq模块的用法.txt ] (友情提示:右键点上行t ...

  6. python中ifelifelse用在什么结构_详解Python if-elif-else知识点

    有的时候,一个 if - else - 还不够用.比如,根据年龄的划分:条件1:18岁或以上:adult 条件2:6岁或以上:teenager 条件3:6岁以下:kid Python if-elif- ...

  7. python文件对象是可以迭代的_详解python可迭代对象、迭代器和生成器

    可迭代对象 什么是可迭代对象?顾名思义就是可以迭代的一个对象,再通俗点就是可以被for循环遍历的对象,如常用的list.str等数据类型.我们可以使用isinstance来判断这个数据是否是可迭代对象 ...

  8. python中字典和json的区别_详解python中的json和字典dict

    定义 python中,json和dict非常类似,都是key-value的形式,而且json.dict也可以非常方便的通过dumps.loads互转.既然都是key-value格式,为啥还需要进行格式 ...

  9. python for和while的用法区别_详解python while 函数及while和for的区别

    1.while循环(只有在条件表达式成立的时候才会进入while循环) while 条件表达式: pass while 条件表达式: pass else: pass 不知道循环次数,但确定循环条件的时 ...

最新文章

  1. 大数据和高并发的解决方案汇总
  2. 计算机桌面文件管理窗口,隐藏Win10此电脑窗口的6个额外文件夹
  3. GitHub 上有哪些好用的爬虫?
  4. java map的理解_java中的hashmap理解
  5. Logic-算法-八个箱子找一个最轻的
  6. iOS关于armv7,armv7s,arm64,i386,x86_64等问题
  7. Bella Protocol已按计划调整流动性挖矿奖励方案
  8. java png生成webp图片_PNG转WEBP格式的动态图
  9. 《新浪微博用户兴趣建模系统架构》阅读笔记
  10. hive中的集合操作函数
  11. MDui库又一次更新了,重构了绘制的相关逻辑
  12. C语言快速解决反转链表
  13. 车架号 生成 java_JAVA匹配车架号以及生成虚拟车架号
  14. 成功解决微信跳转到手机默认浏览器下载
  15. 计算机室内设计绘图,室内设计中手绘和电脑制图的比较
  16. 标准之争:影响 IPv6 部署的经济学因素
  17. qt显示温度℃度数°或中文等特殊符号
  18. 手指检测心跳设计——传感器制作篇
  19. 二叉树的基本概念和性质
  20. 关于嵌入式编程的思考

热门文章

  1. ORACLE 定时执行存储过程
  2. ORACLE的基本语法集锦
  3. 织梦本地调试运行PHP不显示图片,织梦dedecms不能下载远程图片实现图片本地化解决方法...
  4. IntelliJ IDEA 提交代码时出现:Code analysis failed with exception: com.intellij.psi......(亲测)
  5. docker部署django项目、mysql主从搭建、django实现读写分离
  6. Centos 安装python 3.7 遇到 ModuleNotFoundError: No module named _ctypesmake [install] Error 1(亲测下面的红字内容)
  7. PHP如何保存当前用户
  8. mysql 排序后 下一条记录_Mysql如何使用order by工作
  9. 看微软 Windows 30年发展简史,你用过最早的系统版本是什么?
  10. 方正ceb阅读器手机版_海信阅读手机A5Pro 经典版评测:体验和阅读完美平衡