我正在编写一个程序,它必须计算一组字符串的multiple sequence alignment。我想在Python中这样做,但如果更实用,我可以使用外部软件或其他语言。数据不是特别大,我没有强大的性能要求,我可以容忍近似值(即我只需要找到足够好的对齐)。唯一的问题是字符串是常规字符串(即UTF-8字符串可能带有应该被视为常规字符的换行符);它们不是DNA序列或蛋白质序列。
我可以在生物信息学中找到大量工具和信息,具有特定的复杂文件格式和一系列我不需要的功能,但很难找到简单案例的软件,库或示例代码字符串。我可以重新实现这个问题的许多算法中的任何一个,或者将我的字符串编码为DNA,但必须有更好的方法。你知道任何解决方案吗?
谢谢!
答案 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中查看更多详细信息。