2011-04-28 36 views
17

के लिए एकाधिक अनुक्रम संरेखण की गणना कैसे करें मैं एक प्रोग्राम लिख रहा हूं जिसमें स्ट्रिंग्स के सेट के multiple sequence alignment की गणना करना है। मैं पाइथन में ऐसा करने की सोच रहा था, लेकिन अगर यह अधिक व्यावहारिक है तो मैं सॉफ्टवेयर या किसी अन्य भाषा का बाहरी टुकड़ा उपयोग कर सकता हूं। डेटा विशेष रूप से बड़ा नहीं है, मेरे पास मजबूत प्रदर्शन आवश्यकताओं नहीं हैं और मैं अनुमानों को सहन कर सकता हूं (यानी मुझे केवल पर्याप्त संरेखण खोजने की आवश्यकता है)। एकमात्र समस्या यह है कि तार नियमित तार होते हैं (यानी यूटीएफ -8 स्ट्रिंग्स संभावित रूप से न्यूलाइन के साथ जिन्हें नियमित चरित्र के रूप में माना जाना चाहिए); वे डीएनए अनुक्रम या प्रोटीन अनुक्रम नहीं हैं।टेक्स्ट स्ट्रिंग्स

मैं विशिष्ट जटिल फाइल प्रारूपों के साथ जैव सूचना विज्ञान में सामान्य मामलों के लिए कई टूल और जानकारी पा सकता हूं और मुझे कई सुविधाओं की आवश्यकता नहीं है, लेकिन यह सरल, सरलता के लिए सॉफ्टवेयर, पुस्तकालय या उदाहरण कोड खोजने के लिए अप्रत्याशित रूप से कठिन है तारों का मामला मैं शायद इस समस्या के लिए कई एल्गोरिदम में से किसी एक को फिर से कार्यान्वित कर सकता हूं या मेरी स्ट्रिंग को डीएनए के रूप में एन्कोड कर सकता हूं, लेकिन एक बेहतर तरीका होना चाहिए। क्या आप किसी भी समाधान के बारे में जानते हैं?

धन्यवाद!

+0

गणना करके आपका क्या मतलब है? क्या आप एक सर्वोत्तम संरेखण पाने की कोशिश कर रहे हैं? – DTing

+0

हां, या एक उचित रूप से अच्छा संरेखण (अनुमान ठीक है)। – a3nm

+0

क्या आप भी एक बेहतर diff उपकरण की तलाश में हैं? –

उत्तर

14
  • एकाधिक अनुक्रमों को संरेखित करने का सबसे आसान तरीका कई जोड़ों के संरेखण करना है।

पहले प्रत्येक जोड़ी के लिए जोड़ी के समानता स्कोर प्राप्त करें और उन स्कोर को स्टोर करें। यह प्रक्रिया का सबसे महंगा हिस्सा है। उस जोड़ी को चुनें जिसमें सबसे अच्छा समानता स्कोर है और वह संरेखण करें। अब अनुक्रम को चुनें जो गठबंधन अनुक्रमों के सेट में अनुक्रमों में से एक को सबसे अच्छा संरेखित करता है, और उस जोड़ी के संरेखण के आधार पर इसे गठबंधन सेट पर संरेखित करें। दोहराएँ जब तक सभी दृश्यों में हैं।

आप के एक दृश्य संरेखित जब गठबंधन दृश्यों, (एक जोड़ो में संरेखण के आधार पर), जब आप अनुक्रम सेट में है कि पहले से ही में एक खाई डालने , आप गठबंधन सेट में सभी अनुक्रमों में उसी स्थान पर अंतराल डालें।

लाफ्रासू ने यूटीएफ -8 तारों के जोड़ी के संरेखण के लिए उपयोग करने के लिए SequneceMatcher() एल्गोरिदम का सुझाव दिया है। मैंने जो वर्णन किया है वह आपको कई अनुक्रमों तक विस्तारित करने के लिए काफी दर्द रहित, उचित रूप से सभ्य तरीका प्रदान करता है।

यदि आप रुचि रखते हैं, तो यह गठबंधन अनुक्रमों के छोटे सेटों को बनाने और उन्हें अपनी सर्वश्रेष्ठ जोड़ी पर संरेखित करने के बराबर है। यह बिल्कुल वही परिणाम देता है, लेकिन यह एक आसान कार्यान्वयन है।

+0

मैं मानता हूं कि यह संभव है, लेकिन यह अभी भी कुछ काम है। वहां * एकाधिक अनुक्रम संरेखण के लिए समर्पित एल्गोरिदम हैं जो कम्प्यूटेशनल जीवविज्ञान में सभी जगहों पर प्रतीत होते हैं - वहां * स्ट्रिंग के लिए एक ही चीज करने के लिए कुछ तरीका है। (या यदि ऐसा नहीं है, तो मुझे लगता है कि मुझे इसे लिखना होगा, लेकिन यह आश्चर्यजनक होगा ...) वैसे भी आपके सहायक उत्तर के लिए धन्यवाद, मैं इसे एक त्वरित और गंदे समाधान के लिए लाफ्रासू के वर्तमान के साथ जोड़ दूंगा अगर कुछ बेहतर दिखाई नहीं देता है। – a3nm

3

क्या आप निम्न में से कुछ त्वरित और गंदे की तलाश में हैं?

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() 
+0

अधिक सटीक होने के लिए: अनुक्रम मैचर() वास्तव में वही करता है जो मुझे चाहिए कि मेरे पास दो से अधिक अनुक्रम हैं, और मुझे नहीं लगता कि मैं जोड़ों के संरेखण से वैश्विक संरेखण कैसे कर सकता हूं। मुझे लगता है कि मैं आम भागों को छेड़छाड़ करने वाली कुछ गंदे चाल को पका सकता हूं, लेकिन अगर मैं कई अनुक्रमों के लिए नियमित रूप से साफ एल्गोरिदम हैं तो मैं ऐसा कुछ करने के लिए तैयार नहीं हूं। क्या आप SequenceMatcher() जैसे कुछ भी जानते हैं लेकिन दो से अधिक तारों के लिए? – a3nm

+0

@ a3_nm: आप सही हैं, _local_ pairwise संरेखण के सेट से _globally_ इष्टतम संरेखण ढूंढना मुश्किल है। मैं अभी भी इस बारे में सोच रहा हूँ। – lafras

1

मैं बहुत हाल ही में एक अजगर स्क्रिप्ट है कि स्मिथ-वाटरमैन एल्गोरिथ्म चलाता है (जो है क्या डीएनए या प्रोटीन दृश्यों के लिए गैप वाले स्थानीय अनुक्रम संरेखण उत्पन्न करने के लिए प्रयोग किया जाता है) लिखा है। यह लगभग निश्चित रूप से सबसे तेज़ कार्यान्वयन नहीं है, क्योंकि मैंने इसे गति के लिए अनुकूलित नहीं किया है (इस समय मेरी बाधा नहीं), लेकिन यह काम करता है और तारों में प्रत्येक चरित्र की पहचान की परवाह नहीं करता है। मैं इसे यहां पोस्ट कर सकता हूं या आपको फाइलों को ईमेल कर सकता हूं यदि वह ऐसी चीज है जिसे आप ढूंढ रहे हैं।

+0

यह काफी अच्छा लगता है, सिवाय इसके कि स्मिथ-वॉटरमैन केवल दो अनुक्रमों के लिए है, जबकि मेरे पास और अधिक है ... – a3nm

+0

@ डेव वैज्ञानिक क्या आप स्क्रिप्ट साझा कर सकते हैं? – tashuhka

+0

@tashuhka ईमानदारी से कोई विचार नहीं कि यह इस बिंदु पर हो सकता है। यदि आप 'स्मिथ-वॉटरमैन पायथन' पर क्लिक करते हैं तो हिट का एक टन आता है, जिसमें से कम से कम आप पीआईपी के माध्यम से प्राप्त कर सकते हैं। – DaveTheScientist

1

MAFFT संस्करण 7.120+ एकाधिक टेक्स्ट संरेखण का समर्थन करता है। इनपुट FASTA format जैसा है लेकिन अनुक्रमों और आउटपुट के बजाय LATIN1 टेक्स्ट के साथ FASTA प्रारूप को गठबंधन किया गया है।एक बार स्थापित, इसे चलाने के लिए आसान है:

mafft --text input_text.fa > output_alignment.fa 

हालांकि MAFFT जैविक अनुक्रम संरेखण के लिए एक परिपक्व उपकरण है, पाठ संरेखण मोड उपयोगकर्ता परिभाषित स्कोरिंग मैट्रिक्स की अनुमति सहित भविष्य की योजनाओं के साथ विकास के चरण में है। आप the documentation में और विवरण देख सकते हैं।

+1

आपकी मदद के लिए फिर से धन्यवाद! – a3nm

संबंधित मुद्दे