Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Levenshtein距离igonore悬垂基座_Python_Bioinformatics_Levenshtein Distance - Fatal编程技术网

Python Levenshtein距离igonore悬垂基座

Python Levenshtein距离igonore悬垂基座,python,bioinformatics,levenshtein-distance,Python,Bioinformatics,Levenshtein Distance,我想要一个算法报告这两个序列之间的编辑距离为2: GCGGCTCCTCTGGGGCGTTCCC GCGGCTCCTCTGGGGCGTTC 可以通过插入2个字符将第一个字符转换为第二个字符,如下所示: GCGGCTCCTCTGGGGCGTTCCC GCGGCTCCTCTGGGGCGTTC 最初的两根弦的长度是22。这两个字符串中的前22个字符现在是相同的。这两个字符串之间的levenshtein距离是4,我想为这两个字符串报告编辑距离2 我已经在使用的python包Levenshtein_dist

我想要一个算法报告这两个序列之间的编辑距离为2:

GCGGCTCCTCTGGGGCGTTCCC

GCGGCTCCTCTGGGGCGTTC

可以通过插入2个字符将第一个字符转换为第二个字符,如下所示:

GCGGCTCCTCTGGGGCGTTCCC

GCGGCTCCTCTGGGGCGTTC

最初的两根弦的长度是22。这两个字符串中的前22个字符现在是相同的。这两个字符串之间的levenshtein距离是4,我想为这两个字符串报告编辑距离2

我已经在使用的python包Levenshtein_distance函数或Levenshtein python包有什么方法可以做到这一点吗

更多详情:

我正在将其应用于下一代测序数据。我想比较从每个序列读取的一部分生成的2个序列。序列从全长测序读取开始获得,每次测序读取应为唯一序列

示例:
读A:ATCGAACCGGTT 读B:ATGAACCGTT

其中,字符串的前四个碱基将用作每次读取的唯一标识符。序列ATCG是读取A的唯一标识符,ATGA是读取B的唯一标识符。两次读取包含相同的序列“AACCGGTT”。当比较唯一标识符(ATCG和ATGA)时,我想要一个返回两个序列之间编辑距离为1的度量

读取唯一标识符:ATCG 插入后读取B唯一id:AT_GA

我认为字符串右侧(序列末尾)的悬垂基不应受到惩罚,但序列左侧的悬垂基应受到惩罚,原因如下:

  • 第一个也是最重要的原因是,仅仅因为字符串的右侧(也就是序列的末尾)有悬垂字符,这并不意味着要比较的两个序列之间的字符不对齐。这只意味着我们没有其他序列中的对应字符来进行比较。对于字符串的左侧,情况并非如此
  • 通常,字符串左侧的字符(即序列读取的开始)比右侧的字符更容易识别(具有更高的质量分数)
    虽然编写自定义函数来计算“距离”并不困难,但您可以先尝试
    edlib
    。因为这是一个非常有效的工具来做这项工作

    输入读取A:

    ATCGAACCGGTT
    
    输入读取B:

    ATGAACCGGTTATG
    
    校准后:

    ATCGAACCGGTT---   # these tailing gap will be ignored
    AT-GAACCGGTTATG   # the internal gap is meaningful
    
    您的问题中有python标记,所以我发布了一个使用edlib python包装器的解决方案

    导入edlib >>>edlib.align(“ATCGAACCGGTT”、“ATGAACCGGTTATG”,mode=“SHW”)['editDistance'] 1.
    SHW
    模式:查询端的间隙不受惩罚


    这两个字符串之间的Levenshtein距离实际上是4,不清楚“编辑距离”的定义是什么。我看不到一个简单的方法来使用标准的Levenshtein函数。不过,我会尝试通过一个简单的更改来定制该函数的版本;将删除的成本设置为0而不是1。“如果没有可靠的测试,我是不会相信它的。”哈切特·戈特西亚。你提出的对删除应用0惩罚的建议很有趣。我认为它必须包括以下规则:1。在字符串的中间保持每个删除1的惩罚。2.在字符串(最大长度为2)的末端(右侧)删除内容将受到0处罚?3.这个允许删除的数量可以自定义吗?为什么右侧是特殊的而左侧不是?你不希望GTG到TCG的距离也为1吗?GTG->GTCG,其中左边的G是一个可以原谅的突出部分。我使用了Lev函数,但发现很难为删除添加0成本,而不会产生不必要的副作用。如果您的最大距离很小(如您的示例2),我认为最简单的方法是将现有的Lev函数与多个调用一起使用,这些调用将{stringA,stringA-lastchars}与{stringB,stringB-lastchars}进行比较。这将是9次比较。很多额外的处理,但应该会给出你想要的。谢谢@Chang Ye这几乎是完美的,可能适合我的目的。我只想指出,计算取决于输入的顺序<代码>>>edlib.align(“atgaacggttg”,“atcgaacccggtt”,mode=“SHW”)['editDistance']4>>edlib.align(“atcgaacggtt”,“atgaacccggttag”,mode=“SHW”)['editDistance']1更新:为了在python中使用edlib,我必须安装conda安装-c bioconda python-edlib,而不是conda安装-c bioconda-edlib。