दिलचस्प पोस्ट
लॉग-इन उपयोगकर्ता के पूरे नाम को खिड़कियों में कैसे प्राप्त करें? मैटलॉग से जावा कॉलिंग? टेबल घटक की मदद से JRBeanCollectionDataSource डेटा कैसे दिखाया जाए? मैं जीआईटी रिपॉजिटरी के भीतर एक मौजूदा गिट सबपलोड को कैसे स्थानांतरित करूं? रिक्त सूचक के लिए पते शून्य का उपयोग क्यों किया जाता है? एईएस सीटीआर 256 एन्क्रिप्शन ओपनएसएसएल पर ऑपरेशन का तरीका वसंत 3 एमवीसी, सही सिंटैक्स का इस्तेमाल करते हुए फ़ॉर्म बैकिंग ऑब्जेक्ट के रूप में <Foo> की सूची बनाएं कैसे कॉम्बो बॉक्स चयन के आधार पर UI को बदलने के लिए data.table बनाम dplyr: क्या एक अच्छी तरह से कुछ कर सकता है जो अन्य नहीं कर सकता है या खराब नहीं कर सकता है? स्विफ्ट में यूज़र इनोफ़ो से कीबोर्ड आकार प्राप्त करना VBA और एमएस एक्सेस में बैंग नोटेशन और डॉट नोटेशन सेब वॉच पर हार्ट रेट डेटा आईओएस एप पर छवियों को कैश करने का सबसे अच्छा तरीका? अगर / अन्य बयानों के अंदर कार्य घोषणाएं हैं? प्रत्येक सरणी के txt फ़ाइल को नए सरणी तत्व में पढ़ें

क्या एल्गोरिथ्म एक वर्तनी परीक्षक में सुझाव देता है?

शब्द सुझावों के साथ साथ वर्तनी परीक्षक को कार्यान्वित करते समय एल्गोरिथ्म का उपयोग किस प्रकार किया जाता है?

सबसे पहले मैंने सोचा कि यह प्रत्येक नए शब्द टाइप किए गए शब्दों की जांच कर सकता है (यदि शब्दकोश में नहीं मिला है) के खिलाफ यह शब्दकोश में प्रत्येक दूसरे शब्द से लेवेन्सशेटिन दूरी और शीर्ष परिणामों को लौट रहा है हालांकि, ऐसा लगता है कि यह अत्यधिक अक्षम है, पूरे शब्दकोश को बार-बार मूल्यांकन करने के लिए।

यह आम तौर पर कैसे किया जाता है?

वेब के समाधान से एकत्रित समाधान "क्या एल्गोरिथ्म एक वर्तनी परीक्षक में सुझाव देता है?"

पीटर नोर्विग द्वारा एक अच्छा निबंध है कि कैसे एक वर्तनी सुधारक को लागू किया जाए यह मूलतः एक क्रूर शक्ति का दृष्टिकोण है जो किसी दिए गए संपादन दूरी के साथ उम्मीदवार तार की कोशिश कर रहा है। ( यहां कुछ सुझाव दिए गए हैं कि आप ब्लूम फ़िल्टर और तेज़ उम्मीदवार हैशिंग का उपयोग करके वर्तनी सुधारक प्रदर्शन कैसे सुधार सकते हैं।)

वर्तनी परीक्षक की आवश्यकताओं को कमजोर है। आपको केवल यह पता लगाना है कि कोई शब्द शब्दकोश में नहीं है आप एक स्पेल चेकर बनाने के लिए ब्लूम फ़िल्टर का उपयोग कर सकते हैं जो कम स्मृति का उपयोग करता है एक प्राचीन संस्करण प्रोग्रामिंग पर्ल में जॉन बेंटले द्वारा अंग्रेजी शब्दकोश के लिए 64kb का उपयोग किया गया है।

बीके-ट्री एक वैकल्पिक दृष्टिकोण है एक अच्छा लेख यहाँ है

लेवेनशस्टीन दूरी वर्तनी परीक्षक के लिए बिल्कुल सही दूरी नहीं है। यह केवल सम्मिलन, विलोपन और प्रतिस्थापन जानता है ट्रांसपेज़ेशन अनुपलब्ध है और 1 चरित्र के स्थानांतरण के लिए 2 का उत्पादन करता है (यह 1 हटाएं और 1 प्रविष्टि है)। Damerau-Levenshtein दूरी सही संपादित दूरी है

"बुरे" हैश फ़ंक्शन का उपयोग करके मैंने उन सुझावों को तैयार करने के लिए एक दृष्टिकोण दिया है जो मैंने सफलतापूर्वक उपयोग किया है लेकिन कभी भी वर्णित नहीं देखा है, पहले से गणना करने के लिए सुझाव (शब्दकोश बनाने पर)

यह विचार है कि लोगों द्वारा किए जाने वाले वर्तनी की त्रुटियों को देखना, और हैश फ़ंक्शन को डिज़ाइन करने के लिए, जो कि सही वर्तनी के रूप में एक ही बाल्टी में गलत वर्तनी प्रदान करेगा।

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

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

अब, जब आप किसी गलत वर्तनी वाले शब्द को खोजते हैं, तो आप बाल्टी के लिए टकराव की सूचियों को देखते हैं कि सहायक अनुक्रमणिका में गलत वर्तनी के नक्शे। टा दा: आपके पास एक सुझाव सूची है! आपको बस उस पर शब्द रैंक करना है।

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

तो अब आप प्रत्येक सहायक अनुक्रमित में गलत वर्तनी खोजते हैं और रैंकिंग से पहले टकराव की सूची जोड़ती हैं।

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

अद्यतन : मैंने तब से एक एल्गोरिदम विवरण पाया है, जो कि इसके समान है, FAROO वितरित खोज । यह अभी भी एक संपादन-दूरी सीमित खोज है, लेकिन यह बहुत तेज है क्योंकि पूर्व-गणना चरण मेरे "खराब हैश फ़ंक्शन" विचार की तरह काम करता है। फेरो सिर्फ खराब हैश फ़ंक्शन का एक सीमित अवधारणा का उपयोग करता है।

कलन विधि

  1. इनपुट के रूप में गलत वर्तनी वाले शब्द लें
  2. टेक्स्ट फाइल में अपने आवृत्तियों के साथ अंग्रेजी शब्दों की सूची को स्टोर करें
  3. टर्नेरी सर्च ट्री में अपने सभी आवृत्तियों के साथ उपलब्ध सभी अंग्रेजी शब्द (टेक्स्ट फ़ाइल में संग्रहीत) दर्ज करें (यह माप कितनी बार एक शब्द अंग्रेजी भाषा में किया जाता है)।
  4. अब टर्नरी सर्च ट्री के साथ गुज़रते हैं –
    • टर्नरी सर्च ट्री में आने वाले प्रत्येक शब्द के लिए, गलत तरीके से वर्तनी वाले शब्द से अपनी लिवेंस्टीन दूरी की गणना करें।
    • यदि लेवेनस्टीन अंतर <= 3, शब्द को प्राथमिकता कतार में संग्रहीत करें
    • यदि दो शब्द एक ही दूरी को संपादित करते हैं, तो उच्च फ़्रीक्वेंसी के साथ एक भट्ठा होता है प्राथमिकता कतार से शीर्ष 10 आइटम प्रिंट करें

अनुकूलन

  1. यदि वर्तमान शब्द से इनपुट शब्द के उपस्ट्रिंग की दूरी 3 से अधिक है तो आप वर्तमान नोड के उपशीर्षक में शब्दों को समाप्त कर सकते हैं।

    आप अपने ब्लॉग पर इस एल्गोरिदम के अधिक विस्तृत विवरण और मेरे गिटब प्रोजेक्ट पर सभी स्रोत कोड पा सकते हैं।

शब्दकोश में प्रत्येक शब्द के लिए आपको सटीक संपादन दूरी जानने की आवश्यकता नहीं है आप एक सीमा मूल्य तक पहुंचने और शब्द को बाहर करने के बाद एल्गोरिथ्म को रोक सकते हैं। यह आपको कंप्यूटिंग समय की एक बहुत बचत करेगा।

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

यूनिक्स सिस्टम मैक इलराय द्वारा लिखित एक प्रोग्राम का उपयोग करता है एक वैकल्पिक तरीका ट्री का उपयोग करना है जो बड़ी फ़ाइलों के मामले में उपयोगी हो सकता है

  • मेरा ट्री प्रयोग
  • यूनिक्स जैसे प्रयोग

यूनिक्स दृष्टिकोण को एक विशाल शब्दकोश के लिए बहुत कम स्थान की आवश्यकता है क्योंकि यह स्कैटर हैश एल्गोरिदम का उपयोग करता है।