پارسی ور (Parsivar) چیست؟ | متن کاوی با پایتون – قسمت سوم

پروژه متن کاوی با پایتون

فهرست مطالب

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

متن کاوی با پایتون

در این مقاله موارد زیر را یاد می‌گیریم:

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

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

  • شکلک‌ها
  • آدرس‌های اینترنتی
  • حذف فضاهای خالی اضافی
  • موجودیت‌های HTML
  • دنباله‌ای از کاراکترهای تکرار شده

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

نقش برچسب گذار (POS tagger) در پردازش متن فارسی

در متن کاوی با پایتون هدف از برچسب گذاری، تعیین نقش هر کلمه در جمله است؛ مثلاً تعیین می‌کنیم یک کلمه فعل است یا قید یا دیگر نقش‌ها. نقش کلمات در جملات از مهم‌ترین پیش‌پردازش‌هایی است که در بسیاری از فعالیت‌های دیگر مثل Chunker استفاده می‌شود.

برای استفاده از این قابلیت در parsivar کافی است POSTagger را import کنیم:

فراخوانی POSTagger متن کاوی فارسی در پایتون

سپس یک شی از کلاس POSTagger بسازیم:

ساخت شی از کلاس POSTagger متن کاوی فارسی در پایتون

حال یک متغیر رشته‌ای حاوی یک جمله تعریف می‌کنیم:

مثال تشخیص نقش کلمات متن کاوی فارسی در پایتون

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

فراخوانی تابع parse برای متن کاوی فارسی در پایتون

اگر با خطای مربوط به نصب نبودن جاوا روبرو شدید باید “Java Standard Edition” و ” Java Development Kit (JDK)” نصب کنید. سپس متغیرهای سیستمی لازم را ایجاد کنید و سیستم خود را Restart کنید.

سپس این سلول را مجدداً Run کنید. نباید دچار خطا شوید:

فراخوانی تابع parse برای متن کاوی فارسی در پایتون

در نهایت خروجی را چاپ می‌کنیم:

خروجی تشخیص نقش کلمات متن کاوی فارسی در پایتون

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

قطعه‌بندی (Chunker) در متن کاوی فارسی در پایتون

قطعه‌بندی فرایندی است که طی آن گروه‌های (عبارات) اسمی، فعلی، صفات و … در یک جمله تشخیص داده می‌شوند. برای مثال “نخستین فاتح قله اورست” یک عبارت اسمی است.

برای استفاده از این ابزار در parsivar ابتدا FindChunks را import می‌کنیم:

فراخوانی FindChunks برای متن کاوی فارسی در پایتون

در گام بعدی یک شی از کلاس FindChunks ایجاد می‌کنیم:

ساخت شی از کلاس FindChunks متن کاوی فارسی در پایتون

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

اجرای تابع chunk_sentence در متن کاوی فارسی در پایتون

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

خروجی قطعه بندی در متن کاوی فارسی در پایتون

“این سمینار” به‌درستی تشخیص‌داده‌شده ولی دو مورد بعدی دچار خطاست.

ابزار پارسر یا تجزیه‌گر جملات فارسي

وظیفه پارسر در متن کاوی با پایتون، تجزیه‌وتحلیل جمله و سپس شکستن آن به اجزای تشکیل‌دهنده مثل گروه‌های اسمی، فعلی، و غیره و همچنین تعیین روابط بین این اجزاست.

برای استفاده از این ابزار در parsivar ابتدا DependencyParser را import می‌کنیم:

فراخوانی DependencyParser

در مرحله بعدی یک شی از کلاس DependencyParser ایجاد می‌کنیم:

ساخت شی از کلاس DependencyParser

حالا یک متغیر رشته‌ای شامل یک جمله تعریف می‌کنیم:

مثال پارسر یا تجزیه‌گر جملات

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

فراخوانی تابع tokenize_sentences

خروجی کد بالا تبدیل متن ورودی به لیستی از جملات است. حالا این لیست را به تابع parse_sents از شی myparser می‌فرستیم:

تابع parse_sents

در نهایت برای چاپ نتایج از حلقه زیر استفاده می‌کنیم:

چاپ نتایج پارسر یا تجزیه‌گر جملات برای پردازش متون

نتیجه قابل‌قبول است و فاصله بین “می” و “دوید” به دلیل مشکل چاپ نوشته‌های فارسی در jupyter notebook است.

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

تصحیح خطای املایی (Spell Correction) در پردازش زبان طبیعی

تصحیح املا، فرایند اصلاح خودکار غلط‌های املایی است که در نوشته وجود دارد. در متن کاوی با پایتون برای تصحیح متون از نظر املایی، ابتدا ابزار اصلاح غلط‌های املایی در پارسی ور را دانلود کرده و از حالت فشرده خارج می‌کنیم. سپس SpellCheck را import می‌کنیم: فراخوانی SpellCheck برای تصحیح غلط املایی کد بالا اجرا می‌کنیم و با خطای زیر روبرو می‌شوید: خطای اجرای SpellCheck در پردازش زبان طبیعی با پایتون برای رفع خطای SpellCheck، پوشه spell را به آدرسی که در خطای بالا وجود دارد انتقال دهید. برای مثال آدرس مناسب برای سیستم بنده به‌صورت زیر است: رفع خطای SpellCheck در پردازش زبان طبیعی با پایتون پس از انتقال پوشه، رفع اررSpellCheck در پردازش زبان طبیعی با پایتون دوباره این دستور را اجرا می‌کنیم: فراخوانی SpellCheck برای تصحیح غلط املایی بدون خطا باید اجرا شود. سپس یک شی از کلاس  SpellCheck می‌سازیم: ساخت شی از کلاس  SpellCheck برای غلط املایی در پایتون در نهایت متن دلخواهی را به تابع spell_corrector از شی myspell_checker می‌فرستیم: تابع spell_corrector برای تصحیح خطای املایی در پارسی ور خروجی به‌صورت زیر است. خروجی مثال تصحیح غلط املایی در پردازش زبان طبیعی با پایتون تا اینجا ابزارهای مهم متن کاوی با پایتون با کتابخانه پارسی ور را بررسی کردیم. البته همیشه ابزارهای آماده تمام‌وکمال نبوده و موارد زیادی هست که پوشش نداده و مجبور هستیم خودمان پیاده‌سازی کنیم. در ادامه، برخی خصوصیات و پیچیدگی‌هایی که در زمان متن کاوی فارسی در پایتون با آن‌ها روبرو می‌شویم که پارسی ور نمی‌تواند آن را برطرف کند، را بررسی می‌کنیم.
  • حضور کلمات مخفف “صمت” و یا کلمه پیچیده‌تر “APL”. آیا به معنی apple (سیب) است؟ منظور کارخانه Apple است؟ در چنین مواقع کار برای مدل سخت و تشخیص منظور مخاطب دشوار می‌شود.
  • حضور رشته‌ای از کاراکترهای تکرار شده مثل “عالیییییییییییییی” و “بدددددددددددددد”. عموماً وقتی چند کاراکتر در یک کلمه تکرار شود، برای تأکید بیشتر است، تا تأثیر آن بیشتر شود. برای مثال “طرح افزایش حقوق عالیییییی بود، دمشون گرم” که نظر مثبت یک فرد را نسبت به یک اقدام دولتی نشان می‌دهد.
  • غلط‌های املایی مثل “جواد زریف” که مدل را گیج می‌کنند.
  • زبان کوچه‌بازاری مثل “دمشون گرم”
باتوجه‌به مثال‌های بالا، متن کاوی با پایتون بسیار پیچیده است. همچنین در تحلیل متن‌های نوشته شده توسط کاربران بر روی اینترنت، پیچیدگی بیشتر می‌شود. چرا که مردم به ساختن جملاتی که از نظر گرامری صحیح باشد توجهی نمی‌کنند و از تعداد زیادی از مخفف‌ها و کلماتی استفاده می‌کنند که از لحاظ گرامری تعریف نشده و کار تحلیل متن را سخت‌تر می‌کند. در ادامه روی یک دیتاست از توییت‌های فارسی سعی می‌کنیم چند مرحله پیش‌پردازش جانبی را انجام بدهیم. این کار جنبه آموزشی داشته و سعی شده مهم‌ترین موارد پوشش داده شود.

تجزیه و تحلیل ایموجی یا شکلک‌ها

شکلک‌ها یا ایموجی‌ها یکی از پرتکرارترین عناصر نظرات کاربران است که به کمک آن حس و حال خود را بیان می‌کنند. در متن کاوی فارسی در پایتون این شکلک‌ها یا باید حذف شوند یا به شکل مناسبی تبدیل شوند. پس تمام شکلک‌ها را با معنای قطبی آن‌ها (مثبت و منفی بودن) به شکل ||pos|| (مثبت) و ||neg|| (منفی) با استفاده از دیکشنری شکلک‌ها جایگزین کردیم. برای انجام این جایگزینی، هر متن را پیمایش کرده و با استفاده از عبارات منظم بررسی کردیم که هر متن شامل هیچ شکلکی بود یا نه، اگر شکلک داشت با معنای قطبی معادلشان جایگزین می‌شود:
قبل از پردازش شکلک‌ها در پردازش زبان طبیعی با پایتون
قبل از پردازش شکلک‌ها
بعد از پردازش شکلک‌ها در پردازش زبان طبیعی با پایتون
پس از پردازش شکلک‌ها، آن ها با تگ معادلشان جایگزین شدند.

آدرس‌های اینترنتی در پیش پردازش متن

ازآنجایی‌که آدرس‌های اینترنتی معنی و مفهوم خاصی ندارند پس تمام آدرس‌های اینترنتی را به کمک تابع حذف کردیم، زیرا اطلاعات مفیدی در تحلیل ارائه نمی‌دادند:
نمونه‌ای از متن قبل از پردازش URLها
نمونه‌ای از متن قبل از پردازش URLها
نمونه‌ای از متن بعد از پردازش URLها
نمونه‌ای از متن بعد از پردازش URLها

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

در این قسمت به سراغ فضاهای خالی اضافی مثل (tab, newline) می‌رویم و موارد زائد را اصلاح می‌کنیم:
نمونه‌ای از متن‌ها قبل از پردازش nlp
نمونه‌ای از متن‌ها قبل از پردازش
نمونه‌ای از متن‌ها بعد از پردازش nlp
نمونه‌ای از متن‌ها بعد از پردازش

آشنایی با موجودیت ها در HTML در متون

موجودیت‌های HTML کاراکترهایی هستند که در HTML رزرو شده‌اند. نیاز داشتیم که آن‌ها را رمزگشایی کنیم تا  تبدیل به موجودیت‌های کاراکتری بشوند تا بتوانیم آن‌ها را قابل‌درک کنیم. مثلاً بین یک تگ<p> قطعاً نوشته‌های مناسبی هست که می‌توان استخراج کرد:
متن قبل پردازش موجودیت‌های HTML آن
متن قبل پردازش موجودیت‌های HTML آن
متن پس از پردازش موجودیت‌های HTML آن
متن پس از پردازش موجودیت‌های HTML آن

اصلاح کاراکترهای تکرار شده در متن کاوی فارسی

در برخی مواقع شاهد تکرار یک کاراکتر هستیم که کاربر عمدتاً باهدف تأکید یک کاراکتر را تکرار می‌کند مثل”عالییییی”. در چنین شرایطی واژه اصلی اصلاح شده ولی مجدداً تکرار می‌شود تا اثر آن حفظ شود مثل “عالی عالی”.
متن قبل از پردازش دنباله کاراکترهای تکرار شده
متن قبل از پردازش دنباله کاراکترهای تکرار شده
متن بعد از پردازش دنباله کاراکترهای تکرار شده
متن بعد از پردازش دنباله کاراکترهای تکرار شده
البته موارد ذکر شده صرفاً بخشی از چالش‌هایی است که در محیط واقعی متن کاوی با پایتون با آن باید دست‌وپنجه نرم کنیم.

در دوره آموزش متن کاوی فارسی با شبکه‌های عصبی با تمرکز روی زبان فارسی، جدیدترین تکنیک‌های متن کاوی با پایتون با کدنویسی فراوان آموزش داده می‌شود.

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

مطالب بیشتر

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