الگوریتمهای خلاصهسازی الگوریتمهای پرکاربردی در مسائل استخراج اطلاعات هستن. به عنوان مثال این الگوریتمها میتونن به موتورهای جستوجوگر کمک کنن تا ایندکس بهتری از اطلاعات سایتها داشته باشن. چند روز گذشته توی وقتهای آزادم، تلاش کردم یه الگوریتم خلاصهسازی خیلی خیلی ساده که توی این نوشته روش کارش توضیح داده شده رو از پایتون به سیشارپ پورت کنم.
الگوریتم سادهست و کد سیشارپش رو میتونید اینجا پیدا کنید. به صورت خلاصه پر ارزشترین جملهی هر پاراگراف رو پیدا میکنه و یه متن جدید از این جملهها میسازه. در ادامه توابع مختلف رو با وجود اینکه از اسم و کامنتهاشون مشخصه چیکار میکنن توضیح میدم. توجه کنید که خروجیش خروجی مطلوبی نیست ولی برای شروع خروجی بدی هم نیست :)
SplitContentToSentences: یه پیادهسازی خیلی ابتدایی از تابعی که یه متن بگیره و لیستی از جملههاش رو برگردونه.
SplitContentToParagraphs: بر اساس Enterهایی که توی متن زده شده، متن رو به تعدادی پاراگراف تقسیمبندی میکنه.
SentencesIntersection: این تابع ساده شاید پیچیدهترین کد این برنامه باشه. تابع Intersect توی سیشارپ عناصر مشترک بین دو لیست رو بر میگردونه. اینجا ما کلمات جمله رو از هم جدا کردیم (باز هم یه پیادهسازی خیلی ابتدایی: جداسازی با کارکتر اسپیس) و بعد کلمات مشترک بین دو جمله رو شمردیم و تقسیم بر میانگین تعداد دو جمله کردیم. اگر دو تا جمله با هم اشتراکی نداشته باشن، این عدد برابر صفر میشه و اگر جملهها یکسان باشن، برابر یک میشه. از این تابع در ادامه برای پیدا کردن پرارزشترین جمله استفاده میکنیم.
FormatSentence: این تابع تمام کارکترهای غیرحروف رو از جمله حذف میکنه تا در پردازشهامون نگران اینجور کارکترها نباشیم (و لازم نباشه بودن یا نبودنشون رو بررسی کنیم)
GetSentecesRanks: در این تابع، تمام جملات متن ورودی رو دو به دو با هم مقایسه میکنیم و یه عدد به هر جمله اختصاص میدیم: حاصل جمع خروجی تابع SentencesIntersection که جملهی اصلی و بقیهی جملههای متن رو بهش ورودی دادیم.
GetBestSentence: بهترین جمله از متن ورودی رو با استفاده از امتیازهایی که در GetSentecesRanks به دست آوردیم خروجی میده.
و در نهایت تابع GetSummary متن و عنوان متن رو میگیره و با استفاده از توابع بالا، یه خلاصهی ساده از متن خروجی میده.
در مرحلهی بعد میخوام الگوریتم TextRank رو پیادهسازی کنم. این کار احتمالن بیشتر طول میکشه و الگوریتم پیچیدهتری هم هست. با توجه به این که حوصلهی مقاله خوندن ندارم، برنامهم اینه که مثل کاری که با کد پایتون کردم، کد جاوای الگوریتم رو به سیشارپ پورت کنم و در حین پورت کردن طریقهی کارش رو بفهمم.
پینوشت: بلاگنویسی در مورد کارهایی که میکنیم پیشنهادی بود که امروز استادی سر کلاس داد و پیشنهاد خوبی بود به نظرم. بخشی از انگیزهی نوشته شدن این نوشته (که احتمالن به کار کسی هم نیاد) از اون استاد گرفته شده.