विदेशी ग्रंथों के साथ काम करें। किसी भाषा को समझने और सीखने का प्रतिशत कैसे बढ़ाया जाए?

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



मैंने सोचा था कि हाथ पर इस तरह के "अनुवादक" होना अच्छा होगा, और इसलिए मैंने इसे अजगर में लागू करने का फैसला किया। मैं हर किसी से पूछता हूं कि बिल्ली के नीचे किसकी दिलचस्पी है।



शब्द गणना



कार्यक्रम लिखते समय, मुझे निम्नलिखित तर्क द्वारा निर्देशित किया गया था। सबसे पहले आपको निचले अक्षर के साथ पूरे पाठ को फिर से लिखने की जरूरत है, अनावश्यक चिह्नों और प्रतीकों को हटा दें (!?, आदि) और गिनें कि पाठ में प्रत्येक शब्द कितनी बार दिखाई देता है। Google के कोड से प्रेरित होकर, मैंने इसे थोड़ी सी भी कठिनाई के बिना किया, लेकिन मैंने परिणामों को थोड़ा अलग रूप में लिखने का फैसला किया, जिसका नाम {1: [group of words that is with frequency 1], 2: [--//-- with frequency 2], etc.}



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



 def word_count_dict(filename, dictList=de500): count = {} txt = re.sub('[,.!?":;()*]', '', open(filename, 'r').read().lower()) words = txt.split() for word in words: if not word in count: count[word] = 1 else: count[word] += 1 return {i: sorted([w for w in count if (count[w]==i and w not in dictList.values())], key=lambda x: txt.index(x)) for i in set(count.values())}
      
      





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



शब्दों का अनुवाद



सुविधाजनक ऑनलाइन अनुवादक की खोज में कई मिनट बिताने के बाद, Google और Yandex को कार्रवाई में जाँचने का निर्णय लिया गया। चूंकि Google ने अनुवाद एपीआई को ठीक 3 साल और 1 दिन पहले बंद कर दिया था, इसलिए हम WNeZRoS द्वारा प्रस्तावित वर्कअराउंड का उपयोग करेंगे। किसी विशेष शब्द के अनुरोध के जवाब में, Google एक अनुवाद, वैकल्पिक अनुवाद विकल्प और उनके उल्टे अनुवाद (जो समानार्थी है) प्रदान करता है। सामान्य रूप से यांडेक्सा का उपयोग करने के लिए एक कुंजी की आवश्यकता होती है, और अनुरोध के जवाब में आप न केवल अनुवाद पा सकते हैं, बल्कि उदाहरण भी दे सकते हैं, और शायद कुछ और। दोनों मामलों में, उत्तर में json प्रारूप में एक सूची होगी, जो Google के लिए काफी सरल और यांडेक्स के लिए कुछ जटिल होगी। इस कारण से, और इसलिए भी कि Google अधिक भाषाओं (और अक्सर शब्दों) को जानता है, इसे उस पर रहने का निर्णय लिया गया था।



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



 def tranlsate(word, key, lan1='de', lan2='ru', alt=True, syn=True): g = Grab(log_file = 'dict.txt') link = 'http://translate.google.ru/translate_a/t?client=x&text='\ + word + '&sl=' + lan1 + '&tl=' + lan2 g.go(link) data = json.load(open('dict.txt')) translation, noun, alternatives, synonims = 0, 0, 0, 0 try: translation = data[u'sentences'][0][u'trans'] noun = data[u'dict'][0][u'pos'] alternatives = data['dict'][0]['terms'] synonims = data['dict'][0]['entry'][0]['reverse_translation'] except: pass if lan1=='de' and noun==u' ': word = word.title() if translation: print ('['+str(key)+']', word, ': ', translation) if alt and alternatives: [print (i, end=', ') for i in alternatives] print ('\r') if syn and synonims: [print (i.encode('cp866', errors='replace'), end=', ') for i in synonims] print ('\n')
      
      





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



अनुवाद फ़ंक्शन को कॉल करें



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



 def print_top(filename, n=100): mydict = word_count_dict(filename) mydict_keys = sorted(mydict, reverse=True)[0:n] [[tranlsate(word, key) for word in mydict[key]] for key in mydict_keys]
      
      







सबसे ज्यादा इस्तेमाल होने वाले शब्दों की सूची



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



यदि कोई अंग्रेजी या किसी अन्य भाषा में समान सूची बनाना चाहता है, तो मैं आभारी रहूंगा यदि वह इसे साझा करता है ताकि मैं इसे मेरे साथ जोड़ सकूं।



प्रारंभिक परिणाम



कार्यक्रम को चलाकर, आप लगभग निम्नलिखित रूप में परिणाम प्राप्त कर सकते हैं:



 [  ] :   , 
      
      







ठीक है, कोड लिखा है, कार्यक्रम काम करता है, लेकिन यह कितना सुविधाजनक और कुशल है? इस प्रश्न का उत्तर देने का प्रयास करने के लिए, मैंने सत्यापन के लिए कुछ जर्मन ग्रंथों को लिया।



डॉयचे वेले का पहला लेख ऑस्ट्रेलिया के पास ड्यूश बैंक के लिए कोयला खनन के वित्तपोषण के विषय से संबंधित है। लेख में 498 शब्द हैं, जिनमें से 15 सबसे अधिक बार पाठ में सामने आए (हम बहिष्कार के लिए 50 सबसे अधिक इस्तेमाल किए जाने वाले जर्मन शब्दों की सूची का उपयोग करते हैं) पूरे पाठ के 16.87% के अनुरूप हैं। मोटे तौर पर, इसका मतलब है कि अगर हम यह मान लें कि कोई व्यक्ति इन शब्दों को नहीं जानता है, तो पाठ में पाए गए सभी शब्दों का 6.67% अनुवाद पढ़ने के बाद, उसकी समझ का स्तर लगभग 17% बढ़ जाएगा (यदि आप पाठ में केवल परिचित शब्दों की संख्या से समझ के स्तर को मापते हैं) । पहली नज़र में, बहुत अच्छा।



स्पाइजेल का दूसरा लेख बताता है कि यूक्रेन में राष्ट्रपति चुनावों में पोरोशेंको की जीत पर जर्मन डीएएक्स स्टॉक इंडेक्स ने कैसे प्रतिक्रिया दी (हां, वह बढ़ गया)। लेख में 252 शब्द हैं, जिनमें से 8 सबसे आम हैं (6.06%) इसी तरह 11.9% पाठ के अनुरूप हैं।



इसके अलावा, यह ध्यान दिया जाना चाहिए कि यदि पाठ का अनुवाद काफी छोटा है, ताकि प्रत्येक शब्द केवल एक बार (उदाहरण के लिए, ई-मेल द्वारा प्राप्त एक संदेश) हो, तो प्रस्तावित अनुवाद का उसी क्रम में अनुसरण करना, जैसे कि पाठ में जाने वाले शब्द बहुत सुविधाजनक हैं।



यह सुंदर लगता है (एस क्लिंग स्कोन), लेकिन ये बहुत कठोर परीक्षण हैं क्योंकि मैंने बहुत सारे परिसर में प्रवेश किया है। मुझे लगता है कि यह जांचने के लिए कि यह विचार कैसे एक विदेशी भाषा में ग्रंथों के साथ काम करने की सुविधा प्रदान कर सकता है, केवल इस कार्यक्रम के कुछ नियमित उपयोग के साथ संभव है, जो दुर्भाग्य से, बहुत सुविधाजनक नहीं है। पाठ का अनुवाद करने के लिए, आपको पहले इसे एक .txt फ़ाइल में कॉपी करना होगा और फ़ाइल नाम को फ़ाइल नाम चर पर असाइन करना होगा, और फिर print_top फ़ंक्शन चलाना होगा।



क्या याद आ रही है?



एक निष्कर्ष के बजाय, मैं इस बात को प्रतिबिंबित करना चाहूंगा कि इस स्तर पर क्या गायब है, और यह कैसे सुधार किया जा सकता है।



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



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



पूरे कोड को स्पॉइलर के नीचे, साथ ही साथ गिटब पर पाया जा सकता है।



स्रोत कोड
 # -*- coding: utf-8-sig -*- from __future__ import print_function import re import json from pprint import pprint from grab import Grab from dictDe import * def tranlsate(word, key, lan1='de', lan2='ru', alt=True, syn=True): """Prints the number of counts, word, translation, and example from lan1 to lan2 according to Translate.Google.""" # First, write down a translation in some auxiliary txt file # and load it in json format g = Grab(log_file = 'dict.txt') link = 'http://translate.google.ru/translate_a/t?client=x&text='\ + word + '&sl=' + lan1 + '&tl=' + lan2 g.go(link) data = json.load(open('dict.txt')) # Then, let's try to get all the necessary elements in json translation, noun, alternatives, synonims = 0, 0, 0, 0 try: translation = data[u'sentences'][0][u'trans'] noun = data[u'dict'][0][u'pos'] alternatives = data['dict'][0]['terms'] synonims = data['dict'][0]['entry'][0]['reverse_translation'] except: pass # German nouns should begin with capital letter if lan1=='de' and noun==u' ': word = word.title() # Finally, print out counts, word, translation with alternatives # and synonims, if applicable. Encoding is added up to allow # printing in cmd if you have a russian version of Windows if translation: print ('['+str(key)+']', word, ': ', translation) if alt and alternatives: [print (i, end=', ') for i in alternatives] print ('\r') if syn and synonims: [print (i.encode('cp866', errors='replace'), end=', ') for i in synonims] print ('\n') def word_count_dict(filename, dictList=de50): """Returns a dictionary with key being number of counts and value being a list of words with that key. dictList is an optional argument: it is to eliminate the most common words. Default is the dictionary of the 50 most common German words""" count = {} txt = open(filename, 'r').read().lower() txt = re.sub('[,.!?":;()*]', '', txt) words = txt.split() for word in words: if not word in count: count[word] = 1 else: count[word] += 1 return {i: sorted([w for w in count if (count[w]==i and w not in dictList.values())], key=lambda x: txt.index(x)) for i in set(count.values())} def print_top(filename, n=100): """Generates the top count groups for the given file. Default number equals 10. Drop reverse if you want to print the less frequent words in the text.""" mydict = word_count_dict(filename) mydict_keys = sorted(mydict, reverse=True)[0:n] [[tranlsate(word, key) for word in mydict[key]] for key in mydict_keys] filename = 'dictext.txt' print (print_top(filename))
      
      








All Articles