स्टेमिंग और लेमेटाइजेशन Python उदाहरण सहित NLTK

स्टेमिंग और लेमेटाइजेशन क्या है? Python एनएलटीके?

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

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

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

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

उदाहरण के लिये

He was riding.	
He was taking the ride.

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

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

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

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

उत्पादन:

wait	
wait	
wait	
wait 

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

Code स्पष्टीकरण:

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

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

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

कार्यक्रम:

from nltk.stem import PorterStemmer
from nltk.tokenize import sent_tokenize, word_tokenize
sentence="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)

आउटपुट:

hello	
guru99	
,	
you	
have	
build	
a	
veri	
good	
site	
and	
I	
love	
visit	
your	
site	 

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

Code स्पष्टीकरण:

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

निष्कर्ष:

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

लेमेटाइजेशन क्या है?

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

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

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

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

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

Code लेम्माटाइजेशन और स्टेमिंग के बीच अंतर करना

स्टेमिंग Code:

import nltk
from nltk.stem.porter import PorterStemmer
porter_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 studi
Stemming for studying is studi
Stemming for cries is cri
Stemming for cry is cri

lemmatization Code:

import nltk
	from nltk.stem import 	WordNetLemmatizer
	wordnet_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 study
Lemma for studying is studying
Lemma for cries is cry
Lemma for cry is cry

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

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

लेम्माटाइजर का उपयोग मामला

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

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

from nltk.corpus import wordnet as wn
	from nltk.stem.wordnet import WordNetLemmatizer
	from nltk import word_tokenize, pos_tag
	from collections import defaultdict
	tag_map = defaultdict(lambda : wn.NOUN)
	tag_map['J'] = wn.ADJ
	tag_map['V'] = wn.VERB
	tag_map['R'] = wn.ADV

	text = "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)

लेम्माटाइजर का उपयोग मामला

Code व्याख्या

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

उत्पादन:

guru99 => guru99				
is => be				
totally => totally				
new => new				
kind => kind				
of => of				
learning => learn				
experience => experience				
. => .				 

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

इस पोस्ट को संक्षेप में इस प्रकार लिखें: