पायथन एनएलटीके के साथ स्टेमिंग और लेमेटेटाइजेशन

विषय - सूची:

Anonim

स्टेमिंग क्या है?

शब्दों के लिए स्टेमिंग एक तरह का सामान्यीकरण है। सामान्यीकरण एक ऐसी तकनीक है, जिसमें किसी वाक्य के शब्दों को उसके लुक को छोटा करने के क्रम में परिवर्तित किया जाता है। जिन शब्दों का अर्थ समान होता है लेकिन संदर्भ या वाक्य के अनुसार कुछ भिन्नता होती है वे सामान्यीकृत होते हैं।

दूसरे शब्द में, एक मूल शब्द है, लेकिन एक ही शब्द के कई रूप हैं। उदाहरण के लिए, मूल शब्द "खा" है और यह विविधताएं हैं "खाती है, खा रही है, खा रही है और पसंद है"। उसी तरह, स्टेमिंग की मदद से, हम किसी भी भिन्नता के मूल शब्द का पता लगा सकते हैं।

उदाहरण के लिए

He was riding.He was taking the ride.

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

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

स्टेमिंग समझने का कार्यक्रम

from nltk.stem import PorterStemmere_words= ["wait", "waiting", "waited", "waits"]ps =PorterStemmer()for w in e_words:rootWord=ps.stem(w)print(rootWord)

आउटपुट :

waitwaitwaitwait

कोड स्पष्टीकरण:

  • NLTk में एक स्टेम मॉड्यूल है जिसे आयात किया जाता है। अगर ifyou पूरा मॉड्यूल इम्पोर्ट करता है, तो प्रोग्राम भारी हो जाता है क्योंकि इसमें हजारों लाइनें होती हैं। तो पूरे स्टेम मॉड्यूल से, हमने केवल "पोर्टरस्टेमर" का आयात किया।
  • हमने एक ही शब्द के भिन्नता डेटा की एक डमी सूची तैयार की।
  • एक ऑब्जेक्ट बनाया जाता है जो वर्ग nltk.stem.porter.PorterStemmer के अंतर्गत आता है।
  • इसके अलावा, हमने इसे "लूप" के लिए एक के बाद एक करके पोर्टरस्टेमर को पास कर दिया। अंत में, हमें सूची में उल्लिखित प्रत्येक शब्द का आउटपुट रूट शब्द मिला।

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

अब हम एक पूर्ण वाक्य पास करते हैं और आउटपुट के रूप में इसके व्यवहार की जांच करते हैं।

कार्यक्रम:

from nltk.stem import PorterStemmerfrom nltk.tokenize import sent_tokenize, word_tokenizesentence="Hello Guru99, You have to build a very good site and I love visiting your site."words = word_tokenize(sentence)ps = PorterStemmer()for w in words:rootWord=ps.stem(w)print(rootWord)

आउटपुट:

helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite

कोड स्पष्टीकरण

  • पैकेज पोर्टरस्टेमर को मॉड्यूल स्टेम से आयात किया जाता है
  • वाक्य के टोकन के साथ-साथ शब्दों के आयात के लिए पैकेज
  • एक वाक्य लिखा जाता है जिसे अगले चरण में टोकन देना होता है।
  • इस चरण में शब्द टोकन लागू किया गया है।
  • PorterStemmer के लिए एक ऑब्जेक्ट यहाँ बनाया गया है।
  • लूप चलाया जाता है और कोड लाइन 5 में बनाई गई वस्तु का उपयोग करके प्रत्येक शब्द का स्टेमिंग किया जाता है

निष्कर्ष:

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

Lemmatization क्या है?

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

स्टेमेटिंग से बेहतर क्यों है लेमेटाइजेशन?

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

इसके विपरीत, लेम्मेटाइजेशन एक अधिक शक्तिशाली ऑपरेशन है, और यह शब्दों के रूपात्मक विश्लेषण को ध्यान में रखता है। यह लेम्मा को लौटाता है जो इसके सभी विभक्ति रूपों का आधार रूप है। शब्द बनाने और शब्द के उचित रूप की तलाश के लिए गहराई से भाषाई ज्ञान की आवश्यकता होती है। स्टेमिंग एक सामान्य ऑपरेशन है जबकि लेमेटेटाइजेशन एक बुद्धिमान ऑपरेशन है जहां शब्दकोश में उचित रूप दिखाई देगा। इसलिए, लेमेटेटाइजेशन बेहतर मशीन लर्निंग फीचर बनाने में मदद करता है।

Lemmatization और Stemming के बीच अंतर करने के लिए कोड

स्टेम कोड

import nltkfrom nltk.stem.porter import PorterStemmerporter_stemmer = PorterStemmer()text = "studies studying cries cry"tokenization = nltk.word_tokenize(text)for w in tokenization:print("Stemming for {} is {}".format(w,porter_stemmer.stem(w)))

आउटपुट:

Stemming for studies is studiStemming for studying is studiStemming for cries is criStemming for cry is cri

Lemmatization कोड

import nltkfrom nltk.stem import WordNetLemmatizerwordnet_lemmatizer = WordNetLemmatizer()text = "studies studying cries cry"tokenization = nltk.word_tokenize(text)for w in tokenization:print("Lemma for {} is {}".format(w, wordnet_lemmatizer.lemmatize(w)))

आउटपुट:

Lemma for studies is studyLemma for studying is studyingLemma for cries is cryLemma for cry is cry

आउटपुट की चर्चा:

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

लेमेटाइज़र के मामले का उपयोग करें:

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

पायथन में वर्डनेट लेमेटेटाइजेशन और पीओएस टैगिंग का उपयोग करते हुए रियल टाइम उदाहरण

from nltk.corpus import wordnet as wnfrom nltk.stem.wordnet import WordNetLemmatizerfrom nltk import word_tokenize, pos_tagfrom collections import defaultdicttag_map = defaultdict(lambda : wn.NOUN)tag_map['J'] = wn.ADJtag_map['V'] = wn.VERBtag_map['R'] = wn.ADVtext = "guru99 is a totally new kind of learning experience."tokens = word_tokenize(text)lemma_function = WordNetLemmatizer()for token, tag in pos_tag(tokens):lemma = lemma_function.lemmatize(token, tag_map[tag[0]])print(token, "=>", lemma)

कोड स्पष्टीकरण

  • सबसे पहले, कॉर्पस रीडर वर्डनेट आयात किया जाता है।
  • WordNetLemmatizer वर्डनेट से आयात किया जाता है
  • वर्ड टोकन और साथ ही भाषण टैग के कुछ हिस्सों को nltk से आयात किया जाता है
  • डिफ़ॉल्ट शब्दकोश संग्रह से आयात किया जाता है
  • शब्दकोश बनाया जाता है जहाँ पॉस_टैग (पहला अक्षर) ऐसे प्रमुख मूल्य हैं जिनके मान वर्डनेट शब्दकोश से मूल्य के साथ मैप किए जाते हैं। हमने केवल पहला अक्षर लिया है क्योंकि हम इसे बाद में लूप में उपयोग करेंगे।
  • पाठ लिखा और टोकन है।
  • ऑब्जेक्ट lemma_function बनाया गया है जिसका उपयोग लूप के अंदर किया जाएगा
  • लूप चलाया जाता है और लेमेटाइज्ड दो तर्कों को ले जाएगा एक टोकन है और अन्य में बोनट मान के साथ पॉस_टैग की मैपिंग है।

आउटपुट:

guru99 => guru99is => betotally => totallynew => newkind => kindof => oflearning => learnexperience => experience. => .

Lemmatization का वर्डनेट शब्दकोश के साथ एक करीबी रिश्ता है, इसलिए इस विषय का अध्ययन करना आवश्यक है, इसलिए हम इसे अगले विषय के रूप में रखते हैं