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

در متن کاوی منظور از پردازش زبان طبیعی (NLP)، قابل‌دسترس کردن زبان طبیعی برای ماشین است. پردازش زبان طبیعی، اسناد متنی بدون ساختار را دریافت و درنهایت به شکلی ساختاریافته تبدیل می‌کنند. در این حالت امکان استخراج اطلاعات از این اسناد وجود دارد. پردازش‌های متنی شامل تحلیل‌های صرفی و نحوی و معنایی متن ورودی است. قبل از پردازش زبان طبیعی میبایست عمل پیش پردازش بر روی متن به منظور تمیز سازی داد انجام شود. و اولین مرحله در پیش پردازش ، انجام عملیات نرمال سازی متن است.

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

در این مبحث به بررسی مورد اول یعنی یکسان سازی حروف در عملیات نرمال سازی متن میپردازیم. منظور از یکسان‌ساز، یکنواخت کردن کاراکترهای استفاده‌شده در متون است. با توجه به اینکه ممکن است اسناد منتشرشده، از کدگذاری‌های متفاوتی استفاده کنند لذا برای بهبود تحلیل‌های متنی نیازمند یکسان‌سازی این متون هستیم. درواقع حذف کدحروف غیر مناسب (مانند اعراب حروف) یا تبدیل کدهای مختلف حروف (مانند کد /ی/ عربی و فارسی) به یک کد واحد در این مرحله انجام می‌شود. همچنین کلماتی که دارای ساختار نوشتاری مختلف هستند به یک کلمه تبدیل می‌شود.

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

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

به طور معمول ناسازگاری های موجود در متن شامل موارد زیر است.

  • وجود encoding های مختلف برای بعضی از كاراكترها مانند «ی» و «ك»
  • فاصله های اضافه
  • تب های اضافه
  • تنوع نوشتار با حروف بزرگ و کوچک
  • روش‌های مختلف چسبیدن وندها به كلمات اصلی
  • روش‌های مختلف اتصال اجزای كلمات مركب
  • كلمات چنداملایی.
  • غلط های املایی
  • کلمات محاوره ای
  • اختصارات
  • تمايز بين مجامع به منظور ليست کردن اسامي افراد و گروه ها
  • استفاده از اصطلاحات غير استاندارد و مختصرسازي هاي غير رايج (Colo → Colorado)

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

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

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

 

نرمال سازی متن
مراحل پردازش متن

 

در حالت ساده عملیات نرمال سازی متن با مراحل زیر انجام پذیر است:

  • اصلاح انواع حرف «ک» به معادل فارسی آنان.
  • اصلاح انواع حرف «ی» به معادل فارسی آنان.
  • بررسی همزه و انواع مختلف املاهای موجود و اصلاح هر کدام (به عنوان مثال تبدیل ؤ به و ، ئ به ی ، أ به ا ، إ به ا و…)
  • حذف شناسه‌ی همزه از انتهای واژه‌هایی مثل شهداء
  • حذف شناسه «آ» به «ا» مانند: آب به اب
  • اصلاح نویسه‌ی «طور» در واژه‌هایی مانند به طور، آن طور، این طور و …
  • بررسی وجود حرف «ی» در انتهای لغاتی مانند خانه‌ی ما و اصلاح آنان
  • حذف تشدید از واژه‌ها
  • تبدیل ارقام عربی و انگلیسی به معادل فارسی.
  • اصلاح نویسه‌ی نیم‌فاصله
  • اصلاح اعراب و حذف فتحه، کسره و ضمه و همچنین تنوین‌ها
  • حذف نیم‌فاصله‌های تکراری
  • حذف نویسه‌ی «ـ» که برای کشش نویسه­های چسبان مورد استفاده قرار می­گیرد. مانند تبدیل«بــــــــر» و «بـــر» به «بر»
  • چسباندن پسوندهای «تر»، «ترین» و … به آخر واژه‌ها
  • اصلاح فاصله‌گذاری «ها» در انتهای واژه‌ها و همچنین پسوندهای «های»، «هایی»، «هایم»، «هایت»، «هایش» و …
  • اصلاح فاصله‌گذاری «می»، «نمی»، «درمی»، «برمی»، «بی» در ابتدای واژه‌ها
  • تبدیل «‍ه» به «‍ه‌ی»
  • تبدیل «ب» متصل به ابتدای واژه‌ها به «به»
  • اصلاح فاصله‌گذاری پسوندها
  • حذف فاصله‌ها و نیم‌فاصله‌های اضافه بکار رفته در متن
  • تصحیح فاصله‌گذاری در مورد علائم سجاوندی بدین صورت که علائم سجاوندی به لغات قبل از خود می‌چسبند و با لغت بعد از خود فاصله خواهند داشت.

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

برای اعمال اصلاحات اولیه قبل از هر عملیاتی، بایستی متون مورد پردازش توسط ابزار Normalizer ، مورد اصلاح قرار گیرند. بعد از نرمال سازی متن، معمولا ایست واژه ها را هم که خود نیز از کلمات پرتکرار هستند را برای تعدادی از کاربردها باید حذف کنیم . در ادامه تابع Normalizer  از کلاس Normalizer در کتاب خانه jhazm که به منظور نرمال سازی حروف در متن با زبان جاوا توسعه یافته است، آورده شده است. ورودی این تابع سه مقدار بولین است که به ترتیب برای تصحیح کاراکترهای فضای خالی، تصحیح کارکترهای punctuation و تصحیح پسودن ها به کار میرود.

public Normalizer(boolean characterRefinement, boolean punctuationSpacing, boolean affixSpacing) {

this.puncAfter = "!:\\.،؛؟»\\]\\)\\}";

this.puncBefore = "«\\[\\(\\{";

this.characterRefinement = true;

this.punctuationSpacing = true;

this.affixSpacing = true;

this.characterRefinement = characterRefinement;

this.punctuationSpacing = punctuationSpacing;

this.affixSpacing = affixSpacing;

this.translations = new MakeTrans(" كي;%1234567890", " کی؛٪۱۲۳۴۵۶۷۸۹۰");

if (this.characterRefinement) {

this.characterRefinementPatterns = new ArrayList();

this.characterRefinementPatterns.add(new RegexPattern("[ـ\\r]", ""));

this.characterRefinementPatterns.add(new RegexPattern(" +", " "));

this.characterRefinementPatterns.add(new RegexPattern("\n\n+", "\n\n"));

this.characterRefinementPatterns.add(new RegexPattern(" ?\\.\\.\\.", " …"));

}

if (this.punctuationSpacing) {

this.punctuationSpacingPatterns = new ArrayList();

this.punctuationSpacingPatterns.add(new RegexPattern(" ([!:\\.،؛؟»\\]\\)\\}])", "$1"));

this.punctuationSpacingPatterns.add(new RegexPattern("([«\\[\\(\\{]) ", "$1"));

this.punctuationSpacingPatterns.add(new RegexPattern("([!:\\.،؛؟»\\]\\)\\}])([^ !:\\.،؛؟»\\]\\)\\}])", "$1 $2"));

this.punctuationSpacingPatterns.add(new RegexPattern("([^ «\\[\\(\\{])([«\\[\\(\\{])", "$1 $2")); } if (this.affixSpacing) { this.affixSpacingPatterns = new ArrayList(); this.affixSpacingPatterns.add(new RegexPattern("([^ ]ه) ی ", "$1\u200cی ")); this.affixSpacingPatterns.add(new RegexPattern("(^| )(ن?می) ", "$1$2\u200c")); this.affixSpacingPatterns.add(new RegexPattern(" (تر(ی(ن)?)?|ها(ی)?)(?=[ \n!:\\.،؛؟»\\]\\)\\}«\\[\\(\\{]|$)", "\u200c$1")); this.affixSpacingPatterns.add(new RegexPattern("([^ ]ه) (ا(م|ت|ش|ی))(?=[ \n!:\\.،؛؟»\\]\\)\\}]|$)", "$1\u200c$2"));

}

}

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

String plainText = new String();

String normalizedText = new String();

//use jhazm normalizer to remove empty lines and spaces and ...

Normalizer normalizer = new Normalizer(true, false, false);

normalizedText = normalizer.run(plainText);

برای دیدن فلیم های سینماییِ مهیج و جذاب”در حوزه فناوری اطلاعات، اوسینت و هوش مصنوعی“، بر روی اینجا کلیک کنید.

آدرس کانال تلگرام سایت بیگ دیتا:

t.me/bigdata_channel

آدرس کانال سروش ما:
https://sapp.ir/bigdata_channel

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

جهت ثبت نام در دوره های آموزشی بر روی اینجا کلیک کنید.

Visits: 6786

همچنین ببینید

اسامی مکان

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

عناوين مطالب: 'مقدمه ای بر اسامی مکان:کاربردهای (Named-entity recognition) NERروشهای تشخیص اسم مکاندانلود دیتاست اسامی …

آموزش خلاصه اسپرینگ

آموزش فارسی اسپرینگ بوت (Spring Boot) به صورت کاربردی

در این مبحث قصد دارم به صورت خلاصه به آموزش کاربردی اسپرینگ بوت بپردازم. برای …

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