如何计算文本字符串的多序列对齐方式

时间:2011-04-28 05:06:50

标签: python string text alignment sequence

我正在编写一个程序,它必须计算一组字符串的multiple sequence alignment。我想在Python中这样做,但如果更实用,我可以使用外部软件或其他语言。数据不是特别大,我没有强大的性能要求,我可以容忍近似值(即我只需要找到足够好的对齐)。唯一的问题是字符串是常规字符串(即UTF-8字符串可能带有应该被视为常规字符的换行符);它们不是DNA序列或蛋白质序列。

我可以在生物信息学中找到大量工具和信息,具有特定的复杂文件格式和一系列我不需要的功能,但很难找到简单案例的软件,库或示例代码字符串。我可以重新实现这个问题的许多算法中的任何一个,或者将我的字符串编码为DNA,但必须有更好的方法。你知道任何解决方案吗?

谢谢!

4 个答案:

答案 0 :(得分:16)

  • 对齐多个序列的最简单方法是进行多次成对比对。

首先获得每对的成对相似度得分并存储这些得分。这是该过程中最昂贵的部分。选择具有最佳相似性得分的对并进行对齐。现在选择与对齐序列集中的一个序列最佳对齐的序列,并基于该成对比对将其与对齐集对齐。重复,直到所有序列都在。

  

将序列对齐时   对齐的序列,(基于a   成对对齐),当你插入一个   已经存在的序列中的差距   设置,你插入相同的差距   放置在对齐的所有序列中   集。

Lafrasu建议将SequneceMatcher()算法用于UTF-8字符串的成对对齐。我所描述的内容为您提供了一种相当轻松,合理的方式将其扩展到多个序列。

如果您感兴趣,它相当于构建一小组对齐序列并将它们对齐在最佳对上。它给出了完全相同的结果,但它是一个更简单的实现。

答案 1 :(得分:4)

您是否正在寻找快速而肮脏的东西,如下所示?

from difflib import SequenceMatcher

a = "dsa jld lal"
b = "dsajld kll"
c = "dsc jle kal"
d = "dsd jlekal"

ss = [a,b,c,d]

s = SequenceMatcher()

for i in range(len(ss)):
    x = ss[i]
    s.set_seq1(x)
    for j in range(i+1,len(ss)):

        y = ss[j]
        s.set_seq2(y)

        print
        print s.ratio()
        print s.get_matching_blocks()

答案 2 :(得分:1)

我最近编写了一个运行Smith-Waterman算法的python脚本(用于生成DNA或蛋白质序列的缺口局部序列比对)。它几乎肯定不是最快的实现,因为我根本没有优化它的速度(不是我目前的瓶颈),但它有效并且不关心字符串中每个字符的身份。我可以在这里发布或发送给你的文件,如果这是你正在寻找的东西。

答案 3 :(得分:1)

MAFFT版本7.120+支持多文本对齐。输入类似FASTA format但是使用LATIN1文本而不是序列,输出与FASTA格式对齐。安装后,它很容易运行:

mafft --text input_text.fa > output_alignment.fa

虽然MAFFT是生物序列比对的成熟工具,但文本比对模式正处于开发阶段,未来的计划包括允许用户定义的评分矩阵。您可以在the documentation中查看更多详细信息。