iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python文本相似性计算之编辑距离详解
  • 720
分享到

Python文本相似性计算之编辑距离详解

相似性详解文本 2022-06-04 18:06:07 720人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

编辑距离 编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符

编辑距离

编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越大。

例如将kitten一字转成sitting:('kitten' 和 ‘sitting' 的编辑距离为3)

sitten (k→s)

sittin (e→i)

sitting (→g)

Python中的Levenshtein包可以方便的计算编辑距离

包的安装: pip install python-Levenshtein

我们来使用下:


# -*- coding:utf-8 -*-
import Levenshtein
texta = '艾伦 图灵传'
textb = '艾伦•图灵传'
print Levenshtein.distance(texta,textb)

上面的程序执行结果为3,但是只改了一个字符,为什么会发生这样的情况?

原因是Python将这两个字符串看成string类型,而在 string 类型中,默认的 utf-8 编码下,一个中文字符是用三个字节来表示的。

解决办法是将字符串转换成unicode格式,即可返回正确的结果1。


# -*- coding:utf-8 -*-
import Levenshtein
texta = u'艾伦 图灵传'
textb = u'艾伦•图灵传'
print Levenshtein.distance(texta,textb)

接下来重点介绍下保重几个方法的作用:


Levenshtein.distance(str1, str2)

计算编辑距离(也称Levenshtein距离)。是描述由一个字串转化成另一个字串最少的操作次数,在其中的操作包括插入、删除、替换。算法实现:动态规划


Levenshtein.hamming(str1, str2)

计算汉明距离。要求str1和str2必须长度一致。是描述两个等长字串之间对应位置上不同字符的个数。


Levenshtein.ratio(str1, str2)

计算莱文斯坦比。计算公式 r = (sum ? ldist) / sum, 其中sum是指str1 和 str2 字串的长度总和,ldist是类编辑距离。注意这里是类编辑距离,在类编辑距离中删除、插入依然+1,但是替换+2。


Levenshtein.jaro(s1, s2)

计算jaro距离,Jaro Distance据说是用来判定健康记录上两个名字是否相同,也有说是是用于人口普查,我们先来看一下Jaro Distance的定义。

两个给定字符串S1和S2的Jaro Distance为:

查看图片

其中的m为s1, s2匹配的字符数,t是换位的数目。

两个分别来自S1和S2的字符如果相距不超过

查看图片

时,我们就认为这两个字符串是匹配的;而这些相互匹配的字符则决定了换位的数目t,简单来说就是不同顺序的匹配字符的数目的一半即为换位的数目t。举例来说,MARTHA与MARHTA的字符都是匹配的,但是这些匹配的字符中,T和H要换位才能把MARTHA变为MARHTA,那么T和H就是不同的顺序的匹配字符,t=2/2=1。

两个字符串的Jaro Distance即为:

查看图片


Levenshtein.jaro_winkler(s1, s2)

计算Jaro?Winkler距离,而Jaro-Winkler则给予了起始部分就相同的字符串更高的分数,他定义了一个前缀p,给予两个字符串,如果前缀部分有长度为ι的部分相同,则Jaro-Winkler Distance为:

查看图片

dj是两个字符串的Jaro Distance

ι是前缀的相同的长度,但是规定最大为4

p则是调整分数的常数,规定不能超过25,不然可能出现dw大于1的情况,Winkler将这个常数定义为0.1

这样,上面提及的MARTHA和MARHTA的Jaro-Winkler Distance为:


dw = 0.944 + (3 * 0.1(1 − 0.944)) = 0.961

个人觉得算法可以完善的点:

去除停用词(主要是标点符号的影响)

针对中文进行分析,按照词比较是不是要比按照字比较效果更好?

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用python能有所帮助,如果有疑问大家可以留言交流。

其他参考资料:

https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance

Http://www.coli.uni-saarland.de/courses/LT1/2011/slides/Python-Levenshtein.html#Levenshtein-inverse

--结束END--

本文标题: Python文本相似性计算之编辑距离详解

本文链接: https://www.lsjlt.com/news/13957.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python如何实现距离和相似性计算
    本篇内容主要讲解“Python如何实现距离和相似性计算”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python如何实现距离和相似性计算”吧!欧氏距离也称欧几里得距离,是指在m维空间中两个点之间...
    99+
    2023-07-05
  • Python机器学习中实现距离和相似性计算详解
    目录欧氏距离曼哈顿距离切比雪夫距离马氏距离夹角余弦闵可夫斯基距离汉明距离杰卡德距离 & 杰卡德相似系数相关系数 & 相关距离信息熵欧氏距离 也称欧几里得距离,是指在m...
    99+
    2023-03-08
    Python距离计算 Python相似性计算 Python相似性
  • 论文查重python文本相似性计算simhash源码
    场景: 1.计算SimHash值,及Hamming距离。2.SimHash适用于较长文本(大于三五百字)的相似性比较,文本越短误判率越高。 Python实现: 代码如下 # -*- ...
    99+
    2024-04-02
  • 怎么查重python文本相似性计算simhash源码
    今天小编给大家分享一下怎么查重python文本相似性计算simhash源码的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。场景...
    99+
    2023-06-29
  • PHP如何计算两个字符串之间的编辑距离
    这篇文章将为大家详细讲解有关PHP如何计算两个字符串之间的编辑距离,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP 计算字符串编辑距离 引言 字符串编辑距离是衡量两个字符串相似程度的指标。它计算将一个...
    99+
    2024-04-02
  • Python 自然语言处理中的文本相似性度量:探索文本之间的共性
    文本相似性度量是一种自然语言处理技术,用于评估两个文本段落之间的相似程度。它在各种应用程序中至关重要,例如信息检索、文本分类和机器翻译。 度量方法 存在多种文本相似性度量方法,每种方法都针对不同的文本特征进行评估。主要方法包括: 编辑距...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作