Python Levenshtein距离igonore悬垂基座
我想要一个算法报告这两个序列之间的编辑距离为2: GCGGCTCCTCTGGGGCGTTCCC GCGGCTCCTCTGGGGCGTTC 可以通过插入2个字符将第一个字符转换为第二个字符,如下所示: GCGGCTCCTCTGGGGCGTTCCC GCGGCTCCTCTGGGGCGTTC 最初的两根弦的长度是22。这两个字符串中的前22个字符现在是相同的。这两个字符串之间的levenshtein距离是4,我想为这两个字符串报告编辑距离2 我已经在使用的python包Levenshtein_distance函数或Levenshtein python包有什么方法可以做到这一点吗 更多详情: 我正在将其应用于下一代测序数据。我想比较从每个序列读取的一部分生成的2个序列。序列从全长测序读取开始获得,每次测序读取应为唯一序列 示例: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
读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。