سوئیبل

از ویکی‌پدیا، دانشنامهٔ آزاد
سوئیبل
نویسنده(های)
اصلی
OSR Group
انتشار اولیه۱ مه ۲۰۱۱؛ ۱۳ سال پیش (۲۰۱۱-01}})[۱]
انتشار پایدار
2.0 / ۱۴ سپتامبر ۲۰۱۴؛ ۹ سال پیش (۲۰۱۴-14}})[۲]
نوشته‌شده باJava
سیستم‌عاملCross-platform
نوعParser
مجوزApache License
وبگاهsweble.org

تجزیه‌کننده‌ی متون ویکی سوئیبل(به انگلیسی: Sweble)[۳] ابزاری متن باز برای تجزیه زبان نشانه‌گذاری متن ویکی است که توسط مدیاویکی، نرم‌افزار پشت ویکی‌پدیا، استفاده شده‌است. توسعه اولیه این تجزیه‌کننده توسط هانس دورن به عنوان پروژه پایان‌نامه دکتری در گروه پژوهشی منبع آزاد استاد دیرک ریه در دانشگاه ارلانگن-نورنبرگ از سال ۲۰۰۹ تا ۲۰۱۱ انجام شد. نتایج پایان نامه وی برای اولین بار در کنفرانس ویکی‌سیم(WikiSym) در سال 2011 به عموم مردم ارائه شد.[۴] پیش از آن ، پایان‌نامه[۵] از نظر علمی مورد بازرسی مستقل و تأیید قرار گرفته و در انجمن ماشین‌های حسابگر منتشر شده‌بود.

براساس آمار فعلی موجود در Ohloh[۶]، تجزیه‌کننده سوئیبل اکثراً به زبان برنامه نویسی جاوا نوشته شده‌است و در مه ۲۰۱۱ منبع باز بوده‌است.[۷] خود تجزیه‌کننده سوئیبل از دستور زبان بیان تجزیه (PEG یا parsing expression grammer) با استفاده از تولیدگر تجزیه‌کننده‌ی !Rats تولید شده‌است. رمزگذاری‌ها نیز با استفاده از تحلیل‌گر واژگانی فلکس که در JFlex نوشته شده اعتبارسنجی می‌شود.

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

حالت کنونی تجزیه کردن[ویرایش]

تجزیه‌کننده‌ای که در مدیاویکی استفاده می‌شود، محتوا را به طور مستقیم از متن‌ویکی به اچ‌تی‌ام‌ال تبدیل می‌کند. این پردازش در دو مرحله انجام می‌شود.[۱۰]

  1. جستجو و انبساط الگوها (مانند جعبه‌های اطلاعات)، متغیرها، و ابر اطلاعات (برای مثال {{lc:ABC}} به متن با حروف کوچک abc تبدیل می‌شود). صفحه‌های الگو می‌توانند دوباره شامل چنین ابر اطلاعاتی باشند تا دوباره مورد ارزیابی قرار بگیرند (بازگشتی). این روش شبیه روش گسترش ماکرو است که برای مثال در زبان‌های برنامه‌نویسی مانند سی پلاس‌پلاس استفاده می‌شود.
  2. تجزیه کردن و تفسیر متن کاملاً گسترش‌یافته. بدین وسیله، متن توسط تعدادی از توابع تعبیه شده مدیاویکی پردازش می‌شود که هر کدام یک ساختار خاص را تشخیص می‌دهند. آن‌ها آنالیز محتوا را به وسیله عبارت با قاعده انجام می‌دهند. برای مثال، عبارت =Head= را با معادل اچ‌تی‌ام‌ال آن <h1>HEAD</h1> جایگزین می‌کند. در بیشتر موارد، این قدم‌ها خط به خط انجام می‌شود، مگر در مورد جدول‌ها یا لیست‌ها.

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

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

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

علاوه بر این ، یک مدل شیءگرایی خوب تعریف شده برای محتوای ویکی، اجازه می‌دهد تا ابزارهای بیشتری روی آن کار کنند. تاکنون تلاش‌های بسیاری در زمینه اجرای یک تجزیه‌کننده جدید برای مدیاویکی انجام شده‌است([۱]را ببینید)؛ اما هیچکدام از آن‌ها تاکنون موفق نشده‌اند. نویسندگان سوئیبل معتقدند که این موضوع ممکن است «به دلیل انتخاب گرامرهای مشهور (LALR(1 و (LL(k باشد. این گرامرها زیرمجموعه‌ای از گرامرهای مستقل از متن هستند. در صورتی که متن ویکی احتیاج به یک حالت تجزیه‌کننده جهانی دارد و در نتیجه می‌تواند نوعی از زبان‌های حساس به متن تلقی شود.»[۸] در نتیجه، آن‌ها تجزیه‌کننده خود را بر اساس دستور زبان بیان تجزیه (PEG) پایه گذاری می‌کنند.

سوئیبل چطور کار می‌کند؟[ویرایش]

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

گام‌های تجزیه کردن[ویرایش]

تجزیه کننده‌ی سوئیبل متون ویکی‌پدیا را در ۵ گام تجزیه می‌کند.[۸]

  1. اعتبار سنجی رمزگذاری از آن‌جایی که استفاده از همه کاراکترهای ممکن در متون ویکی‌پدیا مجاز نیست لازم است قبل از پردازش یک مرحله کاراکترهای ورودی فیلتر شوند تا کاراکترهایی (مثل کاراکترهای کنترلی یونی‌کد)که غیرمجاز هستند، حذف شوند. علاوه بر این، بعضی وقت‌ها برای برخی از نام‌های ورودی، یک نام‌گذاری داخلی انجام می‌شود تا در مراحل بعدی نام منحصر به فردی برای هر یک از ورودی‌ها وجود داشته‌باشد و روند کار با آن‌ها در مراحل بعدی ساده‌تر شود. با این حال، این مرحله نباید به خاطر حذف کردن از ورودی باعث از دست رفتن اطلاعات شود.
  2. پیش‌پردازش پس از این که متن ویکی از کاراکترهای غیرمجاز تمیز شد، متن ویکی حاصل برای بسط دادن آماده می‌شود. برای این منظور متن ویکی اسکن می‌شود تا نظرات شبیه اکس‌ام‌ال، ابر اطلاعاتی مانند تغییر مسیرها و سایر چیزها از این دست ، برچسب‌های شرطی و برچسب‌های اضافی را پیدا کنیم. سپس باید به حواسمان به عناصر اکس‌ام‌ال باشد که ممکن است مشابه توابع تجزیه کننده یا متغیرها شناخته شوند. عناصر اکس‌ام‌ال با نام‌های ناشناخته مانند متن عادی تلقی خواهند شد. نتیجه این مرحله یک درخت نحوی انتزاعی است که اغلب از گره‌های متنی تشکیل شده است و پیوندهای تغییر مسیر ، گره‌های انتقال و گره‌های با برچسب اضافی را نیز شامل می‌شود.
  3. بسط دادن صفحات در مدیاویکی اغلب با استفاده از قالب ها، کلمات جادویی، توابع تجزیه کننده و برچسب های اضافی ساخته می شوند.[۱۰] برای استفاده از درخت نحوی انتزاعی در یک ویرایشگر دریافت عین مشاهده، می‌بایست یک بار از بسط دادن صرف‌نظر شود تا انتشار گزاره‌های تراگنجانش و صدا زدن تابع‌های تجزیه‌کننده در صفحه اصلی دیده‌شود. با این حال، برای آن که بتوان مطلب را به عنوان مثال به شکل یک صفحه اچ‌تی‌ام‌ال نشان داد، همچنان باید این‌ها پردازش شوند تا خروجی کاملی به دست آید. علاوه بر این، صفحات مورد استفاده به عنوان قالب خود می‌توانند صفحات دیگر را منتقل کنند و این امر باعث می شود که بسط دادن یک تابع بازگشتی باشد.
  4. تجزیه کردن قبل از شروع تجزیه، درخت نحوی انتزاعی باید دوباره به متن ویکی تبدیل شود. پس از طی این قدم، یک تجزیه‌کننده دستور زبان بیان تجزیه (PEG) متن را تحلیل می‌کند و یک درخت نحوی انتزاعی تولید می‌کند که نحو و معناشناسی صفحه ویکی را ضبط می‌کند.
  5. پس‌پردازش در این مرحله برچسب‌ها با یکدیگر جفت و جور می‌شوند تا عناصر خروجی کامل را تشکیل دهند. علاوه بر این، آپاستروف‌ها مورد تجزیه و تحلیل قرار می گیرند تا مشخص شود کدام یک از آنها آپاستروف واقعی نثر هستند و کدام یک را باید به عنوان زبان نشانه‌گذاری برای فونت های ضخیم یا ایتالیک در متن ویکی تفسیر کرد. مونتاژ پاراگراف‌ها نیز در همین مرحله رسیدگی می‌شود. بدین ترتیب، درخت نحوی انتزاعی با استفاده از یک الگوریتم جستجوی اول عمق روی ساختار درخت پردازش می‌شود.

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

منابع[ویرایش]

  1. "announcement of the first public release of Sweble". Archived from the original on 2015-09-16. Retrieved 2011-11-24.
  2. "Sweble 2.0 released!". Archived from the original on 2015-02-27. Retrieved 2015-05-02.
  3. «Sweble | Sweetly Enabling the Web». web.archive.org. ۲۰۱۵-۰۴-۳۰. بایگانی‌شده از اصلی در ۳۰ آوریل ۲۰۱۵. دریافت‌شده در ۲۰۲۰-۰۲-۰۱.
  4. «Session Preview: Designing for Open Collaboration | The Joint International Symposium on Open Collaboration». web.archive.org. ۲۰۱۳-۰۷-۰۳. بایگانی‌شده از اصلی در ۳ ژوئیه ۲۰۱۳. دریافت‌شده در ۲۰۲۰-۰۲-۰۱.
  5. Dohrn, Hannes; Riehle, Dirk (2011). "Design and implementation of the Sweble Wikitext parser: unlocking the structured data of Wikipedia". Proceedings of the 7th International Symposium on Wikis and Open Collaboration - WikiSym '11 (به انگلیسی). Mountain View, California: ACM Press: 72. doi:10.1145/2038558.2038571. ISBN 978-1-4503-0909-7.
  6. «The Sweble Open Source Project on Open Hub». www.openhub.net. دریافت‌شده در ۲۰۲۰-۰۲-۰۱.
  7. «Announcing the Open Source Sweble Wikitext Parser v1.0 | Sweble». web.archive.org. ۲۰۱۵-۰۹-۱۶. بایگانی‌شده از اصلی در ۱۶ سپتامبر ۲۰۱۵. دریافت‌شده در ۲۰۲۰-۰۲-۰۱.
  8. ۸٫۰ ۸٫۱ ۸٫۲ ۸٫۳ «Wayback Machine» (PDF). web.archive.org. ۲۰۱۵-۰۲-۲۴. بایگانی‌شده از اصلی (PDF) در ۲۴ فوریه ۲۰۱۵. دریافت‌شده در ۲۰۲۰-۰۲-۰۱.
  9. «Parser 2011/AST/Sweble - MediaWiki». www.mediawiki.org. دریافت‌شده در ۲۰۲۰-۰۲-۰۱.
  10. ۱۰٫۰ ۱۰٫۱ «Markup spec - MediaWiki». www.mediawiki.org. دریافت‌شده در ۲۰۲۰-۰۲-۰۱.
  11. Junghans, Martin; Riehle, Dirk; Gurram, Rama; Kaiser, Matthias; Lopes, Mário; Yalcinalp, Umit (2008). "A grammar for standardized wiki markup". Proceedings of the 4th International Symposium on Wikis - WikiSym '08 (به انگلیسی). Porto, Portugal: ACM Press: 1. doi:10.1145/1822258.1822287. ISBN 978-1-60558-128-6.
  12. Dohrn, Hannes; Riehle, Dirk (2011). "Design and implementation of the Sweble Wikitext parser". Proceedings of the 7th International Symposium on Wikis and Open Collaboration - WikiSym '11. New York, New York, USA: ACM Press. doi:10.1145/2038558.2038571. ISBN 978-1-4503-0909-7.