Stop Words Removal
অপ্রয়োজনীয় common words বাদ দিয়ে meaning কে clean করা।
একটা sentence এর কথা ভাবুন: 'The cat is on the mat'। এখানে 'the', 'is', 'on' — এগুলো কি real meaning carry করে? — খুব একটা না। এই 'কম-meaning' শব্দগুলোর নাম Stop Words। এগুলো বাদ দিলে text হালকা হয় এবং important word গুলো ফোকাসে আসে।
Stop Words হলো সেই common words যেগুলো ভাষায় খুব frequent কিন্তু individually meaning কম carry করে — যেমন English এ 'a', 'an', 'the', 'is', 'of', 'and', বাংলায় 'এবং', 'কিন্তু', 'যে', 'এই'। Stop words removal হলো এই words গুলোকে text থেকে বাদ দেওয়ার process — যাতে model এর focus important content words এর উপর থাকে।
একটা ছবির background blur করে দিলে subject টা বেশি pop করে — stop words removal এর কাজ অনেকটা সেরকম। 'I love Bangla NLP' থেকে 'I' বাদ দিলে থাকে 'love Bangla NLP' — meaning hardly changes কিন্তু processing fast হয়। তবে সব ক্ষেত্রে stop words বাদ দেওয়া উচিত না — যেমন sentiment analysis এ 'not' খুব important!
import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
nltk.download("punkt", quiet=True)
nltk.download("punkt_tab", quiet=True)
nltk.download("stopwords", quiet=True)
text = "The quick brown fox jumps over the lazy dog in the garden."
# 1. Get English stop words
stop_words = set(stopwords.words("english"))
print("Total stop words:", len(stop_words))
print("Sample:", list(stop_words)[:10])
# 2. Tokenize
tokens = word_tokenize(text.lower())
# 3. Filter
filtered = [w for w in tokens if w not in stop_words and w.isalpha()]
print("Original tokens:", tokens)
print("After removal:", filtered)
# 4. Bangla example with custom stop words
bangla_text = "আমি এবং তুমি একসাথে বাংলা NLP শিখব"
bangla_stops = {"এবং", "কিন্তু", "যে", "এই", "ও", "তাই"}
bangla_tokens = bangla_text.split()
bangla_filtered = [w for w in bangla_tokens if w not in bangla_stops]
print("Bangla filtered:", bangla_filtered)NLTK তে প্রায় ১৭৯টা English stop word আছে। আমরা set ব্যবহার করেছি কারণ set এ lookup O(1) — list এ O(n)। বাংলার জন্য NLTK এ built-in list নাই, তাই আমরা custom set বানালাম। `.isalpha()` দিয়ে punctuation ও বাদ দিলাম। মনে রাখবেন — sentiment analysis এ 'not', 'no' রাখা important, তাই custom list এ সেগুলো exclude করতে হবে।
একটা function `remove_stopwords(text, language='english', keep=None)` লিখুন। Parameters: text, language ('english' বা 'bangla'), এবং keep — একটা list যেখানে যে stop words রাখতে চান (যেমন ['not', 'no']) তা দিতে পারবেন। Output: cleaned text। বাংলার জন্য আপনার custom list use করুন।