मैं इयरली के पेपर से शब्दावली और अंकन का उपयोग कर रहा हूं । यह संभव है कि आपके द्वारा पढ़ा गया वर्णन अलग हो।
यह बार-बार लगता है कि सामान्य सीएफ पार्सिंग एल्गोरिदम को पहली बार एक पहचानकर्ता के रूप में प्रस्तुत किया जाता है, और फिर वास्तव में पार्स पेड़ों और पार्स जंगलों के निर्माण के लिए आवश्यक सूचना प्रबंधन को बाद में जोड़ा गया है। एक कारण यह हो सकता है कि साझा किए गए जंगल के निर्माण के लिए आवश्यक जानकारी को रखने के लिए घन स्थान आवश्यकता होती
है, जहाँ इनपुट स्ट्रिंग की लंबाई पार्स हो रही है, लेकिन पहचान के लिए स्थान की आवश्यकता केवल वर्ग है। , जब यह जानकारी संरक्षित नहीं है। इस अंतरिक्ष जटिलता में वृद्धि का कारण काफी सरल है: पार्स वन का आकार घन हो सकता है।O(n3)nO(n2)
सबसे खराब स्थिति समय जटिलता , जैसा कि सर्वविदित है।O(n3)
अर्ली के एल्गोरिथ्म के लिए सबसे अच्छा संदर्भ बेशक एले के पेपर है , लेकिन यह पार्स वन के निर्माण के बारे में बहुत स्पष्ट नहीं है। यह वास्तव में एक गन्दा व्यवसाय हो सकता है, धारा 7 पृष्ठ 101 की तेज़ बात से अधिक प्रकट होगा। सच कहूं तो, अर्ले पार्स वन, या जंगल की बात नहीं करता, बल्कि " सभी संभावित पार्स पेड़ों का एक सचित्र प्रतिनिधित्व " करता है। और उसके लिए एक अच्छा कारण है: अगर उसने अपने व्याकरण के अनुसार जंगल का उत्पादन करने की कोशिश की, तो उसका स्थान (इसलिए समय) जटिलता की सीमा पर चढ़ जाएगी जहां सबसे लंबे आकार का होता है दाहिने हाथ से शासन करें। यही कारण है कि अन्य एल्गोरिदम बाइनरी रूप में व्याकरण का उपयोग करते हैं (जरूरी नहीं कि चॉम्स्की नॉर्मल फॉर्म (CNF))।O(ns+1)s
दरअसल, अर्ली द्विआधारी रूप का इस्तेमाल करते हैं , क्योंकि यह क्यूबिक टाइम जटिलता के लिए आवश्यक है। यह राज्यों में नियम डॉट की प्रमुख भूमिकाओं में से एक है। लेकिन यह अंतर्निहित द्विआधारी रूप द्विअर्थी व्याकरण के अनुसार पर्से और जंगलों का उत्पादन करता है, मूल के लिए नहीं, जो मुझे डर है, अस्पष्टता का एक प्रमुख स्रोत है। यह नीचे और विस्तृत है।
यह समझने का एक अच्छा तरीका है कि जंगल कैसे प्राप्त किया जाता है, संभवतः इसे एक सरल मामले में देखने के लिए है, CYK एल्गोरिदम । इसे अक्सर एक पहचानकर्ता के रूप में भी वर्णित किया जाता है, और अंत में पार्सर पहलू जोड़ा जाता है। आप विकिपीडिया में विवरण देख सकते हैं। जंगल बनाने के लिए आवश्यक जानकारी वे "बैकपॉइंटर्स" की तालिका में संग्रहीत करते हैं।
बैकपॉइंट अनिवार्य रूप से सबस्ट्रिंग (एक संबद्ध प्रतीक) के संकेत हैं जो कुछ नियम के अनुसार स्ट्रिंग के घटक बनाते हैं। वे एक विकल्प को पार्स करने के सभी संभव तरीके देते हैं। याद रखें कि CYK द्विआधारी रूप का उपयोग करता है, आमतौर पर CNF, ताकि चीजें सरल हो। CYK पार्सर में मूल रूप से अर्ली के रूप में एक ही गतिशील प्रोग्रामिंग संरचना है, लेकिन बहुत सरल है। इसलिए इसे अच्छी तरह से समझना एक महत्वपूर्ण मदद हो सकती है।
अर्ली के एल्गोरिथ्म पर वापस जाने पर, मुझे विश्वास नहीं है कि आपको स्वीकृति देने या पेड़ों और जंगलों के निर्माण के लिए अर्ली वेक्टर की आवश्यकता है। इयरली अपने पेपर में वेक्टर को केवल 97 के कार्यान्वयन के तीसरे पैराग्राफ में कहता है। यह केवल एक बेहतर जटिलता प्राप्त करने के लिए, कुछ दिए गए स्ट्रिंग स्थिति k पर वापस इंगित करने वाले राज्यों की खोज को तेज करने के लिए केवल एक उपकरण है। लेकिन सभी जानकारी राज्यों के सूचियों के रूप में लागू राज्य सेटों में है। हालाँकि, यह जानकारी पार्स पेड़ों के जंगल के निर्माण के लिए पर्याप्त नहीं है, क्योंकि एल्गोरिथ्म उस रास्ते का ट्रैक नहीं रखता है जो किसी राज्य को प्राप्त हो सकता है। वास्तव में, वेक्टर का उपयोग कुशलता से पहले से ही पाए गए एक राज्य को छोड़ने के लिए किया जाता है, स्वतंत्र रूप से यह कैसे पाया गया।
अर्ली के लेख के खंड 7 में, वह बताते हैं कि "पहचानकर्ता को पार्सर बनाने के लिए", यानी पार्स पेड़ों को पुनर्प्राप्त करने में सक्षम होने के लिए, जिस तरह से पूर्णताएं होती हैं, उस पर नज़र रखना आवश्यक है।
हर बार जब हम ऑपरेशन करते हैं, तो एक स्टेट जोड़ते हैं
(लुकहैड को नजरअंदाज करते हुए) हम उस स्थिति में के उदाहरण से राज्य तक सूचक बनाते हैं जिसके कारण हमें ऑपरेशन करना पड़ा। यह इंगित करता है कि को रूप में पार्स किया गया था । यदि D अस्पष्ट है, तो इसमें से एक बिंदु का एक समूह होगा, प्रत्येक ऑपरेशन के लिए जो कारण बनता है को विशेष राज्य के सेट में जोड़ा जाएगा। प्रत्येक प्रतीक में
(जब तक कि यह टर्मिनल नहीं है), और इसी तरह से पॉइंटर्स भी होंगे, इस प्रकार लिए व्युत्पन्न पेड़ का प्रतिनिधित्व करेंगे ।E→αD.βgDD→γ.fDγE→αD.βgγD
ध्यान दें कि इस पाठ में, और पार्स किए गए स्ट्रिंग में सूचक हैं, यह इंगित करते हैं कि नियम की बाएं ओर की पहचान शुरू हुई है (जैसा कि दाएं हाथ के प्रतीक का अनुमान लगाया गया था। इसलिए स्ट्रिंग इंडेक्स है जहां मान्यता प्राप्त होती है। शुरुआत हुई, और यह इंडेक्स पर समाप्त हुआ । ये "पूर्ण बिंदु" CYK के पार्सर संस्करण के लिए वर्णित बैकपॉइंट्स (विकिपीडिया में बहुत अच्छी तरह से नहीं) के बराबर हैं।fgfD→γg
इस तरह के एक सूचक (उद्धरण में वर्णित है) हम जानते हैं कि से
नियम उदाहरण में को ही एक पेड़ (या वन) के रूप में विकसित किया जा सकता है, जो इनपुट स्ट्रिंग को इंडेक्स से इंडेक्स , जिसे हम नोट । ठीक नीचे नोड्स को नियम द्वारा दिया गया है । पूर्णता की तलाश करके जो ओर ले जाता है हम इसके बाद अन्य ऐसे पॉइंटर्स पा सकते हैं जो बताते हैं कि का अंतिम चिन्ह कैसे हैDE→αD.βgwf+1gwf+1:gDD→γD→γ.fDप्राप्त किया गया था, और इसलिए संभव पार्स पेड़ों पर अधिक जानकारी। इसके अलावा एक पूरा होने की स्थिति को देखते हुए, जो कि इयरली स्टेट सेट में अंतिम से पहले प्रतीक को देखते हैं, आप पाते हैं कि यह कैसे प्राप्त किया गया था, और इसी तरह।
मान लें कि आपने सभी आवश्यक बिंदुओं को कागज में इंगित किया है, तो आप पार्सर द्वारा मान्यता प्राप्त अंतिम प्रतीक से शुरू होने वाले सभी साझा पेड़ अभ्यावेदन प्राप्त कर सकते हैं, जो निश्चित रूप से व्याकरण का प्रारंभिक प्रतीक है।
लेकिन मैंने गन्दा हिस्सा भी छोड़ दिया । मान लीजिए कि आपके पास एक नियम
, जिसे मैं दाहिने हाथ की तरफ 2 प्रतीकों से अधिक समय तक चुनता हूं, और एक अस्पष्ट व्याकरण के लिए एक और नियम ।U→XYZW→UV
यह अच्छी तरह से हो सकता है कि पार्सर को ,
में और दोनों और में
। तो, नियम के साथ , दोनों और
में पार्स ।wf+1:gXwg+1:hYwh+1:iwh+1:jZU→XYZwf+1:iwf+1:jU
तो फिर यह भी हो सकता है कि दोनों और में दोनों पार्स । फिर, नियम , स्ट्रिंग
दो अलग-अलग तरीके से में पार्स होता है , जो व्याकरण की अस्पष्टता के अनुरूप होता है।wi+1:kwj+1:kVW→UVwf+1:kW
बेशक, दोहराए जाने वाले संगणना से बचने के लिए, अर्ले का एल्गोरिथ्म दो पार्सिंग संगणनाओं को यथासंभव साझा करने का प्रयास करेगा। यह वास्तव में क्या साझा करेगा जाहिर तौर पर और में और की मान्यता (और पार्सिंग) है । लेकिन यह वास्तव में थोड़ा और अधिक करेगा: यह दो अलग-अलग पार्स की शुरुआत को भी साझा करेगा जो को नियम साथ पहचानते हैं । मेरे मतलब यह है कि राज्य केवल एक बार मिल जाएगा (जो मैं वर्णन कर रहा हूं उसके संबंध में), राज्य सेट । यह दो पार्स का एक आम हिस्सा होगा। बेशक, चीजों को दूर करते समय अस्थायी रूप से विचलन होगाwf+1:gwg+1:hXYUU→XYZU→XY.ZfShZ बाद से वे डिस्टिक्टिंग सबस्ट्रिंग के अनुरूप होते हैं, जब तक कि वे फिर से अभिसरण न कर लें जब सब कुछ W में बदल जाता है, जब राज्य राज्य सेट में दो बार निर्मित ।W→UV.fSk
तो सिंटैक्स पेड़ों का जंगल एक बहुत ही अजीब हो सकता है, जिस तरह के स्यामनी ट्विन उपप्रकार हैं, जो कुछ नोड के पहले दो किनारों को साझा कर सकते हैं, लेकिन तीसरे किनारे पर नहीं। दूसरे शब्दों में, यह एक बहुत ही अजीब संरचना हो सकती है। यह स्पष्ट कर सकता है कि अर्ली ने इसे " सभी संभावित पार्स पेड़ों का एक तथ्यात्मक प्रतिनिधित्व " कहा, बिना अधिक विशिष्ट होने के।
व्याकरण को बदलने के बिना, सियामी जुड़वाँ को अलग करने के लिए कोई भी प्रयास, वृद्धि की जटिलता में परिणाम देगा। इसे करने का सही तरीका व्याकरण का द्वैत करना है।
उम्मीद है इससे आपको मदद मिलेगी। मुझे बताएं। लेकिन मैं जोर देकर कहता हूं कि CYK पार्सिंग की अच्छी समझ मदद कर सकती है। इयरली की तुलना में सरल अन्य एल्गोरिदम हैं, जो सभी सीएफ भाषाओं को कुशलतापूर्वक पार्स कर सकते हैं।
आप इस पार्स वन मुद्दे पर दो अन्य उत्तरों में अधिक सामान्य जानकारी पा सकते हैं: मैंने दिया: /cstheory/7374#18006 और https://linguistics.stackexchange.com/questions-4619#6120 । लेकिन वे अर्ली के एल्गोरिथ्म के विशिष्ट विवरणों में नहीं जाते हैं।