Pattern matching: The gestalt approach一种序列的文本相似度方法

转载请注明原创:https://blog.csdn.net/HHTNAN

Pattern matching: The gestalt approach

python 比较两个序列的相似度,不需要分词

案例1

import difflib
a="做子宫肌瘤微创手术用多少钱"
b="股癣是什么样子的?怎么治疗股癣好?"
print (difflib.SequenceMatcher(None,a,b).ratio())

输出:
0.06666666666666667

案例2

import difflib
a="做子宫肌瘤微创手术用多少钱"
b="做子宫肌瘤微创手术具体费用"
print (difflib.SequenceMatcher(None,a,b).ratio())

输出:
0.769230769

案例3

import difflib
a="做子宫肌瘤微创手术用多少钱"
b="具体费用做子宫肌瘤微创手术"
print (difflib.SequenceMatcher(None,a,b).ratio())

输出:
0.6923076923076923

案例4

import difflib
a="做子宫肌瘤微创手术用多少钱"
b="具体费用子宫肌瘤做微创手术"
print (difflib.SequenceMatcher(None,a,b).ratio())

0.6153846153846154
通过上面的案例可以看出本算法侧重的,是序列的相似性。会忽视主体的词义、语义。

该算法计算返回的分数为共同发现的序列字符数的两倍除以两个字符串中的字符总数; 得分以整数形式返回,反映百分比匹配。

目前猜测算法计算公式,
如果序列中位置没有完全匹配,如案例3,则其计算分数为9/13,9为最大公共字串,13为总字符序列数,案例4为8/13的结果,理解为4+4/13的结果。那么问题来了为什么案例2中最大9为最大公共字串的分数是那么高,应该是有一个位置完全一致得分+1.即其结果理解为9+1/13得到的结果。以上猜想均为根据测试进行猜想,并未进行有效验证,并不权威哦,后面我找到论文后拜读下,再做整理。(值得注意的是再进行过程中是以B字符为基准进行的。)
案例5
import difflib
a=“10个月宝宝贫血”
b=“10个月宝宝流鼻血”
print (difflib.SequenceMatcher(None,a,b).ratio())
输出
0.8235294117647058

(7+8)+1/len(a)+len(b)=7*2/8+9=0.8235294117647058

转载请注明原创:https://blog.csdn.net/HHTNAN

微信号
参考文献: 【1】https://docs.python.org/2/library/difflib.html 【2】https://pymotw.com/2/difflib/ 【3】http://blog.chinaunix.net/uid-20780364-id-538761.html 【4】https://docs.python.org/3.5/library/difflib.html 【5】http://www.drdobbs.com/database/pattern-matching-the-gestalt-approach/184407970 【6】https://blog.csdn.net/gavin_john/article/details/78951698
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT界的小小小学生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值