Levenshtein距离异形悬臂基地

时间:2018-10-04 17:42:28

标签: python bioinformatics levenshtein-distance

我想要一种算法,报告这两个序列之间的编辑距离为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

我认为不应该惩罚字符串右侧(序列结尾)的突出碱基,而应该对序列左侧的碱基进行惩罚的原因如下:

  1. 第一个也是最重要的原因是,仅仅因为字符串的右侧有突出的字符(也就是序列的末尾),这并不意味着字符在两个比较序列之间不对齐。这仅意味着我们没有其他序列中的相应字符可以与它们进行比较。对于字符串的左侧,情况并非如此。
  2. 通常,与左侧的字符相比,字符串左侧的字符(也就是测序读物的开始)更容易确定(质量得分更高)。

1 个答案:

答案 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模式:查询结束时的间隔不受影响