我想要一种算法,报告这两个序列之间的编辑距离为2:
GCGGCTCCTCTGGGGCGTTCCC
GCGGCTCCTCTGGGGGGCGTTC
第一个可以转换为第二个,插入两个字符,如下所示:
GCGGCTCCTCTGGGGGGCGTTCCC
GCGGCTCCTCTGGGGGGCGTTC
原始两个字符串的长度为22。这两个字符串中的前22个字符现在相同。这两个字符串之间的levenshtein距离为4,我想报告这两个字符串的编辑距离为2的方式。
是否可以使用我已经在使用的python软件包Levenshtein_distance函数或Levenshtein python软件包来做到这一点?
更多详细信息:
我正在将其应用于下一代测序数据。我想比较从每个测序读取的一部分中产生的2个序列。序列是从全长测序读取的开始获得的,并且应该是每个测序读取的唯一序列。
示例:
阅读A:ATCGAACCGGTT
阅读B:ATGAACCGGTT
其中字符串的前四个基数将用作每次读取的唯一标识符。序列ATCG是读取A的唯一标识符,ATGA是读取B的唯一标识符。两个读取都包含相同的序列“ AACCGGTT”。比较唯一标识符(ATCG和ATGA)时,我想要一个指标,以返回两个序列之间的编辑距离1。
读取唯一标识符:ATCG 插入后读取B的唯一ID:AT_GA
我认为不应该惩罚字符串右侧(序列结尾)的突出碱基,而应该对序列左侧的碱基进行惩罚的原因如下:
答案 0 :(得分:0)
尽管编写自定义函数来计算“距离”并不难,但是您可以首先尝试edlib
。因为它是完成这项工作的非常有效的工具。
输入读A:
ATCGAACCGGTT
输入读取B:
ATGAACCGGTTATG
对齐后:
ATCGAACCGGTT--- # these tailing gap will be ignored
AT-GAACCGGTTATG # the internal gap is meaningful
您的问题中包含python标记,因此我使用edlib python包装器发布了解决方案。
>>> import edlib
>>> edlib.align("ATCGAACCGGTT","ATGAACCGGTTATG", mode="SHW")['editDistance']
1
SHW
模式:查询结束时的间隔不受影响