پارسی ور (Parsivar) چیست؟ – قسمت دوم

آموزش کامل کتابخانه پارسی ور در پایتون

فهرست مطالب

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

در مقاله Parsivar به معرفی و نصب ابزارهای پیش نیاز برای انجام پروژه ها (پایتون و کتابخانه پارسی ور) پرداختیم. حال در این آموزش قصد داریم قابلیت‌های مختلف کتابخانه پارسی ور را مرور کنیم و بفهمیم پارسی ور چیست.

ابزارهای پردازش زبان طبیعی

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

پیش‌پردازش داده با پارسی ور (Parsivar)

یک مرحله مهم در پردازش زبان طبیعی “پیش‌پردازش داده” است. پیش‌پردازش داده، فرایند تبدیل داده خام، به فرمتی است که برای ماشین خوانا و قابل‌درک باشد. برای انجام هر فعالیت مرتبط با پردازش زبان طبیعی لازم است ابتدا متون تمیز شده و پیش‌پردازش شوند.

مراحل پیش‌پردازش معمولاً ثابت بوده و شامل مواردی است که در این آموزش به‌مرور ابتدا تعریف شده و سپس نحوه استفاده از آن در پارسی ور بررسی می‌شود.

پیش‌پردازش متون شامل موارد زیر است:

  • نرمال‌سازی متن
  • تبدیل متن به جملات (Sentence Tokenization)
  • تبدیل جملات به کلمات (Word Tokenization)
  • ریشه‌یابی (Stemming)
  • Lemmatization
  • تشخیص نقش کلمات (Part-of-speech Tagging)
  • قطعه‌بندی (Chunker)
  • پارسر یا تجزیه‌گر جملات
  • تصحیح خطای املایی (Spell Correction)

در هر پروژه معمولاً برخی از موارد بالا استفاده می‌شوند. در این مقاله قسمت اول از لیست بالا آموزش داده می‌شود و در مقاله بعدی موارد دیگری از امکانات کتابخانه پارسی ور بررسی خواهند شد.

تمامی کدها به زبان پایتون هستند. اگر هنوز با این زبان برنامه نویسی آشنا نیستید و به دنبال آموزش پایتون برای علم داده هستید، آموزش پایتون ویژه هوش مصنوعی را در کانال یوتیوب دیتاهاب مشاهده کنید.

یکسان سازی یا نرمال سازی متون فارسی

در فرایند نرمال‌سازی می‌خواهیم همه متون استاندارد و یکپارچه شوند. برای مثال:

  • تبدیل اعداد انگلیسی‌ به‌ فارسی
  • حذف اسپیس‌ها و فضاهای خالی اضافی مثل “سلام         خوبی” به “سلام خوبی”
  • حذف تشدید از کلمات (چون تشدید مخصوص زبان عربی است)
  • و موارد مختلفی دیگری که بسته به نیاز هر پروژه باید روی متن اعمال شود تا متون همه یکدست شوند.

ابتدا برای استفاده از کتابخانه پارسی ور باید آن را فراخوانی کنیم:

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

سپس برای نرمال‌سازی (استانداردسازی) متن، یک شی از کلاس Normalizer می‌سازیم:

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

یک متغیر رشته‌ای با نام دلخواه ایجاد کرده و آن را با یک متن دلخواه مقداردهی می‌کنیم. متن استفاده شده در کد به‌صورت زیر است:

“به گزارش ایسنا سمینار شیمی آلی از امروز ۱۱ شهریور ۱۳۹۶ در دانشگاه علم و صنعت ایران آغاز به کارکرد. این سمینار تا ۱۳ شهریور ادامه می‌ یابد.”

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

در اینجا تابع normalizer از شی my_normalizer را صدا زده و متغیرمان را به‌عنوان آرگومان ارسال می‌کنیم:

ارسال آرگومان به تابع نرمالسازی در کتابخانه پارسی ور

خروجی به‌صورت زیر است:

خروجی ارسال آرگومان به تابع نرمالسازی در کتابخانه پارسی ور

مواردی که اصلاح شدند:

  • شامل تبدیل ارقام فارسی‌ به‌ انگلیسی
  • ایجاد فاصله بین نقطه و کاراکترهای اطرافش
  • تبدیل فاصله به نیم‌فاصله

یک قابلیت جالب Normalizer استخراج تاریخ از متن است. کافی است مقدار date_normalizing_needed را True کرده و به‌عنوان آرگومان ارسال کنیم.

استخراج تاریخ از متن در کتابخانه پارسی ور

دوباره تابع normalizer را صدا زده و متغیرمان را به‌عنوان آرگومان ارسال می‌کنیم.

ارسال آرگومان به تابع نرمالسازی در کتابخانه پارسی ور

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

خروجی استخراج تاریخ از متن در کتابخانه پارسی ور

یک قابلیت دیگر Normalizer تبدیل کلمات فینگلیش به فارسی است. کافی است مقدار pinglish_conversion_needed را True کرده و به‌عنوان آرگومان ارسال کنیم:

تبدیل کلمات فینگلیش به فارسی در پارسی ور

دوباره تابع normalizer را صدا زده و متغیرمان را به‌عنوان آرگومان ارسال می‌کنیم و نتیجه به‌صورت زیر است:

مثال تبدیل کلمات فینگلیش به فارسی در کتابخانه پارسی ور

 دوست دارید پروژه‌هایی برای پردازش متن یاد بگیرید که در کارهای دنیایی واقعی استفاده می‌شوند؟ صفحه آموزش متن کاوی فارسی با شبکه‌های عصبی را ببینید.

نقش واحدساز (Tokenizer) در پردازش متن فارسی با پارسی ور

توکنایزر فرایندی است که طی آن یک متن به تعدادی جمله تقسیم می‌شود. معیار تقسیم‌بندی معمولاً علائم تمام‌کننده جمله مثل”.!؟” است.

در کتابخانه پارسی ور برای استفاده از این قابلیت ابتدا کلاس Tokenizer را import می‌کنیم:

فراخوانی tokenizer در کتابخانه پارسی ور

سپس از کلاس Tokenizer  یک شی می‌سازیم:

ساخت شی tokenizer در کتابخانه پارسی ور

حال از تابع  tokenize_sentences کمک گرفته و متن نرمال شده را به‌عنوان آرگومان ارسال می‌کنیم. (بهتر است ابتدا متن نرمال شود و سپس به جملات تبدیل شود):

ارسال آرگومان به tokenizer در کتابخانه پارسی ور

نتایج در متغیر sents ذخیره می‌شود.

همین‌طور که قابل‌مشاهده است متن اصلی به تعدادی جمله تبدیل شده است:

خروجی Tokenizer در کتابخانه پارسی ور

Word Tokenization چیست؟

به فرایندی که طی آن جمله به یکسری کلمه (توکن) تبدیل می‌شود، Word Tokenization می‌گویند. در کتابخانه پارسی ور برای استفاده از این قابلیت کافی است تابع tokenize_words از شی my_tokenizer را فراخوانی کنیم:

تبدیل جمله به کلمه در کتابخانه پارسی ور

خروجی شامل یکسری واژه است:

خروجی تبدیل جمله به کلمه در کتابخانه پارسی ور

نقش ریشه یاب (Stemmer) در تحلیل متن و پردازش زبان طبیعی فارسی

فرایندی که طی آن ریشه یک کلمه به دست می‌آید را ریشه یابی یا Stemming می‌گویند. مثل “کتاب‌ها” که دارای ریشه “کتاب” است یا “می خوردن” که دارای ریشه “خورد#خور” است. در فرایند Stemming، برای به‌دست‌آوردن ریشه، یکسری گام‌ها به ترتیب انجام می‌شوند و در اصطلاح برای آن الگوریتم تعریف می‌شود، برای مثال ابتدا پیشوند حذف می‌شود. در گام بعدی به سراغ پسوندها می‌روند و گام‌های بعدی به همین صورت.

ضعف جدی این روش گاهی تولید ریشه بی‌معنی است، مثلاً ریشه “بشارت دادم” که ممکن است “ب” به‌عنوان پیشوند در نظر گرفته و نتیجه غلط شود. برای زبان انگلیسی معمولاً از الگوریتم پورتر استفاده می‌کنند ولی متأسفانه برای زبان فارسی الگوریتم قابل اعتمادی توسط زبان‌شناسان ارائه نشده است.

اگر اول راه پردازش زبان طبیعی هستید و می‌خواهید کار بر روی پروژه‌های واقعی NLP را یاد بگیرید، دوره آموزش پردازش زبان طبیعی مقدماتی را از دست ندهید.

Lemmatization چیست؟

هر دوی Stemming و Lemmatization یک کار یکسان ولی به روش مختلف انجام می‌دهند. Lemmatization شبیه به این است که با دیدن یک کلمه، به سراغ دایره معارف رفته و بررسی‌های لازم را انجام داده و یک کلمه را به‌عنوان ریشه برمی‌گردانیم. مزیت این روش تولید نشدن کلمات نامربوط به‌عنوان ریشه است. البته سرعت این روش نسبت به Stemming پایین‌تر است چون باید جستجو انجام شود. پارسی ور فقط از قابلیت Stemming پشتیبانی می‌کند. برای استفاده از این قابلیت ابتدا کلاس  FindStems را import می‌کنیم: فراخوانی کلاس findStems در کتابخانه پارسی ور سپس یک شی از FindStems می‌سازیم: ساخت شی از کلاس findStems در کتابخانه پارسی ور در نهایت کلمه موردنظر را به تابع convert_to_stem از شی my_stemmer می‌فرستیم: مثال findStems در کتابخانه پارسی ور چون “می روم” یک فعل است خروجی باید به‌صورت بن‌های ماضی یا مضارع باشد: خروجی مثال findStems در کتابخانه پارسی ور برای تست بیشتر کد زیر را اجرا می‌کنیم: مثال کلاس findStems در کتابخانه پارسی ور به‌طورکلی نتایج قابل‌قبول است. ولی در تشخیص برخی از افعال و جمع مکسر مشکل دارد.  

در این مقاله آموزشی ابتدا مراحل مختلف پیش‌پردازش متون را معرفی کرده و بخش اول از آن را به کمک کتابخانه پارسی ور پیاده‌سازی کردیم و فهمیدیم قابلیت‌های پارسی ور چیست. در مقاله متن کاوی با پایتون قسمت دوم پیش‌پردازش‌ها را به کمک کتابخانه پارسی ور پیاده‌سازی می‌کنیم. با ما همراه باشید...

مطالب بیشتر

دیدگاهتان را بنویسید