Lemmatization
Stemming এর intelligent বড় ভাই — dictionary-aware root finding।
Stemming একটা কুড়াল হলে, Lemmatization হলো একটা স্কাল্পেল — precise, intelligent। 'better' → 'good', 'went' → 'go', 'studies' → 'study'। কোনো 'studi' বা 'happili' এর গল্প নেই — সবসময় valid dictionary word।
Lemmatization হলো একটা word এর meaningful base form (lemma) খুঁজে বের করার process — যা সবসময় একটা valid dictionary word হয়। এটা dictionary-based এবং context-aware। 'better' এর lemma 'good', 'ran' এর lemma 'run', 'mice' এর lemma 'mouse'।
Stemming = mechanical chopping। Lemmatization = dictionary দেখে intelligent reduction। Lemmatizer জানে — কোন word কোন part-of-speech (noun/verb/adjective), এবং সেই অনুসারে base form দেয়। 'meeting' (noun) → 'meeting'। 'meeting' (verb) → 'meet'। এই smartness এর দাম হলো — slower than stemming।
import nltk
from nltk.stem import WordNetLemmatizer
nltk.download("wordnet", quiet=True)
nltk.download("omw-1.4", quiet=True)
lem = WordNetLemmatizer()
# Default = noun ('n')
print(lem.lemmatize("studies")) # 'study'
print(lem.lemmatize("better")) # 'better' (treated as noun)
# With POS tag
print(lem.lemmatize("better", pos="a")) # 'good' (adjective)
print(lem.lemmatize("ran", pos="v")) # 'run' (verb)
print(lem.lemmatize("mice")) # 'mouse'
print(lem.lemmatize("running", pos="v")) # 'run'
# spaCy — automatic and powerful
# pip install spacy && python -m spacy download en_core_web_sm
import spacy
nlp = spacy.load("en_core_web_sm")
text = "The children are running and they ate better food yesterday."
doc = nlp(text)
for token in doc:
print(f"{token.text:<12} -> {token.lemma_:<10} ({token.pos_})")NLTK এর lemmatizer কে POS tag না দিলে সব noun ধরে নেয় — তাই 'better' → 'better' হয়ে যায়। POS দিলে magic — 'better' → 'good'। spaCy automatic POS detect করে, তাই production এ spaCy ব্যবহার করা সবচেয়ে easy এবং accurate। 'children' → 'child', 'ate' → 'eat' — irregular form ও সঠিক ভাবে handle করে।
একটা function `normalize(text, method='lemma')` লিখুন যেটা method='stem' বা 'lemma' হলে যথাক্রমে stemming বা lemmatization করবে। spaCy ব্যবহার করুন lemma এর জন্য। User input হিসেবে paragraph নিয়ে দুটো method এর result side-by-side দেখান — কোনটা কত সঠিক বুঝবেন।