وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

تصحیح املا در پایتون با TextBlob

0 66
زمان لازم برای مطالعه: 7 دقیقه


معرفی

اشتباهات املایی رایج هستند و اکثر مردم به نرم افزاری عادت دارند که نشان می دهد اشتباهی رخ داده است یا خیر. از تصحیح خودکار روی تلفن های ما، به خط قرمز در ویرایشگرهای متن، چک کردن املا یک ویژگی ضروری برای بسیاری از محصولات مختلف است.

اولین برنامه برای پیاده سازی غلط یابی املا در سال 1971 برای گروه نوشته شد DEC PDP-10. SPELL نامیده می شود و فقط می تواند مقایسه ساده کلمات را انجام دهد و تفاوت یک یا دو حرف را تشخیص دهد. با پیشرفت سخت افزار و نرم افزار، غلط گیر املا نیز پیشرفت کرده است. غلط‌گیر املای مدرن قادر به مدیریت مورفولوژی و استفاده از آمار برای بهبود پیشنهادات است.

پایتون ماژول‌های زیادی را برای استفاده برای این منظور ارائه می‌کند، و نوشتن یک غلط‌گیر املای ساده را به یک آزمایش ۲۰ دقیقه‌ای آسان تبدیل می‌کند.

یکی از این کتابخانه ها می باشد TextBlob، که برای پردازش زبان طبیعی استفاده می شود که یک API بصری برای کار با آن ارائه می دهد.

در این مقاله به روش پیاده سازی آن می پردازیم تصحیح املا در پایتون با TextBlob.

نصب و راه اندازی

ابتدا باید نصب کنیم TextBlob، زیرا از قبل نصب نشده است. a را باز کنید console و با استفاده از آن نصب کنید pip:

$ pip install textblob

این باید همه چیزهایی را که برای این پروژه نیاز داریم نصب کند. پس از اتمام نصب، console خروجی باید شامل موارد زیر باشد:

Successfully installed click-7.1.2 joblib-0.17.0 nltk-3.5 regex-2020.11.13 textblob-0.15.3

TextBlob ساخته شده است روی بالای NLTK، بنابراین با نصب نیز همراه است.

این درست() تابع

ساده ترین راه برای تصحیح متن ورودی استفاده از آن است correct() روش. متن مثالی که استفاده خواهیم کرد پاراگراف “درباره منشاء گونه ها” اثر چارلز داروین است که بخشی از دامنه عمومی است که در فایلی به نام بسته بندی شده است. text.txt.

علاوه بر این، برخی از اشتباهات املایی عمدی را اضافه خواهیم کرد:

As far as I am abl to judg, after long attnding to the sbject, the condiions of lfe apear to act in two ways—directly روی the whle organsaton or روی certin parts alne and indirectly by afcting the reproducte sstem. Wit respct to te dirct action, we mst bea in mid tht in every cse, as Profesor Weismann hs latly insistd, and as I have inidently shwn in my wrk روی "Variatin undr Domesticcation," thcere arae two factrs: namly, the natre of the orgnism and the natture of the condiions. The frmer sems to be much th mre importannt; foor nealy siimilar variations sometimes aris under, as far as we cn juddge, disimilar conditios; annd, روی te oter hannd, disssimilar variatioons arise undder conditions which aappear to be nnearly uniiform. The efffects روی tthe offspring arre ieither definnite or in definite. They maay be considdered as definnite whhen allc or neearly all thhe ofefspring off inadividuals exnposed tco ceertain conditionas duriing seveal ggenerations aree moodified in te saame maner.

این است پر شده اشتباهات املایی، تقریباً در هر کلمه. بیایید یک اسکریپت ساده با استفاده از TextBlob بنویسیم تا این اشتباهات را اصلاح کنیم و print آنها را به console:

from textblob import TextBlob

with open("text.txt", "r") as f:        
    text = f.read()                     
    textBlb = TextBlob(text)            
    textCorrected = textBlb.correct()   
    print(textCorrected)

اگر قبلا با TextBlob کار کرده اید، این جریان برای شما آشنا به نظر می رسد. ما فایل و محتویات داخل آن را خواندیم و a ساختیم TextBlob به عنوان مثال با ارسال محتویات به سازنده.

سپس، ما را اجرا می کنیم correct() تابع روی آن نمونه برای انجام تصحیح املا.

پس از اجرای اسکریپت بالا، باید خروجی مشابه زیر دریافت کنید:

Is far as I am all to judge, after long attending to the subject, the conditions of life appear to act in two ways—directly روی the while organisation or روی certain parts alone and indirectly by acting the reproduce system. It respect to te direct action, we must be in mid the in every case, as Professor Weismann he lately insisted, and as I have evidently shown in my work روی "Variation under Domesticcation," there are two facts: namely, the nature of the organism and the nature of the conditions. The former seems to be much th are important; for nearly similar variations sometimes arms under, as far as we in judge, similar condition; and, روی te other hand, disssimilar variations arise under conditions which appear to be nearly uniform. The effects روی the offspring are either definite or in definite. They may be considered as definite when all or nearly all the offspring off individuals exposed to certain conditions during several generations are modified in te same manner.

تصحیح املای TextBlob چقدر صحیح است؟

همانطور که می بینیم، متن هنوز دارای برخی از اشتباهات املایی است. کلماتی مانند "abl" قرار بود باشند "able"، نه "all". اگرچه، حتی با وجود اینها، هنوز از نسخه اصلی بهتر است.

حالا این سوال پیش می آید که چقدر بهتر است؟

قطعه کد زیر یک اسکریپت ساده است که میزان خوب بودن را آزمایش می کند TextBlob در تصحیح خطاها، بر اساس روی این مثال:

from textblob import TextBlob



def compare(text1, text2):  
    l1 = text1.split()
    l2 = text2.split()
    good = 0
    bad = 0
    for i in range(0, len(l1)):
        if l1(i) != l2(i):
            bad += 1
        else:
            good += 1
    return (good, bad)


def percentageOfBad(x):
    return (x(1) / (x(0) + x(1))) * 100

اکنون، با این دو تابع، بیایید یک تجزیه و تحلیل سریع اجرا کنیم:

with open("test.txt", "r") as f1: 
    t1 = f1.read()

with open("original.txt", "r") as f2: 
    t2 = f2.read()

t3 = TextBlob(t1).correct()

mistakesCompOriginal = compare(t1, t2)
originalCompCorrected = compare(t2, t3)
mistakesCompCorrected = compare(t1, t3)

print("Mistakes compared to original ", mistakesCompOriginal)
print("Original compared to corrected ", originalCompCorrected)
print("Mistakes compared to corrected ", mistakesCompCorrected, "\n")

print("Percentage of mistakes in the test: ", percentageOfBad(mistakesCompOriginal), "%")
print("Percentage of mistakes in the corrected: ", percentageOfBad(originalCompCorrected), "%")
print("Percentage of fixed mistakes: ", percentageOfBad(mistakesCompCorrected), "%", "\n")

اجرای آن خواهد شد print بیرون:

Mistakes compared to original  (126, 194)
Original compared to corrected  (269, 51)
Mistakes compared to corrected  (145, 175) 

Percentage of mistakes in the test:  60.62499999999999 %
Percentage of mistakes in the corrected:  15.937499999999998 %
Percentage of fixed mistakes:  54.6875 % 

همانطور که می بینیم، correct روش موفق شد درصد غلط املایی ما را از 60.6٪ به 15.9٪ برساند، که بسیار مناسب است، با این حال مقدار کمی وجود دارد. 54.7٪ از کلمات را تصحیح کرد، پس چرا هنوز 15.9٪ نرخ اشتباه وجود دارد؟

پاسخ این است تصحیح بیش از حد. گاهی اوقات، می تواند کلمه ای را که به درستی املای آن نوشته شده است، تغییر دهد، مانند کلمه اول در متن مثال ما که در آن "As" اصلاح شد به "Is". در موارد دیگر، فقط اطلاعات کافی در مورد کلمه و زمینه ندارد تا بگوید کاربر قصد دارد کدام کلمه را تایپ کند، بنابراین حدس می‌زند که باید جایگزین شود. "whl" با "while" بجای "whole".

هیچ تصحیح کننده املای کاملی وجود ندارد زیرا بسیاری از زبان گفتاری متنی است، پس این را در نظر داشته باشید. در بیشتر موارد استفاده، اشتباهات بسیار کمتری نسبت به مثال ما وجود دارد، بنابراین TextBlob باید بتواند به اندازه کافی برای کاربر معمولی خوب کار کند.

آموزش TextBlob با مجموعه داده های سفارشی

اگر بخواهید املای زبان دیگری را که توسط TextBlob پشتیبانی نمی‌شود، چک کنید؟ یا شاید می خواهید کمی دقیق تر شوید؟ خوب، ممکن است راهی برای رسیدن به این هدف وجود داشته باشد. همه چیز به روش کار غلط یابی املا در TextBlob برمی گردد.

TextBlob از آمار استفاده از کلمات در انگلیسی برای ارائه پیشنهادات هوشمند استفاده می کند روی کدام کلمات را تصحیح کنیم این آمار را در فایلی به نام نگه می دارد en-spelling.txt، اما همچنین به شما امکان می دهد فایل آماری استفاده از کلمه خود را بسازید.

بیایید سعی کنیم برای مثال داروین خود یکی بسازیم. ما از تمام کلمات در استفاده خواهیم کرد “درباره منشاء گونه ها” برای آموزش شما می توانید از هر متنی استفاده کنید، فقط مطمئن شوید که به اندازه کافی کلمات مرتبط با متنی که می خواهید تصحیح کنید داشته باشد.

در مورد ما، بقیه کتاب زمینه و اطلاعات اضافی بیشتری را ارائه می دهد که TextBlob برای تصحیح دقیق تر به آن نیاز دارد.

بیایید فیلمنامه را بازنویسی کنیم:

from textblob.en import Spelling        
import re

textToLower = ""

with open("originOfSpecies.txt","r") as f1:           
    text = f1.read()                                  
    textToLower = text.lower()                        

words = re.findall("(a-z)+", textToLower)             
oneString = " ".join(words)                           

pathToFile = "train.txt"                              
spelling = Spelling(path = pathToFile)                
spelling.train(oneString, pathToFile)                 

اگر نگاه کنیم به train.txt فایل، خواهیم دید:

a 3389
abdomen 3
aberrant 9
aberration 5
abhorrent 1
abilities 1
ability 4
abjectly 1
able 54
ably 5
abnormal 17
abnormally 2
abodes 2
...

این نشان می دهد که کلمه "a" به عنوان یک کلمه 3389 بار نشان داده می شود، در حالی که "ably" فقط 5 بار نمایش داده می شود برای آزمایش این مدل آموزش دیده، از آن استفاده خواهیم کرد suggest(text) بجای correct(text)، که لیستی از تاپل های اعتماد به کلمه است. اولین عنصر در لیست، کلمه ای است که بیشتر در مورد آن مطمئن است، بنابراین ما می توانیم از طریق آن به آن دسترسی داشته باشیم suggest(text)(0)(0).

توجه داشته باشید که این ممکن است کندتر باشد، بنابراین در حین بررسی املا کلمه به کلمه پیش بروید، زیرا تخلیه حجم عظیمی از داده ها می تواند منجر به خرابی شود:

from textblob.en import Spelling        
from textblob import TextBlob

pathToFile = "train.txt" 
spelling = Spelling(path = pathToFile)
text = " "

with open("test.txt", "r") as f: 
    text = f.read()

words = text.split()
corrected = " "
for i in words :
    corrected = corrected +" "+ spelling.suggest(i)(0)(0) 

print(corrected)

و در حال حاضر، این منجر به:

As far as I am all to judge after long attending to the subject the conditions of life appear to act in two ways—directly روی the whole organisation or روی certain parts alone and indirectly by acting the reproduce system It respect to the direct action we most be in mid the in every case as Professor Weismann as lately insisted and as I have incidently shown in my work روی "Variatin under Domesticcation," there are two facts namely the nature of the organism and the nature of the conditions The former seems to be much th are important for nearly similar variations sometimes arise under as far as we in judge dissimilar conditions and روی the other hand dissimilar variations arise under conditions which appear to be nearly uniform The effects روی the offspring are either definite or in definite They may be considered as definite when all or nearly all the offspring off individuals exposed to certain conditions during several generations are modified in the same manner.

این تقریباً 2 از 3 کلمه غلط املایی را برطرف می کند که با توجه به اجرای بدون زمینه زیاد بسیار خوب است.

نتیجه

در این مقاله استفاده خواهیم کرد TextBlob برای پیاده سازی یک تصحیح املایی پایه، هر دو با مدل پیش بینی سهام یک مدل سفارشی.

تصحیح خطاهای املایی ساخته دست بشر به یک کار رایج برای توسعه دهندگان نرم افزار تبدیل شده است. اگرچه از طریق داده کاوی ساده تر و کارآمدتر شده است، بسیاری از اشتباهات املایی نیاز به اصلاح زمینه دارند.

در نتیجه، تصحیح‌کنندگان احتمالاً به این زودی‌ها خودکار از کار خارج نمی‌شوند، اگرچه برخی اصلاحات اساسی را می‌توان خودکار کرد تا در زمان و تلاش صرفه‌جویی شود.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-13 20:56:04

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید