فهرست مطالب
در مقاله قبل، فهمیدیم قابلیتهای پارسی ور چیست و برخی از توابع آن را در پایتون معرفی کردیم. در این مقاله آموزشی مابقی مراحل متن کاوی با پایتون را با استفاده از پارسی ور پیادهسازی میکنیم.
متن کاوی با پایتون
در این مقاله موارد زیر را یاد میگیریم:
- تشخیص نقش کلمات (Part-of-speech Tagging)
- قطعهبندی (Chunker)
- پارسر یا تجزیهگر جملات
- تصحیح خطای املایی (Spell Correction)
سپس روی یک دیتاست از توییتهای فارسی چند مرحله پیشپردازش جانبی با هدف متن کاوی با پایتون انجام میدهیم:
- شکلکها
- آدرسهای اینترنتی
- حذف فضاهای خالی اضافی
- موجودیتهای HTML
- دنبالهای از کاراکترهای تکرار شده
تمامی کدها به زبان پایتون هستند. اگر هنوز با این زبان برنامه نویسی آشنا نیستید و به دنبال آموزش پایتون برای علم داده هستید، آموزش پایتون ویژه هوش مصنوعی را در کانال یوتیوب دیتاهاب مشاهده کنید.
نقش برچسب گذار (POS tagger) در پردازش متن فارسی
در متن کاوی با پایتون هدف از برچسب گذاری، تعیین نقش هر کلمه در جمله است؛ مثلاً تعیین میکنیم یک کلمه فعل است یا قید یا دیگر نقشها. نقش کلمات در جملات از مهمترین پیشپردازشهایی است که در بسیاری از فعالیتهای دیگر مثل Chunker استفاده میشود.
برای استفاده از این قابلیت در parsivar کافی است POSTagger را import کنیم:
سپس یک شی از کلاس POSTagger بسازیم:
حال یک متغیر رشتهای حاوی یک جمله تعریف میکنیم:
سپس تابع parse از شی my_tagger فراخوانی کرده و جملهمان را بهعنوان ورودی ارسال میکنیم:
اگر با خطای مربوط به نصب نبودن جاوا روبرو شدید باید “Java Standard Edition” و ” Java Development Kit (JDK)” نصب کنید. سپس متغیرهای سیستمی لازم را ایجاد کنید و سیستم خود را Restart کنید.
سپس این سلول را مجدداً Run کنید. نباید دچار خطا شوید:
در نهایت خروجی را چاپ میکنیم:
برای مثال کلمه “سمینار” بهعنوان اسم شناخته شده است و کلمه “مییابد” فعل تشخیص داده است. خروجی “.” خودش است و یعنی پارسی ور نقش آن را نتوانسته تشخیص دهد، زیرا اگر بهازای کلمهای، POSTagger خود کلمه را برگرداند، یعنی POSTagger نتوانسته نقش کلمه را تشخیص دهد.
قطعهبندی (Chunker) در متن کاوی فارسی در پایتون
قطعهبندی فرایندی است که طی آن گروههای (عبارات) اسمی، فعلی، صفات و … در یک جمله تشخیص داده میشوند. برای مثال “نخستین فاتح قله اورست” یک عبارت اسمی است.
برای استفاده از این ابزار در parsivar ابتدا FindChunks را import میکنیم:
در گام بعدی یک شی از کلاس FindChunks ایجاد میکنیم:
سپس تابع chunk_sentence از شی my_chunker را فراخوانی کرده و جملهمان را بهعنوان ورودی ارسال میکنیم:
برای نمایش خروجی، کد زیر را اجرا میکنیم:
“این سمینار” بهدرستی تشخیصدادهشده ولی دو مورد بعدی دچار خطاست.
ابزار پارسر یا تجزیهگر جملات فارسي
وظیفه پارسر در متن کاوی با پایتون، تجزیهوتحلیل جمله و سپس شکستن آن به اجزای تشکیلدهنده مثل گروههای اسمی، فعلی، و غیره و همچنین تعیین روابط بین این اجزاست.
برای استفاده از این ابزار در parsivar ابتدا DependencyParser را import میکنیم:
در مرحله بعدی یک شی از کلاس DependencyParser ایجاد میکنیم:
حالا یک متغیر رشتهای شامل یک جمله تعریف میکنیم:
سپس تابع tokenize_sentences از شی my_tokenizer را فراخوانی کرده و جملهمان را بهعنوان ورودی ارسال میکنیم:
خروجی کد بالا تبدیل متن ورودی به لیستی از جملات است. حالا این لیست را به تابع parse_sents از شی myparser میفرستیم:
در نهایت برای چاپ نتایج از حلقه زیر استفاده میکنیم:
نتیجه قابلقبول است و فاصله بین “می” و “دوید” به دلیل مشکل چاپ نوشتههای فارسی در jupyter notebook است.
اگر اول راه پردازش زبان طبیعی هستید و میخواهید کار بر روی پروژههای واقعی NLP را یاد بگیرید، دوره آموزش پردازش زبان طبیعی مقدماتی را از دست ندهید.
تصحیح خطای املایی (Spell Correction) در پردازش زبان طبیعی
تصحیح املا، فرایند اصلاح خودکار غلطهای املایی است که در نوشته وجود دارد. در متن کاوی با پایتون برای تصحیح متون از نظر املایی، ابتدا ابزار اصلاح غلطهای املایی در پارسی ور را دانلود کرده و از حالت فشرده خارج میکنیم. سپس SpellCheck را import میکنیم: کد بالا اجرا میکنیم و با خطای زیر روبرو میشوید: برای رفع خطای SpellCheck، پوشه spell را به آدرسی که در خطای بالا وجود دارد انتقال دهید. برای مثال آدرس مناسب برای سیستم بنده بهصورت زیر است: پس از انتقال پوشه، دوباره این دستور را اجرا میکنیم: بدون خطا باید اجرا شود. سپس یک شی از کلاس SpellCheck میسازیم: در نهایت متن دلخواهی را به تابع spell_corrector از شی myspell_checker میفرستیم: خروجی بهصورت زیر است. تا اینجا ابزارهای مهم متن کاوی با پایتون با کتابخانه پارسی ور را بررسی کردیم. البته همیشه ابزارهای آماده تماموکمال نبوده و موارد زیادی هست که پوشش نداده و مجبور هستیم خودمان پیادهسازی کنیم. در ادامه، برخی خصوصیات و پیچیدگیهایی که در زمان متن کاوی فارسی در پایتون با آنها روبرو میشویم که پارسی ور نمیتواند آن را برطرف کند، را بررسی میکنیم.- حضور کلمات مخفف “صمت” و یا کلمه پیچیدهتر “APL”. آیا به معنی apple (سیب) است؟ منظور کارخانه Apple است؟ در چنین مواقع کار برای مدل سخت و تشخیص منظور مخاطب دشوار میشود.
- حضور رشتهای از کاراکترهای تکرار شده مثل “عالیییییییییییییی” و “بدددددددددددددد”. عموماً وقتی چند کاراکتر در یک کلمه تکرار شود، برای تأکید بیشتر است، تا تأثیر آن بیشتر شود. برای مثال “طرح افزایش حقوق عالیییییی بود، دمشون گرم” که نظر مثبت یک فرد را نسبت به یک اقدام دولتی نشان میدهد.
- غلطهای املایی مثل “جواد زریف” که مدل را گیج میکنند.
- زبان کوچهبازاری مثل “دمشون گرم”
تجزیه و تحلیل ایموجی یا شکلکها
شکلکها یا ایموجیها یکی از پرتکرارترین عناصر نظرات کاربران است که به کمک آن حس و حال خود را بیان میکنند. در متن کاوی فارسی در پایتون این شکلکها یا باید حذف شوند یا به شکل مناسبی تبدیل شوند. پس تمام شکلکها را با معنای قطبی آنها (مثبت و منفی بودن) به شکل ||pos|| (مثبت) و ||neg|| (منفی) با استفاده از دیکشنری شکلکها جایگزین کردیم. برای انجام این جایگزینی، هر متن را پیمایش کرده و با استفاده از عبارات منظم بررسی کردیم که هر متن شامل هیچ شکلکی بود یا نه، اگر شکلک داشت با معنای قطبی معادلشان جایگزین میشود:آدرسهای اینترنتی در پیش پردازش متن
ازآنجاییکه آدرسهای اینترنتی معنی و مفهوم خاصی ندارند پس تمام آدرسهای اینترنتی را به کمک تابع حذف کردیم، زیرا اطلاعات مفیدی در تحلیل ارائه نمیدادند:حذف فضاهای خالی اضافی در متون با کتابخانه پارسی ور
در این قسمت به سراغ فضاهای خالی اضافی مثل (tab, newline) میرویم و موارد زائد را اصلاح میکنیم:آشنایی با موجودیت ها در HTML در متون
موجودیتهای HTML کاراکترهایی هستند که در HTML رزرو شدهاند. نیاز داشتیم که آنها را رمزگشایی کنیم تا تبدیل به موجودیتهای کاراکتری بشوند تا بتوانیم آنها را قابلدرک کنیم. مثلاً بین یک تگ<p> قطعاً نوشتههای مناسبی هست که میتوان استخراج کرد:اصلاح کاراکترهای تکرار شده در متن کاوی فارسی
در برخی مواقع شاهد تکرار یک کاراکتر هستیم که کاربر عمدتاً باهدف تأکید یک کاراکتر را تکرار میکند مثل”عالییییی”. در چنین شرایطی واژه اصلی اصلاح شده ولی مجدداً تکرار میشود تا اثر آن حفظ شود مثل “عالی عالی”. البته موارد ذکر شده صرفاً بخشی از چالشهایی است که در محیط واقعی متن کاوی با پایتون با آن باید دستوپنجه نرم کنیم.در دوره آموزش متن کاوی فارسی با شبکههای عصبی با تمرکز روی زبان فارسی، جدیدترین تکنیکهای متن کاوی با پایتون با کدنویسی فراوان آموزش داده میشود.
در چندین مقاله اخیر، با متن کاوی فارسی در پایتون و قابلیتهای کتابخانه پارسی ور آشنا شدیم. کتابخانه دیگری که برای پیشپردازش متون فارسی وجود دارد، کتابخانه هضم است. در مقاله بعدی که آخرین مقاله این مجموعه از آموزشهای پردازش زبان طبیعی میباشد، به بررسی کامل این کتابخانه میپردازیم.