शोर स्ट्रिंग की सूची से विहित स्ट्रिंग निकालें


10

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

ऐसी ही एक सूची है।

  • स्टार वार्स: एपिसोड IV एक नई आशा | StarWars.com
  • स्टार वार्स एपिसोड IV - ए न्यू होप (1977)
  • स्टार वार्स: एपिसोड IV - एक नई आशा - सड़े हुए टमाटर
  • देखो स्टार वार्स: प्रकरण IV - एक नई आशा ऑनलाइन नि: शुल्क
  • स्टार वार्स (1977) - ग्रेटेस्ट फिल्म्स
  • [REC] 4 पोस्टर आउटबोर्ड मोटर द्वारा मौत का वादा करता है - SciFiNow

इस सूची के लिए, नियमित अभिव्यक्ति से मेल खाने वाला कोई भी स्ट्रिंग ^Star Wars:? Episode IV (- )?A New Hope$स्वीकार्य होगा।

मैंने कोर्टेर पर मशीन लर्निंग पर एंड्रयू एनजी के पाठ्यक्रम को देखा है, लेकिन मैं एक समान समस्या नहीं पा रहा था।


2
PS मुझे लगता है कि आप जिस शब्द की तलाश कर रहे हैं वह "कैनोनिकल" है
सीन ओवेन

क्या "सबसे संभावित" / "सबसे अधिक सेंसेंसिव" स्ट्रिंग आप एक नियमित अभिव्यक्ति को बेहतर बनाने के लिए देख रहे हैं? या सूची में तार में से एक?
MrMititology

@ मेरिटोलॉजी मैं एक नियमित अभिव्यक्ति की तलाश में नहीं हूं। मैंने अपने प्रश्न में एक नियमित अभिव्यक्ति दर्शाई है कि मैं इस बात को स्पष्ट करने के लिए कि जिस प्रकार के तार मैं सही होगा, उसके लिए कितना लचीला हूं।
लैक्टन

ठीक। फिर मैंने जो जवाब दिया, वह आपके लिए काम करना चाहिए।
18

क्या यह एनईआर (इकाई मान्यता नाम) के तहत आएगा?
हिप्पिएट्रैल

जवाबों:


4

एक भोले समाधान के रूप में मैं पहले उन स्ट्रिंग्स का चयन करने का सुझाव दूंगा जिनमें सूची के अंदर सबसे अधिक बार टोकन होते हैं। इस तरह आप अप्रासंगिक स्ट्रिंग से छुटकारा पा सकते हैं।

दूसरे वाक्यांश में मैं बहुसंख्यक मतदान करूंगा। 3 वाक्य मानते हुए:

  • स्टार वार्स: एपिसोड IV एक नई आशा | StarWars.com
  • स्टार वार्स एपिसोड IV - ए न्यू होप (1977)
  • स्टार वार्स: एपिसोड IV - एक नई आशा - सड़े हुए टमाटर

मैं एक-एक करके टोकनों से गुज़रता। हम "स्टार" से शुरू करते हैं। यह जीतता है क्योंकि इसके साथ सभी स्ट्रिंग शुरू होते हैं। "युद्ध" भी जीतेंगे। अगला एक ":" है। यह भी जीत जाएगा।

सभी टोकन "होप" तक बहुमत से मतदान करेंगे। "होप" के बाद अगला टोकन "या तो" होगा। ", या" ("या" - "कोई भी बहुमत मतदान में नहीं जीतेगा इसलिए मैं यहाँ रुक जाऊंगा!"

एक और समाधान शायद सबसे लंबे समय तक सामान्य उपयोग के बाद होगा

जैसा कि मैंने कहा कि मैं इसके बारे में ज्यादा नहीं हूं। तो आपकी समस्या के लिए और अधिक बेहतर समाधान हो सकते हैं :-)


3

पहले तारों के सभी जोड़ों के बीच की दूरी संपादित करें। देखHttp://en.wikipedia.org/wiki/Edit_distance और http://web.stanford.edu/class/cs124/lec/med.pdf । फिर कुछ दूरी की सीमा के आधार पर किसी भी आउटलेर स्ट्रिंग्स को बाहर करें।

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.