为了账号安全,请及时绑定邮箱和手机立即绑定

SequenceMatcher - 更喜欢有序匹配

SequenceMatcher - 更喜欢有序匹配

慕慕森 2021-08-17 15:59:26
我有一个SequenceMatcher函数可以找到最接近的匹配项:细绳字符串列表代码:def seq_match(text, values, min_match=10):    highest = (None, 0)    for v in values:        sm = SequenceMatcher(a=text, b=v, autojunk=False)        ratio = int(sm.quick_ratio() * 100)        print(f'{text} : {v} : {ratio}')        if ratio > min_match and ratio > highest[1]:            highest = v, ratio    return highest我还有一个数据集:# (text, value1, value2, value3...): expected_outputtest_map = {    # 1    ('super delicious cat food', 'decent', 'delicious', 'super delicious'): 'super delicious',    # 2    ('salmon: does not contain real salmon', 'chicken', 'salmon', 'arctic salmon'): 'arctic salmon',}当#1数据被正确匹配时,#2匹配假设更长的字符串artic salmon比仅仅salmon. 换句话说,我希望salmon能更好地匹配等于或更大的 mathan artic salmon。以下是全部比赛结果:# correct super delicious cat food : decent : 33super delicious cat food : delicious : 54super delicious cat food : super delicious : 76salmon: does not contain real salmon : chicken : 18salmon: does not contain real salmon : salmon : 28# incorrectsalmon: does not contain real salmon : arctic salmon : 48 # expectedsalmon: does not contain real salmon : arctic salmon : 28 or less我可以SequenceMatcher在这里强迫行为更理智吗?我怎样才能得到我想要的结果?为什么arctic还要产生分数?我试过关闭自动垃圾邮件,但它似乎没有影响。
查看完整描述

1 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

如果你看这里的文档SequenceMatcher


您将看到其算法的以下描述:


The idea is to find the longest contiguous matching subsequence that contains   

no “junk” elements  

根据这个定义,arctic salmon获得更高的相似度分数是有道理的salmon。

为了更好地理解为什么看下面的代码:


a = 'salmon: does not contain real salmon'

b = 'arctic salmon'

sm = SequenceMatcher(a, b, autojunk=False)  

sm.get_matching_blocks()

输出:


[Match(a=1, b=0, size=1),

 Match(a=15, b=3, size=1),

 Match(a=17, b=5, size=1),

 Match(a=29, b=6, size=7),

 Match(a=36, b=13, size=0)]   

如您所见,有 10 个匹配项可供arctic salmon比较,而salmon其中只有 6个匹配项的比率为2 * 10 / 49 = 0.40816326530612246.

有关ratio()上面链接中计算战利品的完整说明。


查看完整回答
反对 回复 2021-08-17
  • 1 回答
  • 0 关注
  • 305 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信