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

⚡ स्मार्ट सारांश

स्टेमिंग और लेम्माटाइजेशन पाठ को सामान्य बनाने की तकनीकें हैं। Python एनएलटीके (NLTK) शब्दों के विभिन्न रूपों को एक सामान्य आधार में बदल देता है, जहां स्टेमिंग (Streaming) बिना संदर्भ के प्रत्ययों को तेजी से निकालता है और लेम्माटाइजेशन (Lemmatization) अर्थ का उपयोग करके एक सच्चा शब्दकोश शब्द लौटाता है।

  • 🌱 स्टेमिंग: पोर्टरस्टेमर प्रत्ययों को छांटकर एक ऐसे मूल शब्द तक पहुंचता है जो शायद वास्तविक शब्द न हो।
  • 📚 नींबू पानी: WordNetLemmatizer शब्दकोश का मूल रूप लौटाता है, जिसे लेम्मा कहा जाता है।
  • अंतर: स्टेमिंग तेज़ है, जबकि लेम्माटाइज़ेशन धीमी है लेकिन अधिक सटीक और संदर्भ-जागरूक है।
  • 🔤 सामान्यीकरण: दोनों ही शब्दों के घनत्व को कम करते हैं ताकि मशीनें विभिन्न रूपों को एक ही विशेषता के रूप में मानें।
  • पीओएस टैग: शब्द भेद टैग पास करने से लेम्माटाइज़र कहीं अधिक सटीक हो जाता है।
  • 🤖 एआई के लाभ: स्वच्छ और मानकीकृत पाठ से मजबूत मशीन लर्निंग विशेषताएं और मॉडल तैयार होते हैं।

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

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

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

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

स्टेमिंग यह शब्दों को सामान्य बनाने की एक विधि है प्राकृतिक भाषा संसाधनयह एक ऐसी तकनीक है जिसमें वाक्य में शब्दों के समूह को क्रमबद्ध करके खोज प्रक्रिया को सरल बनाया जाता है। इस विधि में, समान अर्थ वाले लेकिन संदर्भ या वाक्य के अनुसार कुछ भिन्नताओं वाले शब्दों को मानकीकृत किया जाता है। दूसरे शब्दों में, एक मूल शब्द होता है, लेकिन उसी शब्द के कई रूप होते हैं। उदाहरण के लिए, मूल शब्द "eat" है और इसके रूप "eats", "eating", "eaten", इत्यादि हैं। इसी प्रकार, स्टेमिंग की सहायता से, 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 में एक स्टेम मॉड्यूल है जिसे इम्पोर्ट किया जाता है। यदि आप पूरे मॉड्यूल को इम्पोर्ट करते हैं, तो प्रोग्राम बहुत बड़ा हो जाता है क्योंकि इसमें हजारों लाइनें कोड होती हैं। इसलिए, हमने पूरे स्टेम मॉड्यूल में से केवल "PorterStemmer" को इम्पोर्ट किया है।
  • हमने एक ही शब्द के भिन्नता डेटा की एक डमी सूची तैयार की।
  • एक ऑब्जेक्ट बनाया जाता है जो nltk.stem.porter.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 स्पष्टीकरण:

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

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

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

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

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

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

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

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

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

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

लेम्माटाइज़र पाठ की अस्पष्टता को कम करता है। साइकिल या बाइसाइकिल्स जैसे शब्दों को मूल शब्द बाइसाइकिल में परिवर्तित किया जाता है। यह समान अर्थ वाले लेकिन अलग-अलग रूपांतर वाले सभी शब्दों को उनके मूल रूप में परिवर्तित करता है, जिससे शब्दों की सघनता कम होती है और मदद मिलती है।ping मशीन लर्निंग को प्रशिक्षित करने के लिए सटीक फ़ीचर तैयार करें। डेटा जितना साफ़ होगा, आपका मशीन लर्निंग मॉडल उतना ही सटीक होगा। 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)

आउटपुट:

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

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

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

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

अक्सर पूछे जाने वाले प्रश्न

पोर्टर स्टेमर, NLTK की पोर्टरस्टेमर क्लास है। यह प्रत्यय-स्ट्रिप लागू करता है।ping मार्टिन पोर्टर के 1980 के एल्गोरिदम के नियमों के अनुसार अंग्रेजी शब्दों को उनके मूल रूप में संक्षिप्त किया जाता है, इसलिए "waiting," "waited," और "waits" सभी "wait" बन जाते हैं।

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

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

NLTK स्टेमिंग के लिए PorterStemmer (और Snowball जैसे अन्य स्टेमर) और लेम्माटाइजेशन के लिए WordNetLemmatizer प्रदान करता है। लेम्माटाइज़र प्रत्येक शब्द का सही मूल रूप लौटाने के लिए WordNet शब्दकोश पर निर्भर करता है।

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

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

एक शब्द संज्ञा या क्रिया हो सकता है, जिसमें अलग-अलग लेम्मा होते हैं। पार्ट-ऑफ-स्पीच टैग के बिना, WordNetLemmatizer इसे संज्ञा मानता है। सही टैग, जैसे क्रिया या विशेषण, देने पर इसका सही मूल रूप प्राप्त होता है।

नहीं। स्टेमिंग से केवल प्रत्यय ही हटते हैं, इसलिए "studies" "studi" बन जाता है और "cries" "cri" बन जाता है, जो वैध शब्द नहीं हैं। इसके विपरीत, लेम्माटाइजेशन हमेशा "study" जैसे वास्तविक शब्दकोश शब्द देता है।

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