কম্পিউটার টিউটোরিয়াল

পাইথনে রিডেবিলিটি ইনডেক্স (Readability Index) - NLP

ন্যাচারেল ল্যাঙ্গুয়েজ প্রসেসিং (NLP) হলো মানুষের ভাষা স্বয়ংক্রিয়ভাবে জেনারেট ও বোঝার অধ্যয়ন। কম্পিউটার টেকনোলজি প্রায় সব ইন্ডাস্ট্রিতে ইন্টিগ্রেট হওয়ায় এটি আরও আকর্ষণীয় হয়ে উঠছে। এখানে আমরা NLP-এর একটি নির্দিষ্ট ফিল্ড—রিডেবিলিটি (Readability) অধ্যয়ন করব। এতে একটি টেক্সট পড়া বা বুঝতে কত কঠিন তা নির্ধারণ করা হয়।

রিডেবিলিটি ইনডেক্স হলো একটি সংখ্যাসূচক মান যা নির্দেশ করে একটি টেক্সট পড়া ও বুঝতে কত কঠিন (বা সহজ)। রিডেবিলিটি নির্ধারণের জন্য বিভিন্ন টেস্ট রয়েছে, যাদের ব্যবহারের ক্ষেত্রও আলাদা।

"রিডেবিলিটি বর্ণনা করে একটি ডকুমেন্ট কত সহজে পড়া যায়"। রিডেবিলিটি টেস্টগুলো "রিডিং ইজের প্রেডিকশন হিসেবে বিবেচিত হয় কিন্তু রিডেবিলিটি নির্ধারণের একমাত্র পদ্ধতি নয়"।

কিছু টেস্ট ল্যাঙ্গুয়েজ-নিউট্রাল, কিন্তু কিছু নির্দিষ্ট ভাষার জন্য বেশি উপযুক্ত। বিভিন্ন রিডেবিলিটি টেস্টের জ্ঞান অপরিহার্য।

রিডেবিলিটি টেস্ট উদ্দেশ্য ভাষা সংক্ষিপ্ত বিবরণ ও সূত্র
Automated Readability Index (ARI) English টেক্সট বোঝার সহজতা মাপে। আউটপুট আপρόক্সিমেটলি ইউএস গ্রেড লেভেল নির্দেশ করে।
ARI = 4.71 * (characters/words) + 0.5 * (words/sentence) - 21.43
Flesch Reading Ease English রিডিং প্যাসেজ কত কঠিন বোঝা তা নির্দেশ করে। বেশি স্কোর = সহজ পড়া, কম স্কোর = কঠিন।
FRE = 206.835 − 1.015*(total words/total sentences) − 84.6 * (total syllables/total words)
Flesch-Kincaid Grade Level English রিডিং প্যাসেজের কঠিনতা নির্দেশ করে। রেজাল্ট ইউএস গ্রেড লেভেলের সাথে মিলে।
FKGL = 0.39 * (total words/total sentences) + 11.8 (total syllables/total words) - 15.59
Coleman-Liau Index English টেক্সট বোঝার সহজতা মাপে। আউটপুট আপρόক্সিমেট ইউএস গ্রেড লেভেল।
CLI = (5.89 * (characters/words)) − (30 *(sentences/words)) − 15.8
Gunning Fog Index English ইংরেজি লেখার রিডেবিলিটি মাপে। ফলাফল সূচক করে কত বছর ফরম্যাল এডুকেশন (ইউএস গ্রেড) লাগবে বুঝতে।
GFI = 0.4 * ((words/sentence) + 100 * (complex words/words))
Linsear Write English ইংরেজি টেক্সটের রিডেবিলিটি মেট্রিক, এয়ার ফোর্সের টেকনিক্যাল ম্যানুয়ালের জন্য।
  • ১০০ শব্দের স্যাম্পল নিন।
  • সহজ শব্দ (২ সিলেবল বা কম) গুনুন এবং প্রতিটির ওপর "১" রাখুন।
  • কঠিন শব্দ (৩ সিলেবল বা বেশি) গুনুন এবং প্রতিটির ওপর "৩" রাখুন।
  • সহজ শব্দ x ১, কঠিন শব্দ x ৩ করুন।
  • দুটো যোগ করুন।
  • বাক্যের সংখ্যা দিয়ে ভাগ করুন।
Rate Index (RIX) Western European Languages যেকোনো 웨স্টার্ন ইউরোপিয়ান ল্যাঙ্গুয়েজে ব্যবহারযোগ্য। আউটপুট ০ (খুব সহজ) থেকে ৫৫+ (খুব কঠিন)।
RIX = (Long Words / Sentences) (long words = অক্ষর সংখ্যা > ৬)
Lesbarhets Index (LIX) Western European Languages যেকোনো वेस्टার্ন ইউরোপিয়ান ল্যাঙ্গুয়েজে ব্যবহারযোগ্য। আউটপুট ইনডেক্স গ্রেড লেভেল নির্দেশ করে। ০.১ নিচে = গ্রেড ১, ৭.২ ও উপরে = কলেজ গ্রেড।
LIX = (total words/total sentences) + (long words/total words * 100) (long words = অক্ষর সংখ্যা > ৬)

উদাহরণস্বরূপ, নিচে Flesch ইনডেক্স দিয়ে একটি টেক্সট ফাইলের রিডেবিলিটি বের করার প্রোগ্রাম দেওয়া হলো।

অনুমান

Flesch Index টেক্সট ফাইল রিডিং গ্রেড
0-30 College
50-60 High School
90-100 Fourth Grade

Flesch-Kincaid Grade Level সূত্র দিয়ে সমতুল্য গ্রেড লেভেল G বের করা হয়:

FKGL = 0.39 * (total words/total sentences) + 11.8 (total syllables/total words) - 15.59

কোড


import os
dire = os.getcwd()
listOfdir = os.listdir(dire)

while True:
    UserFileName = input('Enter file name:')
    if (UserFileName in listOfdir) and (UserFileName.endswith(".txt")):
        InputFile = open(UserFileName, 'r')
        text = InputFile.read()
        sentence = text.count('.') + text.count('!') + text.count(';') + text.count(':') + text.count('?')
        words = len(text.split())
        syllable = 0
        for word in text.split():
            for vowel in ['a','e','i','o','u']:
                syllable += word.count(vowel)
            for ending in ['es','ed','e']:
                if word.endswith(ending):
                    syllable -= 1
            if word.endswith('le'):
                syllable += 1
        G = round((0.39*words)/sentence + (11.8*syllable)/words - 15.59)
        if G >= 0 and G <= 30:
            print('The Readability level is College')
        elif G >= 50 and G <= 60:
            print('The Readability level is High School')
        elif G >= 90 and G <= 100:
            print('The Readability level is fourth grade')
        print('This text has %d words' % (words))
    elif UserFileName not in listOfdir:
        print('This text file does not exist in current directory')
    elif not(UserFileName.endswith('.txt')):
        print('This is not a text file.')

আউটপুট


Enter file name:dataVisualization.txt
The Readability level is College
This text has 64 words
  1. পাইথন প্লটের বাইরে টেক্সট রাখা

  2. পাইথনে বিগ্রামের পরের শব্দ খুঁজুন (Occurrences After Bigram in Python)

  3. পাইথন টেক্সট সিকোয়েন্স টাইপস (Text Sequence Types)

  4. পাইথনে NLTK ব্যবহার করে টেক্সট টোকেনাইজ করার প্রোগ্রাম