उन सुझावों को उत्पन्न करने के लिए एक दृष्टिकोण जो मैंने सफलतापूर्वक उपयोग किया है, लेकिन कभी भी कहीं भी वर्णित नहीं देखा गया है, "खराब" हैश कार्यों का उपयोग करके सुझावों को पूर्व-गणना (जब शब्दकोश का निर्माण करते हैं)।
यह विचार है कि लोगों द्वारा की जाने वाली वर्तनी त्रुटियों के प्रकारों को देखना, और हैश फ़ंक्शंस को डिजाइन करना जो एक गलत वर्तनी को उसी सही वर्तनी के रूप में निर्दिष्ट करेगा।
उदाहरण के लिए, एक सामान्य गलती गलत स्वर का उपयोग करना है, जैसे निश्चित के बजाय निश्चित । तो आप एक हैश फ़ंक्शन डिज़ाइन करते हैं जो सभी स्वरों को एक ही अक्षर के रूप में मानता है। ऐसा करने का एक आसान तरीका इनपुट शब्द को पहले "सामान्यीकृत" करना है और फिर एक सामान्य हैश फ़ंक्शन के माध्यम से सामान्यीकृत परिणाम डालना है। इस उदाहरण में, सामान्यीकरण फ़ंक्शन सभी स्वरों को छोड़ सकता है, इसलिए definite
बन जाता है dfnt
। "सामान्यीकृत" शब्द तब एक विशिष्ट हैश फ़ंक्शन के साथ हैशेड होता है।
इस विशेष हैश फ़ंक्शन का उपयोग करके अपने सभी शब्दों को एक सहायक इंडेक्स (हैश टेबल) में डालें। इस तालिका में बाल्टियाँ लंबे समय तक टकराने वाली सूचियाँ होंगी क्योंकि हैश फ़ंक्शन "खराब" है, लेकिन उन टकराव सूचियों को अनिवार्य रूप से पूर्व-संगणित सुझाव हैं।
अब, जब आपको एक गलत वर्तनी वाला शब्द मिलता है, तो आप बाल्टी के लिए टकराव सूचियों को देखते हैं जो कि असेंबलिंग मैप्स को इंडेक्स इंडेक्स में रखते हैं। ता डा: आपके पास एक सुझाव सूची है! आपको बस इस पर शब्दों को रैंक करना है।
व्यवहार में, आपको अन्य प्रकार के त्रुटियों के साथ अन्य सहायक कार्यों के साथ कुछ सहायक अनुक्रमित करने की आवश्यकता होगी, जैसे कि ट्रांसपोज्ड लेटर, सिंगल / डबल लेटर, और यहां तक कि एक ध्वनि-आधारित ध्वनि-जैसा कि ध्वन्यात्मक गलत वर्तनी को पकड़ने के लिए। व्यवहार में, मुझे सरल उच्चारण करने वालों को एक लंबा रास्ता तय करना पड़ा और अनिवार्य रूप से अप्रत्यक्ष रूप से अप्रचलित कुछ लोगों को तुच्छ टाइपोस ढूंढने के लिए मिला।
इसलिए अब आप प्रत्येक अनुक्रमणिका में गलत वर्तनी को देखते हैं और रैंकिंग से पहले टकराव सूचियों को एकत्र करते हैं।
याद रखें टकराव सूचियों में केवल वही शब्द हैं जो शब्दकोश में हैं। ऐसे दृष्टिकोणों के साथ जो वैकल्पिक वर्तनी उत्पन्न करने की कोशिश करते हैं (जैसा कि पीटर नॉरविग लेख में), आप हजारों उम्मीदवारों को प्राप्त कर सकते हैं (दसियों) जिन्हें आपको पहले शब्दकोश के खिलाफ फ़िल्टर करना होगा। पहले से गणना किए गए दृष्टिकोण के साथ, आपको शायद कुछ सौ उम्मीदवार मिलते हैं, और आप जानते हैं कि वे सभी सही ढंग से वर्तनी हैं, इसलिए आप सीधे रैंकिंग में छोड़ सकते हैं।
अद्यतन : मैंने तब से एक एल्गोरिथ्म विवरण पाया है जो इस के समान है, फेरो वितरित खोज । यह अभी भी एक एडिट-डिस्टेंस सीमित खोज है, लेकिन यह बहुत तेज़ है क्योंकि पूर्व-गणना चरण मेरे "खराब हैश फ़ंक्शंस" विचार की तरह काम करता है। FAROO सिर्फ एक खराब हैश फ़ंक्शन की सीमित अवधारणा का उपयोग करता है।