টেক্সট প্রিপ্রোসেসিং
ন্যাচারাল ল্যাংগুয়েজ প্রসেসিং (এনএলপি) কাজের জন্য টেক্সট প্রিপ্রোসেসিং আসলে সবচেয়ে গুরুত্বপূর্ণ স্টেপ। এটি টেক্সটকে আরও সহজবোধ্য ফর্মে রূপান্তরিত করে, যাতে মেশিন লার্নিং অ্যালগরিদমগুলি আরও ভালভাবে কাজ সম্পাদন করতে পারে।
ন্যাচারাল ল্যাংগুয়েজ প্রসেসিং (এনএলপি) কাজের জন্য টেক্সট প্রিপ্রোসেসিং আসলে সবচেয়ে গুরুত্বপূর্ণ স্টেপ। এটি টেক্সটকে আরও সহজবোধ্য ফর্মে রূপান্তরিত করে, যাতে মেশিন লার্নিং অ্যালগরিদমগুলি আরও ভালভাবে কাজ সম্পাদন করতে পারে।
সাধারনত ইনপুট টেক্সট ডেটার ভোকাবুলারিটির আকার কমানোর জন্য টেক্সটকে ছোট হাতের অক্ষরে কনভার্ট করে রাখা উচিত । এছারাও মেক্সিমাম সময় প্রোগ্রামিং ল্যাঙ্গুয়েজগুলো কেস সেনসিটিভ হওয়ার কারনেও এই প্রোসেস ব্যবহার করা হয়।
পাইথন কোড :
input_str = ”The 5 biggest countries by population in 2017 are China, India, United States, Indonesia, and Brazil.”
input_str = input_str.lower()
print(input_str)
আউটপুট :
the 5 biggest countries by population in 2017 are china, india, united states, indonesia, and brazil.
ইনপুট টেক্সটে যে সব নাম্বার থাকে সেগুলো সাধারনত কোন কাজে লাগে না। তাই সেগুলো বাদ দেওয়া উচিত।
পাইথন কোড :
import re
input_str = ’Box A contains 3 red and 5 white balls, while Box B contains 4 red and 2 blue balls.’
result = re.sub(r’\d+’, ‘’, input_str)
print(result)
Output:
Box A contains red and white balls, while Box B contains red and blue balls.
তবে যদি নাম্বার গুলো কাজে লাগে তাহলে অবশ্যই সেগুলোকে টেক্সটে কনভার্ট করে নেওয়া উচিত।
ইনপুট টেক্সট থেকে সকল রকমের যতি / বিরাম চিহ্ন [!”#$%&’()*+,-./:;<=>?@[\]^_`{|}~]: বাদ দেওয়ার জন্য এই পদ্ধতি ব্যবহার করা যায়।
পাইথন কোড :
import string
input_str = “This &is [an] example? {of} string. with.? punctuation!!!!” # Sample string
result = input_str.translate(string.maketrans(“”,””), string.punctuation)
print(result)
Output:
This is an example of string with punctuation
সামনের এবং পিছনের খালি স্পেস সরাতে strip() ফাংশনটি ব্যবহার করা হয়।
পাইথন কোড :
input_str = “ \t a string example\t “
input_str = input_str.strip()
input_str
Output:
‘a string example’
টোকেনাইজেশন হ'ল ইনপুট টেক্সকে ( বাক্য ) ছোট ছোট টুকরো ( যাকে টোকেন বলে ) করার প্রক্রিয়া। এছাড়া শব্দ, সংখ্যা, বিরাম চিহ্ন এবং অন্যান্য সব জিনিসকে টোকেন হিসাবে ধরা যায়।
পাইথন কোড :
import nltk
sentence = """At eight o'clock on Thursday morning Arthur didn't feel very good."""
tokens = nltk.word_tokenize(sentence)
tokens
Output:
['At', 'eight', "o'clock", 'on', 'Thursday', 'morning', 'Arthur', 'did', "n't", 'feel', 'very', 'good', '.']
"স্টপ ওয়ার্ড" হল যে সব শব্দ ইনপুট টেক্সট এর মধ্যে কোন গুরুত্বপূর্ণ অর্থ বহন করে না অর্থাৎ যেগুলোর সাধরনত দরকার নেই, সে সব শব্দগুলোকে ইনপুট টেক্সট থেকে সরিয়ে ফেলা একটা প্রক্রিয়া। ন্যাচারাল ল্যাংগুয়েজ প্রসেসিংয়ের জন্য ন্যাচারাল ল্যাঙ্গুয়েজ টুলকিট (NLTK) ব্যবহার করে স্টপ ওয়ার্ডগুলিকে সরানো সম্ভব।
পাইথন কোড :
input_str = “NLTK is a leading platform for building Python programs to work with human language data.”
stop_words = set(stopwords.words(‘english’))
from nltk.tokenize import word_tokenize
tokens = word_tokenize(input_str)
result = [i for i in tokens if not i in stop_words]
print (result)
আউটপুট :
[‘NLTK’, ‘leading’, ‘platform’, ‘building’, ‘Python’, ‘programs’, ‘work’, ‘human’, ‘language’, ‘data’, ‘.’]
স্টেমিং হ'ল শব্দগুলিকে স্টেম, বেস বা মূল ফর্মের শব্দ হ্রাস করার প্রক্রিয়া (উদাহরণস্বরূপ, books —> book, looked —> look)। স্টেমিং করার জন্য প্রধান দুটি অ্যালগরিদম হ'ল পোর্টার স্টেমিং অ্যালগরিদম এবং ল্যানকাস্টার স্টেমিং অ্যালগরিদম।
পাইথন কোড :
from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize
stemmer= PorterStemmer()
input_str=”There are several types of stemming algorithms.”
input_str=word_tokenize(input_str)
for word in input_str:
print(stemmer.stem(word))
আউটপুট :
There are sever type of stem algorithm.
স্টেমিংয়ের মতো লেম্যাটাইজেশনের লক্ষ্য হ'ল শব্দগুলোর ফর্মগুলিকে একটি সাধারণ বেস আকারে হ্রাস করা। স্টেমিংয়ের বিপরীতে, লেম্যাটাইজেশন সহজেই বাক্যগুলো কেটে ফেলে না । যার পরিবর্তে সঠিক বেস ফর্মগুলি পেতে এই প্রসেস একটা ডিকশনারির সাহায্য নিয়ে এই কাজ করে ।
পাইথন কোড :
from nltk.stem import WordNetLemmatizer
from nltk.tokenize import word_tokenize
lemmatizer=WordNetLemmatizer()
input_str=”been had done languages cities mice”
input_str=word_tokenize(input_str)
for word in input_str:
print(lemmatizer.lemmatize(word))
আউটপুট :
be have do language city mouse
পার্টস অফ স্পিচ ট্যাগগিং দ্বারা একটি বাক্যের মধ্যে যে শব্দগুলো থাকে তার প্রত্যেকটির পদ (বিশেষ্য, বিশেষণ, ক্রিয়াপদ ইত্যাদি ) বের করা যায় ।
পাইথন কোড :
input_str=”Parts of speech examples: an article, to write, interesting, easily, and, of”
from textblob import TextBlob
result = TextBlob(input_str)
print(result.tags)
আউটপুট :
[(‘Parts’, u’NNS’), (‘of’, u’IN’), (‘speech’, u’NN’), (‘examples’, u’NNS’), (‘an’, u’DT’), (‘article’, u’NN’), (‘to’, u’TO’), (‘write’, u’VB’), (‘interesting’, u’VBG’), (‘easily’, u’RB’), (‘and’, u’CC’), (‘of’, u’IN’)]
চানকিং একটি ন্যাচারাল ল্যাংগুয়েজ প্রোসেসিং এর একটি প্রসেস যা বাক্যের মধ্যের পদগুলো (বিশেষ্য, ক্রিয়াপদ, বিশেষণ ইত্যাদি) চিহ্নিত করে এবং প্রত্যেকের সাথে একটি ব্যাকরণগত অর্থ যুক্ত করে।
প্রথম স্টেপ হলো প্রতিটি শব্দের জন্য পার্টস অফ স্পিচ ট্যাগার বের করা :
পাইথন কোড :
input_str=”A black television and a white stove were bought for the new apartment of John.”
from textblob import TextBlob
result = TextBlob(input_str)
print(result.tags)
আউটপুট :
[(‘A’, u’DT’), (‘black’, u’JJ’), (‘television’, u’NN’), (‘and’, u’CC’), (‘a’, u’DT’), (‘white’, u’JJ’), (‘stove’, u’NN’), (‘were’, u’VBD’), (‘bought’, u’VBN’), (‘for’, u’IN’), (‘the’, u’DT’), (‘new’, u’JJ’), (‘apartment’, u’NN’), (‘of’, u’IN’), (‘John’, u’NNP’)]
পরের স্টেপ হলও চাঙ্কিং :
পাইথন কোড :
reg_exp = “NP: {<DT>?<JJ>*<NN>}”
rp = nltk.RegexpParser(reg_exp)
result = rp.parse(result.tags)
print(result)
আউটপুট :
(S (NP A/DT black/JJ television/NN) and/CC (NP a/DT white/JJ stove/NN) were/VBD bought/VBN for/IN (NP the/DT new/JJ apartment/NN)
of/IN John/NNP)
সবচেয়ে মজার ব্যাপার হলো এই ফাংশন result.draw() দিয়ে কোন বাক্যের গঠন ( ট্রি স্ট্রাকচার ) বের করা যায়।
নেইমড এনটিটি রিকগনিশন (এনইআর) এর প্রধান লক্ষ্য হোল টেক্সট ডাটার টাইপগুলো বের করা এবং সেগুলি পূর্বনির্ধারিত ক্লাশে শ্রেণিবদ্ধ করা (ব্যক্তি, অবস্থান, সংস্থা, সময়, ইত্যাদি)।
পাইথন কোড :
from nltk import word_tokenize, pos_tag, ne_chunk
input_str = “Bill works for Apple so he went to Boston for a conference.”
print ne_chunk(pos_tag(word_tokenize(input_str)))
আউটপুট :
(S (PERSON Bill/NNP) works/VBZ for/IN Apple/NNP so/IN he/PRP went/VBD to/TO (GPE Boston/NNP) for/IN a/DT conference/NN ./.)
সর্বনাম এবং অন্যান্য রেফারিং এক্সপ্রেশন সঠিক শব্দের সাথে সংযুক্ত হওয়া উচিত। কোরেফারেন্স রেজোলিউশনে একটি টেক্সটকে যে সর্বনামের রেফারেন্স পাওয়া যায় তা উল্লেখ করে। উদাহরণস্বরূপ, বাক্যে, "রবিন বলেছিলেন যে তিনি একটি গাড়ি কিনবেন"। এখানে সর্বনাম "তিনি" বলতে "রবিন" নামের কোন লোককে বুখানো হয়।
xrenner ব্যবহার করে কোরেফারেন্স রেজোলিউশনের একটি উদাহরণ এখানে পাওয়া যাবে।
কোলোকেশন এক্সট্রাকশন হলও মোটামুটি ইনপুট টেক্সট এর গুরুত্বপূর্ন অংশ বা সারাংশ । সারাংশের উদাহরণগুলি হ'ল “break the rules,” “free time,” “draw a conclusion,” “keep in mind,” “get ready,” এবং আরও অনেক কিছু।
পাইথন কোড :
input=[“he and Chazz duel with all keys on the line.”]
from ICE import CollocationExtractor
extractor = CollocationExtractor.with_collocation_pipeline(“T1” , bing_key = “Temp”,pos_check = False)
print(extractor.get_collocations_of_length(input, length = 3))
আউটপুট :
[“on the line”]
রিলেশনশিপ এক্সট্রাঙ্কশন ইনপুট টেক্সট থেকে বা আনইস্ট্রাকচার্ড ডাটা থেকে ইস্ট্রাকচার্ড ডাটায় কনভার্ট করা যায় । সাধারণভাবে বলা যায় যে, এটি নেইমড এনটিটিগুলোর মধ্যে (যেমন, ব্যক্তি, প্রতিষ্ঠান, অবস্থান) সম্পর্কের (যেমন, ভাড়া নেওয়া, পত্নী, চাকরি ) চিহ্নিত করছে। উদাহরণস্বরূপ, "রবিন এবং অঞ্জু গতকাল বিয়ে করেছিলেন" বাক্যটি থেকে আমরা সেই তথ্যটি বের করতে পারি যে রবিন অঞ্জুর স্বামী।
NLTK ব্যবহার করে রিলেশনশিপ এক্সট্রাঙ্কশন একটি উদাহরণ এখানে পাওয়া যাবে।