背景
Python 模块 regex允许模糊匹配。
您可以指定允许的替换数 (s)、插入数 (i)、删除数 (d) 和总错误数 (e)。
匹配结果的 fuzzy_counts 属性返回一个元组 (0,0,0),其中:
match.fuzzy_counts[0] = count for 's'
match.fuzzy_counts[1] = count for 'i'
match.fuzzy_counts[2] = count for 'd'
问题
删除和插入按预期计算,但不计算替换。
在下面的示例中,唯一的变化是查询中删除了一个字符,但替换计数为 6(如果删除 BESTMATCH 选项则为 7)。
如何计算替换数?
如果有人能向我解释这是如何工作的,我将不胜感激。
>>> import regex
>>> reference = "(TATGGGA[CT][GC]AAAG[CT]CT[AC]AA[GA]CCATGTG){s<7,i<3,d<3,e<8}"
>>> query = "TATGGACCAAAGTCTCAAGCCATGTG"
>>> match = regex.search(reference, query, regex.BESTMATCH)
>>> print(match.fuzzy_counts)
(6,0,1)
请您参考如下方法:
这个问题似乎与允许的错误设置中的值有关。
将 s 减少到 s < 3 会向下更改模糊匹配元组得分:
>>> reference = "(TATGGGA[CT][GC]AAAG[CT]CT[AC]AA[GA]CCATGTG){s<3,i<3,d<3,e<4}"
>>> query = "TATGGACCAAAGTCTCAAGCCATGTG"
>>> match = regex.search(reference, query, regex.BESTMATCH)
>>> print(match.fuzzy_counts)
(1,0,1)
进一步减少 's' 的允许错误会返回此匹配项的预期 's' 分数:
>>> reference = "(TATGGGA[CT][GC]AAAG[CT]CT[AC]AA[GA]CCATGTG){s<2,i<3,d<3,e<4}"
>>> query = "TATGGACCAAAGTCTCAAGCCATGTG"
>>> match = regex.search(reference, query, regex.BESTMATCH)
>>> print(match.fuzzy_counts)
(0,0,1)
为什么它会这样,对我来说仍然是个谜。
