فهرست مطالب
انجام مراحل مختلف پیش پردازش متون با استفاده از پارسی ور
در مقاله 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 یک شی میسازیم:
حال از تابع tokenize_sentences کمک گرفته و متن نرمال شده را بهعنوان آرگومان ارسال میکنیم. (بهتر است ابتدا متن نرمال شود و سپس به جملات تبدیل شود):
نتایج در متغیر sents ذخیره میشود.
همینطور که قابلمشاهده است متن اصلی به تعدادی جمله تبدیل شده است:
Word Tokenization چیست؟
به فرایندی که طی آن جمله به یکسری کلمه (توکن) تبدیل میشود، Word Tokenization میگویند. در کتابخانه پارسی ور برای استفاده از این قابلیت کافی است تابع tokenize_words از شی my_tokenizer را فراخوانی کنیم:
خروجی شامل یکسری واژه است:
نقش ریشه یاب (Stemmer) در تحلیل متن و پردازش زبان طبیعی فارسی
فرایندی که طی آن ریشه یک کلمه به دست میآید را ریشه یابی یا Stemming میگویند. مثل “کتابها” که دارای ریشه “کتاب” است یا “می خوردن” که دارای ریشه “خورد#خور” است. در فرایند Stemming، برای بهدستآوردن ریشه، یکسری گامها به ترتیب انجام میشوند و در اصطلاح برای آن الگوریتم تعریف میشود، برای مثال ابتدا پیشوند حذف میشود. در گام بعدی به سراغ پسوندها میروند و گامهای بعدی به همین صورت.
ضعف جدی این روش گاهی تولید ریشه بیمعنی است، مثلاً ریشه “بشارت دادم” که ممکن است “ب” بهعنوان پیشوند در نظر گرفته و نتیجه غلط شود. برای زبان انگلیسی معمولاً از الگوریتم پورتر استفاده میکنند ولی متأسفانه برای زبان فارسی الگوریتم قابل اعتمادی توسط زبانشناسان ارائه نشده است.
اگر اول راه پردازش زبان طبیعی هستید و میخواهید کار بر روی پروژههای واقعی NLP را یاد بگیرید، دوره آموزش پردازش زبان طبیعی مقدماتی را از دست ندهید.
Lemmatization چیست؟
هر دوی Stemming و Lemmatization یک کار یکسان ولی به روش مختلف انجام میدهند. Lemmatization شبیه به این است که با دیدن یک کلمه، به سراغ دایره معارف رفته و بررسیهای لازم را انجام داده و یک کلمه را بهعنوان ریشه برمیگردانیم. مزیت این روش تولید نشدن کلمات نامربوط بهعنوان ریشه است. البته سرعت این روش نسبت به Stemming پایینتر است چون باید جستجو انجام شود. پارسی ور فقط از قابلیت Stemming پشتیبانی میکند. برای استفاده از این قابلیت ابتدا کلاس FindStems را import میکنیم: سپس یک شی از FindStems میسازیم: در نهایت کلمه موردنظر را به تابع convert_to_stem از شی my_stemmer میفرستیم: چون “می روم” یک فعل است خروجی باید بهصورت بنهای ماضی یا مضارع باشد: برای تست بیشتر کد زیر را اجرا میکنیم: بهطورکلی نتایج قابلقبول است. ولی در تشخیص برخی از افعال و جمع مکسر مشکل دارد.در این مقاله آموزشی ابتدا مراحل مختلف پیشپردازش متون را معرفی کرده و بخش اول از آن را به کمک کتابخانه پارسی ور پیادهسازی کردیم و فهمیدیم قابلیتهای پارسی ور چیست. در مقاله متن کاوی با پایتون قسمت دوم پیشپردازشها را به کمک کتابخانه پارسی ور پیادهسازی میکنیم. با ما همراه باشید...