রোডম্যাপ
PHASE 0 · অধ্যায় 2

টেক্সট প্রসেসিং এর মূল ভিত্তি

Text Processing Basics

Characters, words, sentences, corpus — text এর atomic units।

ভূমিকা

একটা বই হাতে নিন। সেটা কী দিয়ে তৈরি? — পৃষ্ঠা। পৃষ্ঠা কী দিয়ে? — অনুচ্ছেদ। অনুচ্ছেদ? — বাক্য। বাক্য? — শব্দ। শব্দ? — অক্ষর। এই 'ভেঙে ভেঙে' দেখার অভ্যাসটাই NLP এর প্রথম superpower।

ধারণা

Text Processing এর Basics মানে হলো — যেকোনো raw text কে এমন কিছু atomic units এ চিনতে পারা যেগুলোর উপর computer কাজ করতে পারে। এই units হলো: Character (অক্ষর), Word (শব্দ), Sentence (বাক্য), Document (পুরো লেখা), এবং Corpus (অনেকগুলো document এর collection)।

সহজ ব্যাখ্যা

ভাবুন আপনি LEGO দিয়ে একটা বাড়ি বানাচ্ছেন। প্রতিটা ছোট block হলো character। কয়েকটা block জোড়া দিয়ে wall হয় — সেটা word। অনেকগুলো wall মিলে room — sentence। অনেক room মিলে বাড়ি — document। আর পুরো একটা শহরের সব বাড়ি — সেটাই corpus। NLP এর সব কাজ শুরু হয় এই hierarchy বোঝা থেকে।

বাস্তব ব্যবহার

  • Google এর search index — কোটি কোটি document নিয়ে তৈরি একটা বিশাল corpus।
  • Wikipedia পুরোটা একটা corpus — researcher রা এটা দিয়ে language model train করেন।
  • WhatsApp এর প্রতিটা message — ছোট ছোট document, যা spam filter এর জন্য process হয়।
  • Twitter এর tweet — character-limited document, যেখানে hashtag, mention আলাদা units।
  • Bengali Newspaper Corpus — বাংলা NLP research এর foundation।

ধাপে ধাপে বিশ্লেষণ

1
Step 1 — Character বুঝুন
সবচেয়ে ছোট unit। বাংলায় 'ক', 'খ', 'অ' — Unicode দিয়ে represent হয়।
2
Step 2 — Word চিনুন
কয়েকটা character + একটা space = word। কিন্তু বাংলায় 'যুক্তাক্ষর' একটা challenge।
3
Step 3 — Sentence detect করুন
Word + delimiter (।, ?, !)। বাংলায় '।' (দাঁড়ি) full stop।
4
Step 4 — Document হিসেবে দেখুন
একটা complete text unit — article, email, message।
5
Step 5 — Corpus গড়ুন
অনেক document একসাথে = corpus। এটাই ML model এর 'খাবার'।

Python কোড

# Understanding text hierarchy with Python

text = """Bangla is a beautiful language. It has rich literature.
Many great writers wrote in Bangla."""

# 1. Characters
chars = list(text)
print("Total characters:", len(chars))
print("Unique characters:", len(set(chars)))

# 2. Words (simple split)
words = text.split()
print("Total words:", len(words))
print("Unique words:", len(set(words)))

# 3. Sentences (split by period)
sentences = [s.strip() for s in text.replace("\n", " ").split(".") if s.strip()]
print("Total sentences:", len(sentences))

# 4. A tiny corpus = list of documents
corpus = [
    "I love NLP.",
    "NLP powers ChatGPT.",
    "Bangla NLP is growing fast.",
]
print("Documents in corpus:", len(corpus))
print("Total words in corpus:", sum(len(doc.split()) for doc in corpus))
ব্যাখ্যা

এই code এ আমরা একটা text কে ৪টা level এ দেখলাম — character, word, sentence, এবং corpus। লক্ষ্য করুন — split() একটা naive technique, এটা শুধু space দিয়ে ভাঙে। বাস্তবে আমাদের আরও smart tokenizer লাগবে (পরের chapter এ দেখব)। কিন্তু এই hierarchy টা মনে রাখা সবচেয়ে জরুরি।

সাধারণ ভুল

  • Character count = byte count ভাবা — ভুল। বাংলা একটা অক্ষর UTF-8 এ ৩ byte নিতে পারে।
  • শুধু space দিয়ে word split করা — punctuation আটকে যায় (যেমন 'NLP.' একটা word হয়ে যায়)।
  • '.' দিয়ে sentence split — Dr., Mr., 3.14 এর মত cases এ ভেঙে পড়ে।
  • Corpus মানে গুগল-স্কেল data ভাবা — না, ১০টা document ও একটা valid corpus।

অনুশীলন

  1. একটা বাংলা paragraph নিন। গুনে বলুন: কতগুলো অক্ষর, কতগুলো শব্দ, কতগুলো বাক্য।
  2. একটা corpus তৈরি করুন — আপনার ৫টা প্রিয় quote নিয়ে। Python list এ রাখুন।
  3. 'Dr. Sadiqul went to Dhaka. He met Mr. Karim.' — naive split() দিয়ে sentence ভাঙলে কয়টা পাবেন? কেন সমস্যা?

ছোট প্রজেক্ট

Mini Project: Text Statistics Dashboard

একটা Python script লিখুন যেটা যেকোনো .txt file পড়বে এবং report দিবে: total characters, total words, total sentences, average word length, longest word, এবং top-৫ most frequent words। নিজের লেখা যেকোনো text বা Wikipedia article দিয়ে test করুন।

সারাংশ

  • Text এর hierarchy: Character → Word → Sentence → Document → Corpus।
  • প্রতিটা level এ আলাদা challenge আছে — বিশেষ করে বাংলার জন্য।
  • Corpus = ML model এর 'training food' — যত বড়, তত ভাল model।
  • Naive split() দিয়ে শুরু — পরে real tokenizer এ যাব (Ch 4)।