سوئیبل

تجزیه‌کننده‌ی متون ویکی سوئیبل(به انگلیسی: Sweble) ابزاری متن باز برای تجزیه زبان نشانه‌گذاری متن ویکی است که توسط مدیاویکی، نرم‌افزار پشت ویکی‌پدیا، استفاده شده‌است. توسعه اولیه این تجزیه‌کننده توسط هانس دورن به عنوان پروژه پایان‌نامه دکتری در گروه پژوهشی منبع آزاد استاد دیرک ریه در دانشگاه ارلانگن-نورنبرگ از سال ۲۰۰۹ تا ۲۰۱۱ انجام شد. نتایج پایان نامه وی برای اولین بار در کنفرانس ویکی‌سیم(WikiSym) در سال 2011 به عموم مردم ارائه شد. پیش از آن ، پایان‌نامه از نظر علمی مورد بازرسی مستقل و تأیید قرار گرفته و در انجمن ماشین‌های حسابگر منتشر شده‌بود.
براساس آمار فعلی موجود در Ohloh، تجزیه‌کننده سوئیبل اکثراً به زبان برنامه نویسی جاوا نوشته شده‌است و در مه ۲۰۱۱ منبع باز بوده‌است. خود تجزیه‌کننده سوئیبل از دستور زبان بیان تجزیه (PEG یا parsing expression grammer) با استفاده از تولیدگر تجزیه‌کننده‌ی !Rats تولید شده‌است. رمزگذاری‌ها نیز با استفاده از تحلیل‌گر واژگانی فلکس که در JFlex نوشته شده اعتبارسنجی می‌شود.

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

## حالت کنونی تجزیه کردن
تجزیه‌کننده‌ای که در مدیاویکی استفاده می‌شود، محتوا را به طور مستقیم از متن‌ویکی به اچ‌تی‌ام‌ال تبدیل می‌کند. این پردازش در دو مرحله انجام می‌شود.
# جستجو و انبساط الگوها (مانند جعبه‌های اطلاعات)، متغیرها، و ابر اطلاعات (برای مثال  به متن با حروف کوچک abc تبدیل می‌شود). صفحه‌های الگو می‌توانند دوباره شامل چنین ابر اطلاعاتی باشند تا دوباره مورد ارزیابی قرار بگیرند (بازگشتی). این روش شبیه روش گسترش ماکرو است که برای مثال در زبان‌های برنامه‌نویسی مانند سی پلاس‌پلاس استفاده می‌شود.
# تجزیه کردن و تفسیر متن کاملاً گسترش‌یافته. بدین وسیله، متن توسط تعدادی از توابع تعبیه شده مدیاویکی پردازش می‌شود که هر کدام یک ساختار خاص را تشخیص می‌دهند. آن‌ها آنالیز محتوا را به وسیله عبارت با قاعده انجام می‌دهند. برای مثال، عبارت =Head= را با معادل اچ‌تی‌ام‌ال آن  جایگزین می‌کند. در بیشتر موارد، این قدم‌ها خط به خط انجام می‌شود، مگر در مورد جدول‌ها یا لیست‌ها.

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

«مراحل پردازش فردی اغلب منجر به رفتار غیرمنتظره و متناقض از تجزیه‌کننده می شود. به عنوان مثال، لیست‌ها در داخل سلول‌های جدول شناخته می شوند؛ اما اگر خود جدول در داخل یک تصویر فریم ظاهر شود، لیست‌ها شناخته نمی‌شوند.»

همانطور که در کنفرانس ویکی‌سیم (WikiSym) در سال ۲۰۰۸ میلادی مطرح شد، دو عامل عدم دقت زبان و جداشدن مؤلفه، مانع از تکامل نرم‌افزار ویکی می‌شوند. اگر محتوای ویکی دارای بازنویسی مشخص و کاملاً قابل پردازش در دستگاه باشد، این امر نه تنها به دستیابی به محتوای بهتر آن منجر می‌شود بلکه روش‌های پردازش آن را نیز بهبود می‌بخشد و گسترش می‌دهد.

علاوه بر این ، یک مدل شیءگرایی خوب تعریف شده برای محتوای ویکی، اجازه می‌دهد تا ابزارهای بیشتری روی آن کار کنند. تاکنون تلاش‌های بسیاری در زمینه اجرای یک تجزیه‌کننده جدید برای مدیاویکی انجام شده‌است(https://www.mediawiki.org/wiki/Alternative_parsersرا ببینید)؛ اما هیچکدام از آن‌ها تاکنون موفق نشده‌اند. نویسندگان سوئیبل معتقدند که این موضوع ممکن است «به دلیل انتخاب گرامرهای مشهور (LALR(1 و (LL(k باشد. این گرامرها زیرمجموعه‌ای از گرامرهای مستقل از متن هستند. در صورتی که متن ویکی احتیاج به یک حالت تجزیه‌کننده جهانی دارد و در نتیجه می‌تواند نوعی از زبان‌های حساس به متن تلقی شود.» در نتیجه، آن‌ها تجزیه‌کننده خود را بر اساس دستور زبان بیان تجزیه (PEG) پایه گذاری می‌کنند.

## سوئیبل چطور کار می‌کند؟
سوئیبل متون ویکی را تجزیه می‌کند و یک درخت نحو انتزاعی خروجی می‌دهد. این کار کمک می‌کند که جلوی اشتباهاتی که ناشی از کد نشانه‌گذاری نادرست است گرفته شود. (خطاهایی مانند داشتن پیوند بین چندین خانه یک جدول) اطلاعات بیشتر در مورد مدل درخت نحوی انتزاعی در گزارش فنی مدل شی‌گرای متون ویکی‌پدیا موجود است.

### گام‌های تجزیه کردن
تجزیه کننده‌ی سوئیبل متون ویکی‌پدیا را در ۵ گام تجزیه می‌کند.
# **اعتبار سنجی رمزگذاری** از آن‌جایی که استفاده از همه کاراکترهای ممکن در متون ویکی‌پدیا مجاز نیست لازم است قبل از پردازش یک مرحله کاراکترهای ورودی فیلتر شوند تا کاراکترهایی (مثل کاراکترهای کنترلی یونی‌کد)که غیرمجاز هستند، حذف شوند. علاوه بر این، بعضی وقت‌ها برای برخی از نام‌های ورودی، یک نام‌گذاری داخلی انجام می‌شود تا در مراحل بعدی نام منحصر به فردی برای هر یک از ورودی‌ها وجود داشته‌باشد و روند کار با آن‌ها در مراحل بعدی ساده‌تر شود. با این حال، این مرحله نباید به خاطر حذف کردن از ورودی باعث از دست رفتن اطلاعات شود.
# **پیش‌پردازش** پس از این که متن ویکی از کاراکترهای غیرمجاز تمیز شد، متن ویکی حاصل برای بسط دادن آماده می‌شود. برای این منظور متن ویکی اسکن می‌شود تا نظرات شبیه اکس‌ام‌ال، ابر اطلاعاتی مانند تغییر مسیرها و سایر چیزها از این دست ، برچسب‌های شرطی و برچسب‌های اضافی را پیدا کنیم. سپس باید به حواسمان به عناصر اکس‌ام‌ال باشد که ممکن است مشابه توابع تجزیه کننده یا متغیرها شناخته شوند. عناصر اکس‌ام‌ال با نام‌های ناشناخته مانند متن عادی تلقی خواهند شد. نتیجه این مرحله یک درخت نحوی انتزاعی است که اغلب از گره‌های متنی تشکیل شده است و پیوندهای تغییر مسیر ، گره‌های انتقال و گره‌های با برچسب اضافی را نیز شامل می‌شود.
# **بسط دادن** صفحات در مدیاویکی اغلب با استفاده از قالب ها، کلمات جادویی، توابع تجزیه کننده و برچسب های اضافی ساخته می شوند. برای استفاده از درخت نحوی انتزاعی در یک ویرایشگر دریافت عین مشاهده، می‌بایست یک بار از بسط دادن صرف‌نظر شود تا انتشار گزاره‌های تراگنجانش و صدا زدن تابع‌های تجزیه‌کننده در صفحه اصلی دیده‌شود. با این حال، برای آن که بتوان مطلب را به عنوان مثال به شکل یک صفحه اچ‌تی‌ام‌ال نشان داد، همچنان باید این‌ها پردازش شوند تا خروجی کاملی به دست آید. علاوه بر این، صفحات مورد استفاده به عنوان قالب خود می‌توانند صفحات دیگر را منتقل کنند و این امر باعث می شود که بسط دادن یک تابع بازگشتی باشد.
# **تجزیه کردن** قبل از شروع تجزیه، درخت نحوی انتزاعی باید دوباره به متن ویکی تبدیل شود. پس از طی این قدم، یک تجزیه‌کننده دستور زبان بیان تجزیه (PEG) متن را تحلیل می‌کند و یک درخت نحوی انتزاعی تولید می‌کند که نحو و معناشناسی صفحه ویکی را ضبط می‌کند.
# **پس‌پردازش** در این مرحله برچسب‌ها با یکدیگر جفت و جور می‌شوند تا عناصر خروجی کامل را تشکیل دهند. علاوه بر این، آپاستروف‌ها مورد تجزیه و تحلیل قرار می گیرند تا مشخص شود کدام یک از آنها آپاستروف واقعی نثر هستند و کدام یک را باید به عنوان زبان نشانه‌گذاری برای فونت های ضخیم یا ایتالیک در متن ویکی تفسیر کرد. مونتاژ پاراگراف‌ها نیز در همین مرحله رسیدگی می‌شود. بدین ترتیب، درخت نحوی انتزاعی با استفاده از یک الگوریتم جستجوی اول عمق روی ساختار درخت پردازش می‌شود.

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

## منابع

رده:ابزارهای برنامه‌نویسی یونیکس
رده:ابزارهای مرتبط با کامپایل کردن
رده:تجزیه‌کننده
رده:مدیاویکی