位置: 编程技术 - 正文

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

编辑:rootadmin

推荐整理分享Python文本相似性计算之编辑距离详解,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

编辑距离

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

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

sitten (k→s)

sittin (e→i)

sitting (→g)

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

包的安装: pip install python-Levenshtein

我们来使用下:

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

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

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

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

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

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

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

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

计算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即为:

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

dj是两个字符串的Jaro Distance

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

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

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

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

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

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

总结

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

本文链接地址:https://www.jiuchutong.com/biancheng/383405.html 转载请保留说明!

上一篇:Python实现全角半角字符互转的方法(python全角半角)

下一篇:Python抓取手机号归属地信息示例代码(python抓取手机号软件)

  • 计提生产应税产品的分录
  • 累进税率的形式有全额累进税率和什么两种
  • 培训费的其他费用是什么
  • 劳保费属于什么会计科目
  • 工资发放凭证由谁出具
  • 退货未开发票如何做账
  • 无形资产资本化会计处理
  • 用于不动产的进项税能抵扣吗
  • 跨国避税
  • 非盈利组织的好处
  • 材料检测费怎么计算
  • 个体工商户个人经营所得税优惠政策
  • 增值税纳税表销售额的填写
  • 购买食堂餐具开票怎么开
  • 应收账款坏账准备计算表
  • 净资产是所有者权益一样吗
  • windows10如何开启自动更新
  • 收到办公室桶装水开的普票怎样入账?
  • 公司收到拆迁补偿款要交税吗
  • 物流丢失了货品如何报警处理
  • php和c++的区别
  • 社保参保退费需要多久
  • vagrant 安装centos7
  • 没有取得发票的支出可以做成本吗
  • 企业自建房需要交哪些税
  • macOS Big Sur 11.2 RC 3(版本号20D64)预览版正式发布(附更新内容)
  • slee401.exe - slee401是什么进程 有什么用
  • 资本公积转增股本需要缴纳个人所得税吗
  • 增值税怎样计算
  • 财政返还土地奖金的规定
  • KITTI数据集可视化(二):点云多种视图与标注展示的可视化代码解析
  • 公司向股东借款多久必须归还
  • 怎么安装vue2.0
  • 先买入再卖出
  • 税控系统技术维护费税率
  • yolo行人检测
  • javaweb入门简单小项目
  • 前端vue面试题
  • 什么是异步函数
  • 充值款如何领取红包
  • 研发支出资本化支出属于什么科目
  • 分公司要所得税汇算吗
  • 应收账款扣款会计处理
  • 如何算基数
  • 企业所得税包含员工工资吗
  • 机关事业单位体育协会举办体育赛事活动应当
  • 个税申报怎样作废
  • sql行列转换结果保存为新表
  • 租赁吊车服务的利润大概有多少
  • 其他权益工具投资是金融资产吗
  • 发票拍照打印出来可以报销吗法律
  • 固定资产改造的配件怎么入账
  • 承兑汇票的贴息怎么算
  • 分红做什么会计分录
  • 电子汇票接收后怎么操作
  • 营业收入要包括什么
  • 预交企业所得税税率
  • 管理费用的明细科目如何设置
  • mysql数据库innodb
  • mysql5.7慢查询
  • 如何屏蔽网络?
  • 苹果系统声音怎么设置方法
  • JavaScript:Array类型全面解析
  • css制作动画
  • perl变量后拼接字符串
  • opengl画简单图形
  • 浏览器修改js变量
  • js按位运算符
  • shell脚本解压tar文件
  • socket教程pdf
  • jquery动态添加div
  • 怎么利用python爬虫爬数据
  • 深入理解新发展理念心得体会3篇
  • 基于JAVASCRIPT实现的可视化工具是
  • jquery修改css
  • 从局部变量和全变量区分
  • 发票与报销内容不一样
  • 重庆车牌号申请
  • 税盘数字证书密码怎么查看
  • 个体工商户开发票怎么开
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设