2008-09-08 30 views
44

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

क्या आपके पास एल्गोरिदम के साथ कोई अनुभव है? क्या आप जानते हैं कि एल्गोरिदम एक दूसरे से तुलना कैसे करते हैं?

मैं वास्तव में कुछ सलाह की सराहना करता हूं।

पीएस: हम सी # में कोडिंग कर रहे हैं, लेकिन आपको इसकी परवाह नहीं करनी चाहिए - मैं सामान्य रूप से एल्गोरिदम के बारे में पूछ रहा हूं।


ओह, मुझे खेद है कि मैं इसका उल्लेख करना भूल गया।

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

हम सामान्य तुलना प्रदर्शन कर सकते हैं नहीं है, क्योंकि तार के बाहर स्रोतों से निकाला, समय की सबसे, कुछ अतिरिक्त शब्द आदि

वैसे भी शामिल है, यह पता लगाने के लिए डुप्लिकेट नहीं है।

+1

क्या आप 'वास्तविक' तार (यानी, अंग्रेजी) या जैव सूचना विज्ञान से मेल खाते हैं? यदि वास्तविक तार, आप अपने प्रतिस्थापन मैट्रिक्स के लिए क्या उपयोग कर रहे हैं? –

+0

यहां इसी तरह के प्रश्न http://stackoverflow.com/questions/31494/how-to-detect-duplicate- डेटा और यहां http://stackoverflow.com/questions/42013/levenshtein-distance-based-methods-vs-उंडएक्स अन्य संबंधित टैग और खोज शब्दों के माध्यम से मिल सकते हैं। हालांकि, आपने बिल्कुल निर्दिष्ट नहीं किया * क्यों * आपको तारों से मिलान करने की आवश्यकता है - क्या आप डुप्लिकेट डेटा की जांच कर रहे हैं? –

उत्तर

32

ठीक है, सुईमेन-वुन्श (एनडब्ल्यू) बायोइनफॉरमैटिक्स साहित्य से क्लासिक एंड-टू-एंड ("ग्लोबल") संरेखक है। यह बहुत पहले FASTA पैकेज में "संरेखण" और "align0" के रूप में उपलब्ध था। अंतर यह था कि "0" संस्करण एंड-गैपिंग से बचने के पक्षपातपूर्ण नहीं था, जो अक्सर उच्च गुणवत्ता वाले आंतरिक मैचों को आसान बनाने की अनुमति देता था। स्मिथ-वाटमैन, मुझे संदेह है कि आप जानते हैं, एक स्थानीय संरेखक है और यह ब्लास्ट का मूल आधार है। फास्टा का अपना स्थानीय संरेखक था और साथ ही यह थोड़ा अलग था। ये सभी अनिवार्य रूप से ह्यूरिस्टिक विधियों का आकलन करने के लिए अलग-अलग चरित्र जोड़े (बायोइनफॉरमैटिक्स में, अक्सर डेहॉफ/"पीएएम", हेनिकोफ & हेनिकोफ, या अन्य मैट्रिस के लिए स्कोरिंग मीट्रिक से संबंधित लेवेनशेटिन दूरी का आकलन करने के लिए अनिवार्य रूप से प्रभावी तरीके हैं और आमतौर पर कुछ सरल और अधिक उचित रूप से प्रतिबिंबित होते हैं प्राकृतिक भाषा पर लागू होने पर भाषाई शब्द रूपरेखा में प्रतिस्थापन के)।

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

अब अपनी समस्या के रूप में: कई साल पहले, मुझे संदर्भ अनुक्रम के खिलाफ छोटे डीएनए पढ़ने की सटीकता की जांच करनी थी जिसे सही कहा जाता था और मैं कुछ "एन्चर्ड संरेखण" कहलाता था।

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

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

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

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

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

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

आशा है कि यह सहायक या कम से कम दिलचस्प है।

+1

यह वास्तव में बहुत ही रोचक है। – Paulius

4

हम अपने डेटाबेस में डुप्लिकेट ग्राहकों की जांच के लिए Levenshtein distance विधि का उपयोग कर रहे हैं। यह काफी अच्छी तरह से काम करता है।

6

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

5

वैकल्पिक एल्गोरिदम पर agrep (Wikipedia entry on agrep), FASTA and BLAST जैविक अनुक्रम मिलान एल्गोरिदम हैं देखने के लिए। ये approximate string matching के विशेष मामले हैं, Stony Brook algorithm repositry में भी। यदि आप एक-दूसरे से तार अलग-अलग तरीके निर्दिष्ट कर सकते हैं, तो आप शायद एक अनुरूप एल्गोरिदम पर ध्यान केंद्रित कर सकते हैं। उदाहरण के लिए, एस्पेल खराब स्पेलर्स और खराब टाइपर्स को समान रूप से समायोजित करने के लिए "कीबोर्ड" दूरी के संयोजन में "ध्वनि जैसा" (ध्वनि-मेटाफोन) दूरी के संयोजन का उपयोग करता है।

1

उपयोग FM Index उलटे पांव लौटने के साथ, Bowtie फजी एलाइनर में एक

1

आदेश मामूली बदलाव या वर्तनी में त्रुटियों के कारण बेमेल कम करने के लिए, मैं metaphone एल्गोरिथ्म का उपयोग किया है, तो Levenshtein दूरी (0 करने के लिए बढ़ाया के समान -100 प्रतिशत प्रतिशत के रूप में) निकटता के उपाय के लिए मेटाफोन एन्कोडिंग पर। ऐसा लगता है कि काफी अच्छी तरह से काम किया है।

0

सीडी-एमएन के उत्तर पर विस्तार करने के लिए, ऐसा लगता है कि आपको सामान्यीकरण समस्या का सामना करना पड़ रहा है। यह स्पष्ट नहीं है कि अलग-अलग लंबाई के साथ संरेखण के बीच स्कोर कैसे संभालें।

आपको जो दिलचस्पी है, उसे देखते हुए, आप अपने संरेखण के लिए पी-मान प्राप्त करना चाहेंगे। यदि आप सुलेमेन-वंसच का उपयोग कर रहे हैं, तो आप इन पी-वैल्यू कार्लिन-अल्ट्शचुल आंकड़ों का उपयोग कर http://www.ncbi.nlm.nih.gov/BLAST/tutorial/Altschul-1.html

ब्लास्ट स्थानीय संरेखण कर सकते हैं और इन आंकड़ों का उपयोग करके उनका मूल्यांकन कर सकते हैं। यदि आप गति के बारे में चिंतित हैं, तो यह उपयोग करने के लिए एक अच्छा उपकरण होगा।

एचएमएमईआर का उपयोग करने का एक और विकल्प है। एचएमएमईआर दृश्यों को संरेखित करने के लिए प्रोफाइल छिपे हुए मार्कोव मॉडल का उपयोग करता है। निजी तौर पर, मुझे लगता है कि यह एक और शक्तिशाली दृष्टिकोण है क्योंकि यह स्थितिगत जानकारी भी प्रदान करता है। http://hmmer.janelia.org/

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