از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
NLP ساده در پایتون با TextBlob: Pluralization و Singularization
سرفصلهای مطلب
معرفی
در دنیای دیجیتال امروزی، حجم وسیعی از داده های متنی در قالب اخبار، توییت ها و پست های رسانه های اجتماعی ایجاد و منتقل می شود. آیا می توانید زمان و تلاش لازم را برای آن تصور کنید process آنها را به صورت دستی؟ خوشبختانه، پردازش زبان طبیعی (NLP) تکنیک ها به ما کمک می کنند تا داده های متنی را به سرعت و کارآمد دستکاری، تحلیل و تفسیر کنیم. NLP شاخهای از هوش مصنوعی است که در آن ماشینهایی را آموزش میدهیم تا زبان انسان را بفهمند و وظایفی از خلاصهسازی و ترجمه تا تحلیل احساسات را انجام دهند.
یکی از ملزومات رایج در NLP پرداختن به اشکال مفرد و جمع کلمات و تبدیل یکی به دیگری است. در این مقاله، روش انجام جمعسازی و تکینگی کلمات با استفاده از بسته Python TextBlob را مورد بحث قرار خواهیم داد.
مفرد و کثرت به چه معناست؟
می دانیم که اسم ها می توانند مفرد یا جمع باشند، مانند کتاب/کتاب، گربه/گربه و شیرین/شیرینی. برای کمک به پیش پردازش داده ها و دستیابی به دقت بهتر در ترجمه، تجزیه و تحلیل متن و تولید متن، به تکنیک هایی برای تبدیل متن به اشکال جمع/مفرد نیاز داریم. به این تکلیف تبدیل از مفرد به جمع و بالعکس به این صورت گفته می شود عطف کلمه در NLP
بیایید به الگوها / قوانین رایج برای تبدیل مفرد به جمع در زبان انگلیسی نگاه کنیم:
-
اضافه کردن “-s” در پایان: این رایج ترین الگو است. مثلاً cot->cots, desk-> desk, lake-> lakes. حذف ‘s’ قانونی است که برای تبدیل جمع به مفرد دنبال می شود.
-
اضافه کردن “-es” در پایان: این قانون معمولاً برای کلماتی که به صداهای ‘s’، ‘x’، ‘z’، ‘ch’ یا ‘sh’ ختم می شوند، رعایت می شود. مثال: اتوبوس -> اتوبوس، کلیسا-> کلیساها، برس-> برس.
-
جایگزینی “-y” با “-ies”: برای اسم هایی که به حرف “ی” ختم می شوند دنبال می شود. مثال: توله سگ -> توله سگ، شهر -> شهرها.
-
الگوهای نامنظم: برخی از اسم ها از هیچ یک از الگوهای ذکر شده در بالا پیروی نمی کنند. به عنوان مثال، کودک->کودکان، پا->پا، موش->موش. رسیدگی به این موارد می تواند کمی دشوار باشد.
مقدمه ای بر TextBlob و نصب
زبان برنامه نویسی پایتون بسته های مختلفی را ارائه می دهد که به ما امکان می دهد وظایف مختلفی را در NLP پیاده سازی کنیم. یکی از بسته های پرکاربرد TextBlob است که توابعی را برای انجام آسان وظایف مختلف NLP از جمله singularization/pluralization ارائه می دهد. این کتابخانه ساخته شده است روی بالای NLTK (کتاب ابزار زبان طبیعی) و یادگیری آن آسان است. شما می توانید به رسمی مراجعه کنید مستندات از TextBlob برای آشنایی با تمام عملکردهایی که ارائه می دهد.
بیایید با نصب کتابخانه با استفاده از pip
مدیر بسته با اجرای دستور زیر.
$ pip install textblob
پس از اتمام نصب، می توانید import کتابخانه در پایتون شما notebook یا فیلمنامه
from textblob import Word
تو می توانی import را Word
کلاس از ماژول هنگامی که یک متن به شکل رشته به این کلاس ارسال می شود، یک شی TextBlob Word ایجاد می شود که بر اساس آن می توان توابع مختلفی را برای انجام نشانه گذاری، عطف کلمه، واژه سازی و غیره فراخوانی کرد.
در قطعه زیر، یک شی TextBlob از آن ایجاد می کنیم Word
کلاس ‘doc1’ با ارسال یک رشته متن.
text = "I usually take a bus from my university to the park."
doc1 = Word(text)
در بخش های بعدی، روش استفاده از توابع مختلف را نشان خواهیم داد روی شیء کلاس TextBlob برای انجام کثرت و تکینگی.
کثرت سازی با TextBlob
ما به راحتی می توانیم یک اسم را از حالت مفرد به جمع تبدیل کنیم pluralize()
عملکرد در TextBlob بیایید روش بدست آوردن شکل جمع “توله سگ” را در کد مثال زیر بررسی کنیم. به سادگی یک شی TextBlob از کلمه ایجاد کنید و تابع را فراخوانی کنید pluralize()
روی آی تی.
from textblob import Word
blob = Word("puppy")
pluralized_word = blob.pluralize()
print(pluralized_word)
TextBlob می تواند بسیاری از الگوهای متداول کثرت سازی، از جمله الگوهای نامنظم را مدیریت کند. بیایید این را با چند مثال دیگر بررسی کنیم:
plural_form = Word("box").pluralize()
print(plural_form)
plural_form = Word("man").pluralize()
print(plural_form)
plural_form = Word("tooth").pluralize()
print(plural_form)
plural_form = Word("ox").pluralize()
print(plural_form)
از خروجی بالا، می توانید مشاهده کنید که TextBlob الگوهای نامنظم مانند ox-> oxen و child-> child ها را نیز کنترل می کند.
حال بیایید کلمه “آب” را در نظر بگیریم. آیا می توانید آن را به جمع تبدیل کنید؟ نه! کلماتی مانند آب و مبلمان به عنوان اسامی غیرقابل شمارش شناخته می شوند و بین اشکال مفرد/جمع بدون تغییر باقی می مانند. خوشبختانه TextBlob برای درک این موارد مجهز است و آنها را اصلاح نمی کند.
plural_form = Word('water').pluralize()
print(plural_form)
plural_form = Word("information").pluralize()
print(plural_form)
چگونه Pluralize
کلمات خاص در یک جمله؟
اغلب، زمانی که با اسناد متنی سروکار دارید، ممکن است بخواهید کلمات خاصی را اصلاح کنید. فرض کنید متنی «The container چندین جعبه پر از کنسرو داشت”، و شما می خواهید “box” را به “جعبه” تبدیل کنید تا از نظر گرامری سازگار باشد. ابتدا یک شی TextBlob برای جمله ایجاد کنید. روی این شی، از ” استفاده کنید.words()
تابع برای دریافت لیستی از کلمات در جمله. اکنون می توانید از نمایه این کلمات برای تبدیل هر یک از آنها به صورت جمع استفاده کنید. توجه داشته باشید که شما نیز نیاز دارید import بسته NLTK برای استفاده از توابع برای استخراج لیست کلمات، به دلیل وابستگی به بسته.
import nltk
nltk.download('punkt')
from textblob import TextBlob
sentence = "The container had multiple box filled with canned goods"
blob = TextBlob(sentence)
words = blob.words
pluralized_word = words(4).pluralize()
جمله اصلاح شده ای که در خروجی دریافت می کنید این خواهد بود:
خروجی به دلخواه با تغییرات انجام شده است. از این روش می توان استفاده کرد singularize
یا pluralize
همه اسم ها در یک سند متنی کامل نیز.
تکینگی با TextBlob
تبدیل اسم از حالت جمع به مفرد آن به مفرد شدن معروف است و معمولاً برای به دست آوردن کلمات پایه استفاده می شود. برای جلوگیری از افزونگی در حین کار با حروف متنی بزرگ، اشکال جمع اغلب به آنها کاهش می یابد root یا فرم مفرد به ما کمک می کند استاندارد کردن داده های متنی و کاهش ابعاد واژگان. TextBlob شبیه به جمعسازی، یک روش داخلی نیز ارائه میکند singularize()
برای رسیدگی به تکینگی.
همانطور که در بخش قبل انجام دادیم، یک شی کلاس TextBlob برای کلمه خود ایجاد کنید و آن را فراخوانی کنید singularize()
روش روی آی تی. این روش می تواند قواعد مختلف تکینگی، از جمله موارد نامنظم را کنترل کند. من این را با مجموعه ای متنوع از مثال های زیر نشان داده ام.
singular_form = Word("curtains").singularize()
print(singular_form)
singular_form = Word("mattresses").singularize()
print(singular_form)
singular_form = Word("geese").singularize()
print(singular_form)
singular_form = Word("mice").singularize()
print(singular_form)
چگونه می توانید singularize
همه اسامی در سند شما؟
همانطور که در ابتدای این بخش بحث کردیم، استانداردسازی اسامی در متن یک نیاز رایج در NLP است. فرض کنید یک پاراگراف در سند خود داریم که در زیر نشان داده شده است.
paragraph = "The bookshop around the corner sells all genres of books, including fiction, non-fiction, autobiographies, and much more. The quality of the books is amazing, and they are all bestsellers. I recently bought the New York Times Bestseller Atomic Habits from there."
اگر توجه داشته باشید، کلمات “کتاب” و “کتاب”، “پرفروش” و “پرفروش” در این وجود دارد. برای درک متنی در NLP، فقط root کلمه ضروری است از این رو، میتوانیم آنها را به شکلهای استاندارد مفرد و حجم دایره لغاتمان را کم کنیم. اکنون به شما نشان خواهم داد که چگونه این کار را به راحتی با TextBlob انجام دهید.
nltk.download('averaged_perceptron_tagger')
blob = TextBlob(paragraph)
nouns = (word.singularize() for word, tag in blob.tags if tag.startswith('NN'))
unique_nouns = set(nouns)
for noun in unique_nouns:
print(noun)
از خروجی، می توانید تأیید کنید که هر اسم به شکل مفرد خود (استاندارد) تبدیل شده است!
چگونه قوانین سفارشی را برای تکینگی و کثرت تعریف کنیم؟
در حالی که توابع داخلی TextBlob singularize()
نتایج دقیقی را برای اکثر اسمها در انگلیسی ارائه میکند، این اشتباه نیست. من شما را از طریق برخی موقعیتهای رایج که در آن TextBlob ممکن است نتواند عطف را مدیریت کند، راهنمایی میکنم.
هنگامی که این قوانین را تعریف کردید، TextBlob آنها را به خاطر می آورد و هنگامی که با این کلمات خاص روبرو می شود به طور خودکار آنها را اعمال می کند.
برای کمک به درک بهتر، برخی از موارد رایج را که ممکن است تنظیم قوانین سفارشی ضروری باشد، به شما معرفی خواهم کرد:
-
کلمات غیر انگلیسی: قوانین پیش فرض TextBlob در درجه اول برای کلمات انگلیسی طراحی شده است. اگر با کلمات غیرانگلیسی مواجه شدید که از الگوهای متکثر یا تکینگی متفاوت پیروی می کنند، ممکن است لازم باشد قوانین سفارشی تنظیم کنید. به عنوان مثال: کاکتوس -> کاکتوس، اختاپوس -> اختاپوس.
-
شرایط خاص دامنه: برخی از اصطلاحات خاص دامنه ممکن است اشکال تکثر یا تکینگی منحصر به فردی داشته باشند که توسط قوانین پیش فرض پوشش داده نمی شوند. مثال: ویروس -> ویروس، سؤالات متداول -> سؤالات متداول (مخفف)
در این مواقع چه کنیم؟
شما می توانید از یک بسته جایگزین پایتون به نام “الگو” استفاده کنید تا به راحتی قوانین سفارشی را برای عطف کلمه تعریف کنید. وارد کنید singularize
و pluralize
توابع از pattern.en
مدول. در مرحله بعد، میتوانیم قوانین تکینگی و کثرتسازی سفارشی را با استفاده از دیکشنریها مطابق شکل زیر تعریف کنیم.
import pattern
from pattern.en import singularize, pluralize
custom_plural_rules = {'virus': 'viri', 'SAT': 'SATs'}
def custom_plural(word):
if word in custom_plural_rules:
return custom_plural_rules(word)
return pluralize(word)
print(custom_plural('virus'))
اگر کلمه ورودی در فرهنگ لغت وجود داشته باشد، قوانین سفارشی ما اعمال خواهند شد. در غیر این صورت از قوانین پیش فرض برای تبدیل استفاده می شود.
چه زمانی باید TextBlob را انتخاب کنید و چرا؟
یکی از مزایای اصلی TextBlob سینتکس و API آسان برای استفاده آن است که باعث می شود مبتدی پسند. جدای از تکینسازی/تکثیرسازی، ما همچنین میتوانیم مجموعهای از وظایف از جمله برچسبگذاری بخشی از گفتار، استخراج عبارت اسمی، تحلیل احساسات و موارد دیگر را انجام دهیم، همانطور که با مدلهای از پیش آموزشدیده ارائه میشود. آی تی یکپارچه ادغام می شود با ابزارهای دیگری که معمولا در اکوسیستم پایتون استفاده می شود، مانند NLTK.
از سوی دیگر، TextBlob ممکن است بهترین انتخاب برای کارهای پردازش متن در مقیاس بزرگ که از نظر محاسباتی فشرده هستند یا زمانی که به کنترل دقیق نیاز است، نباشد. در این موارد می توانید بسته های جایگزینی مانند spaCy و Stanford CoreNLP را در نظر بگیرید. spaCy قابلیتهای قوی برای مدیریت کثرتسازی و تکینگی در حالی که با پردازش متن در مقیاس بزرگ سروکار دارد، فراهم میکند. شما می توانید بررسی کنید اسناد spaCy در اینجا.
نتیجه
روش های داخلی کتابخانه TextBlob pluralize()
و singularize()
روش های کارآمدی برای انجام وظایف عطف کلمه هستند. این روش ها می توانند الگوهای مختلف اسامی مفرد/جمع را در زبان انگلیسی مدیریت کنند. TextBlob همچنین می تواند اکثر الگوهای نامنظم را مدیریت کند. این ویژگیها و قابلیتها TextBlob را به گزینهای عالی برای وظایف عطف کلمه تبدیل میکند.
اگر می خواهید روش اجرای سایر تکنیک های NLP در TextBlob را بدانید، می توانید این مقالات را بررسی کنید. اگر میخواهید قوانین عطف سفارشی را برای اصطلاحات خاص دامنه خود تعریف کنید، الگو بسته مفید دیگری است. شما می توانید TextBlob و جایگزین های آن را بر اساس ارزیابی کنید روی نیازهای عملکرد شما امیدوارم از خواندن لذت برده باشید!
(برچسبها به ترجمه)# python
منتشر شده در 1402-12-31 13:16:03