Design and Implementation of a Persian Spelling Checker

‫به نام خدا‬
‫طراحی و پیادهسازی یک خطایاب فارسی‬
‫صادق ُد ّری نوگورانی‬
‫محسن صبوریان‬
‫مهندسی نرمافزار‬
‫مهندسی نرمافزار‬
‫گروه برق و کامپیوتر دانشکده فنی دانشگاه تهران‬
‫گروه برق و کامپیوتر دانشکده فنی دانشگاه تهران‬
‫‪[email protected]‬‬
‫‪[email protected]‬‬
‫چکیده ‪ -‬در این مقاله با بررسی اجزای مختلف یک خطایاب‪ ،‬روشی جامع برای پیادهسازی خطایاب فارسی معرفی شده است‪ .‬روشهای‬
‫مختلف برای طراحی و پیادهسازی بخشهای مختلف خطایاب مورد ارزیابی قرار گرفته و سعی شده است با توجه به نتایج آخرین تحقیقات‬
‫و نیز خصوصیات زبان فارسی‪ ،‬بهترین تصمیمات برای اِعمال بر روی زبان فارسی اتخاذ شود‪ .‬به منظور تشخیص بهتر خطا و ارائهی‬
‫پیشنهادهای مناسب‪ ،‬از تحلیل ساختاری واژهها و تشخیص هسته آنها استفاده کردهایم‪ .‬همچنین برای کاهش حجم‪ ،‬واژگان را در یک‬
‫ساختار ‪ Minimal ADFA‬ذخیره ساختهایم‪ .‬مد نظر قرار دادن پیوستهنویسی و جدانویسی و مسائل خاص زبان فارسی از دیگر نکات شاخص‬
‫در طراحی این خطایاب است و منجر به ارائهی پیشنهادهای مناسبی به کاربر فارسی زبان میشود‪.‬‬
‫واژههای کلیدی‪ :‬خطایاب فارسی‪ ،‬خطای امالیی‪ ،‬واژگان‪ ،‬سبک امالیی‪ ،‬تحلیل ساختاری‬
‫‪ ١‬مقدمه‬
‫امروزه کاربرد کامپیوترها در زندگی بشر‪ ،‬روز به روز‪ ،‬گسترش بیشتری مییابد و همه روزه حجم بسیار زیادی اطالعات ‪ -‬به منظور‬
‫ذخیره و یا پردازش ‪ -‬به آنها وارد میشود‪ .‬وارد کردن اطالعات به کامپیوتر همواره با خطا همراه بوده است؛ خواه این اطالعات مستقیم ًا‬
‫تایپ شود و یا بصورت خودکار از متون نوشتاری بازشناسی و استخراج گردد‪ .‬به همین دلیل رفع و یا کاهش خودکار اینگونه خطاها به‬
‫کمک کامپیوتر‪ ،‬عنوان بسیاری از پژوهشهای دههی اخیر بوده است‪.‬‬
‫خط و شیوه نگارش زبان فارسی موجب میشود برخی مسائل که در طراحی خطایاب برای سایر زبانها مورد توجه کمتری قرار گرفته‬
‫و یا بطور کلی مطرح نبوده است‪ ،‬نمود پیدا کند‪) ،‬مانند پیوسته یا جدا نویسی و سبکهای گوناگون امالیی( و بعضی تصمیمگیریهای‬
‫مرسوم در طراحی خطایاب را به چالش بکشد‪ .‬همچنین در دسترس نبودن اطالعات آماری )نظیر فراوانیها و بانکهای اطالعاتی در زمینهی‬
‫خطاهای امالیی( و پژوهشهایی مشابه آنچه در مورد سایر زبانها انجام شده است‪ ،‬در مواردی موجب عدم امکان استفاده از روشهای‬
‫هوشمندانه و کارا گردد‪ .‬از طرف دیگر معدود بودن پژوهشهای انجام شده در زمینه خطایاب فارسی و در دسترس نبودن نمونههایی از این‬
‫نرمافزارها )حتی برای ارزیابی( امکان انجام مقایسه در مورد تصمیمات طراحی و نتایج پیادهسازی چنین نرمافزاری را تا حد زیادی از‬
‫نگارندگان این مقاله میگیرد‪.‬‬
‫روش اصلی ما برای بهبود رویهی تصحیح خطا‪ ،‬تحلیل ساختاری و یافتن هستهی واژهها میباشد‪ .‬این کار نه تنها باعث کاهش‬
‫چشمگیر حجم واژگان میشود‪ ،‬بلکه پیشنهاد ارائه شده به کاربر را معقولتر میسازد‪ .‬عالوه بر این برای هر چه فشردهتر شدن حجم واژگان‬
‫از یک ‪ ADFA‬کمینه استفاده کردهایم‪.‬‬
‫در بخشهای بعدی پس از معرفی خطایاب به بررسی انواع خطاهای امالیی میپردازیم‪ .‬در ادامه طراحی و پیادهسازی یک خطایاب‬
‫برای زبان فارسی مورد بررسی قرار میگیرد‪.‬‬
‫صادق دری نوگورانی و محسن صبوریان‪ ،‬طراحی و پیاده سازی یک خطایاب فارسی‪ ،‬دومین کارگاه پژوهشی زبان فارسی و رایانه‪ ،‬دانشکده ادبیات دانشگاه تهران‪ ،‬تیر ‪۱۳۸۵‬‬
‫‪۱‬‬
‫‪ ٢‬خطایاب چیست؟‬
‫خطایاب‪ ،۱‬برنامهای است که توانایی شناسایی خطاهای امالیی و )احتما ًال( تصحیح این خطاها را دارد‪ .‬الگوریتمها و مسائل مطرح در‬
‫زمینهی خطایابی امالیی به تفصیل در ]‪ [9‬مورد بررسی قرار گرفته است‪ .‬تاریخچهی پیدایش خطایابها به دههی ‪ ۱۹۶۰‬میالدی باز‬
‫میگردد‪ .‬امروزه این ابزارها در زمینههای مختلف علوم کامپیوتر از جمله در واژهپردازی‪ ،‬بازشناسی متون نوشتاری‪ ،۲‬سیستمهای تعامل زبانی‬
‫با کاربر‪ ،‬سیستمهای بازیابی اطالعات‪ ،۳‬سیستمهای تبدیل گفتار به نوشتار‪ ،۴‬سیستمهای تعاملی معلولین و سیستمها با رابط قلم نوری‬
‫کاربرد دارند‪ .‬همچنین خطایابهای امروزی پا را فراتر از تشخیص و تصحیح خطاهای امالیی نهاده و تا حدی به کمک ویراستاران شتافتهاند‪.‬‬
‫در بعضی کاربردها خطایاب بصورت تعاملی‪ ۵‬با کاربر عمل میکند و با یافتن خطا‪ ،‬لیستی از موارد احتمالی جایگزین را به ترتیب‬
‫اولویت به او ارائه میدهد‪ .‬در کاربردهایی نظیر بازشناسی متون‪ ،‬خطایاب بصورت خودکار سعی میکند بهترین گزینه صحیح را یافته و بکار‬
‫ببرد‪.‬‬
‫‪ ٢.١‬خطای امالیی‬
‫‪۶‬‬
‫ی جستجو به دنبال یک واژه در میان تمامی‬
‫تشخیص اینکه واژهای درست و یا نادرست است‪ ،‬در نگاه اول امری بدیهی و به سادگ ِ‬
‫واژههای موجود در واژگان‪ ۷‬به نظر میرسد؛ در حالی که مسائلی جدی در این رویکرد وجود دارد‪ .‬اول آنکه نگهداری واژگانی مشتمل بر‬
‫تمامی واژههای زبان مستلزم اشغال حجم زیاد حافظه است و جستجو به دنبال یک واژه در این واژگان چالش برانگیز است‪ .‬دوم اینکه بنابر‬
‫تحقیقات انجام شده‪ ،‬در صورتی که حجم واژگان از حد مشخصی )که به زبان مورد بررسی وابسته است( بیشتر شود‪ ،‬منجر به پایین آمدن‬
‫دقت خطایاب میگردد ]‪ .[9‬علت این امر‪ ،‬خطاهایی است که واژهای را به واژه درست دیگری تبدیل میکند‪ .۸‬در این مورد هرچه حجم‬
‫واژگان بیشتر باشد احتمال عدم امکان تشخیص خطاهایی از این دست افزایش پیدا میکند‪ .‬این خطاها یکی از زمینههای چالش برانگیز در‬
‫خطایابهاست و تاکنون روش مطلوبی برای تشخیص و تصحیح آن یافته نشده است ]‪.[9‬‬
‫عملکرد خطایابها با توجه به مطالب فوق به سه دسته تقسیم میشود‪:‬‬
‫‪ .۱‬شناسایی خطا بدون مراجعه به واژگان‪ ۹‬با استفاده از روشهای آماری؛‬
‫‪ .۲‬شناسایی و تصحیح واژههای نادرست به صورت منفرد‪ ۱۰‬صرف نظر از نقش واژه و حوزهی معنایی متن؛ طبعًا در این رویکرد امکان‬
‫شناسایی و تصحیح خطاهایی که منجر به تولید واژههای صحیح میشود وجود ندارد‪.‬‬
‫‪ .۳‬شناسایی و تصحیح واژههای نادرست با توجه به متن‬
‫‪۱۱‬‬
‫بسته به نحوهی ورود متن به کامپیوتر‪ ،‬الگوی خطا متفاوت است‪ .‬می توان خطاهایی را که به دست انسان و در متون تایپی بوجود‬
‫میآید به دو دسته تقسیم کرد ]‪:[6‬‬
‫ال *غافله به جای قافله یا *دیدهگان به جای دیدگان(؛‬
‫‪ .۱‬وارد کردن واژه با امالی نادرست‪) ۱۲‬مث ً‬
‫‪1‬‬
‫‪spelling/spell checker‬‬
‫‪text recognition‬‬
‫‪3‬‬
‫‪information retrieval‬‬
‫‪4‬‬
‫‪speech-to-text‬‬
‫‪5‬‬
‫‪interactive‬‬
‫‪2‬‬
‫‪ ۶‬در این مقاله پیش از نمونههایی که نشان دهنده خطای امالیی هستند عالمت » * « قرار گرفته است‪.‬‬
‫گ لغات و یا قاموس‪ ،‬دیگر واژههایی است که معادل ‪ lexicon‬استفاده میشود‪ ،‬لکن هیچیک به عنوان لیستی از واژهها نیست بلکه به عنوان لیستی از‬
‫‪ ۷‬واژهنامه‪ ،‬فرهن ِ‬
‫واژهها به همراه معادلهای معنایی آنها میباشد‪.‬‬
‫مثال تایپ کردن *فرار به جای قرار ‪real-word errors --‬‬
‫‪8‬‬
‫‪9‬‬
‫‪non-word error detection‬‬
‫‪isolated-word error detection and correction‬‬
‫‪11‬‬
‫‪context-dependent error detection and correction‬‬
‫‪12‬‬
‫‪cognitive error / misspelling‬‬
‫‪10‬‬
‫صادق دری نوگورانی و محسن صبوریان‪ ،‬طراحی و پیاده سازی یک خطایاب فارسی‪ ،‬دومین کارگاه پژوهشی زبان فارسی و رایانه‪ ،‬دانشکده ادبیات دانشگاه تهران‪ ،‬تیر ‪۱۳۸۵‬‬
‫‪۲‬‬
‫ال *یبمار به جای بیمار(‬
‫‪ .۲‬خطا در تایپ‪) ۱۳‬مث ً‬
‫خطایابهای امروزی پا فراتر از شناسایی و تصحیح این دو نوع خطا نهاده و تا حدی به کمک ویراستاران شتافتهاند‪ .‬به عنوان مثال‬
‫آنچه در ادامه میآید برخی خطاهای )اکثرًا( نگارشی است که به کمک خطایاب قابل شناسایی )و تصحیح( میباشد‪:‬‬
‫•‬
‫•‬
‫اشتباه در تشخیص درستی واژه‪۱۴‬؛ به معنای استفاده از ساخت یا نوع نامناسب واژه )نظیر *هنرگر به جای هنرمند(؛‬
‫‪۱۵‬‬
‫عدم رعایت سبک نگارشی معیار )نظیر پیوسته‪/‬جدا نویسی نابجا ‪ ،‬استفاده از شکل مهجور امالیی‪ ،‬استفاده از *خان ٔه به جای‬
‫خانهی(؛‬
‫•‬
‫استفاده از واژگان بیگانه بصورت نابجا؛‬
‫•‬
‫استفاده از ادات غیر فارسی )نظیر ادات جمع عربی‪ ،‬حروف اضافهی عربی(؛‬
‫•‬
‫استفاده از حروف و عالئم غیر استاندارد )نظیر استفاده از *ك و *ي عربی به جای ک و ی فارسی(؛‬
‫•‬
‫جمع بستن اسامی جمع و جمعهای مکسر‬
‫البته آنچه آمد‪ ،‬تنها بخش کوچکی از خطاهای رایجی است که یک خطایاب فارسی در شناسایی و تصحیح خودکار آن میتواند کمک‬
‫شایانی به ویراستاران کند‪.‬‬
‫خطایاب فارسی که در این مقاله مورد بررسی قرار میگیرد‪ ،‬خطایابی تعاملی است و شناسایی و تصحیح واژههای نادرست را به صورت‬
‫منفرد انجام میدهد‪ .‬البته با توجه به استفاده از اطالعات نوع واژه در تشخیص واژهها با ساخت نادرست و نیز ارائهی پیشنهادها با توجه به‬
‫نوع احتمالی واژهی نادرست‪ ،‬این خطایاب تا حدی به خطایابهای حساس به متن نزدیک میشود‪.‬‬
‫‪ ٣‬طراحی خطایاب‬
‫شکل ‪ ۱‬عملکرد خطایاب را نشان می دهد‪ .‬هر یک از اجزای خطایاب در بخشی از مقاله به طور خاص مورد بررسی قرار گرفته است‪.‬‬
‫ارائهی پیشنهادها‬
‫تصحیح خطا یا‬
‫جستجو در‬
‫به کاربر‬
‫اِعمال سبک‬
‫واژگان‬
‫واژه‬
‫تشخیص‬
‫جزء پیوسته‬
‫هستهی جزء‬
‫جدا سازی‬
‫جمله متن فارسی در‬
‫اجزای پیوسته‬
‫واژهپرداز‬
‫شکل‪ .۱‬عملکرد خطایاب‬
‫همچنین در جدول ‪ ۱‬لیستی از امکانات خطایاب آورده شده‪ .‬تمامی این امکانات در ادامهی این مقاله توضیح داده میشوند‪.‬‬
‫توضیح ‪ /‬چگونگی‬
‫عنوان امکان‬
‫درصد تکمیل‬
‫تحلیل ساختاری‬
‫استفاده از زبان پرولوگ‬
‫‪۱۰۰‬‬
‫ارائهی پیشنهادهای مناسب‬
‫استفاده از تحلیلگر ساختاری‬
‫‪۱۰۰‬‬
‫فشردهسازی واژگان‬
‫استفاده از ‪MADFA‬‬
‫‪۱۰۰‬‬
‫امکان یافتن سریع واژه‬
‫استفاده از ساختار ذخیرهسازی‬
‫‪۱۰۰‬‬
‫‪typographical error / mistyping‬‬
‫‪vocabulary incompetence‬‬
‫‪13‬‬
‫‪14‬‬
‫‪ ۱۵‬نتایج یک تحقیق نشان میدهد‪ ،‬بیشترین خطای رسمالخطی موجود در کتابهای چاپی فارسی تا سال ‪ ۱۳۸۰‬بیتوجهی به فاصلهی بین واژهها بوده است؛ در حالی‬
‫که این مسئله در کتابهای دارای خط التین تقریب ًا وجود ندارد ]‪) [۱۵‬ص ‪.(۴۰۱‬‬
‫صادق دری نوگورانی و محسن صبوریان‪ ،‬طراحی و پیاده سازی یک خطایاب فارسی‪ ،‬دومین کارگاه پژوهشی زبان فارسی و رایانه‪ ،‬دانشکده ادبیات دانشگاه تهران‪ ،‬تیر ‪۱۳۸۵‬‬
‫‪۳‬‬
‫‪MADFA‬‬
‫صفتدهی به واژگان‬
‫اسم‪ ،‬فعل و صفت‬
‫مرتبسازی هوشمند لیست پیشنهادی‬
‫مبتنی بر تحلیل ساختاری و صفتدهی‬
‫نادیدهگرفتن خطاهای مرتبط با آرایش صفحهکلید‬
‫‪۱۰۰‬‬
‫‪۹۰‬‬
‫‪۱۰۰‬‬
‫جدول ‪ .۱‬امکانات کنونی خطایاب‬
‫‪ ٣.١‬انتخاب واژه برای جستجو در واژگان )تحلیل ساختاری(‬
‫واژهپرداز متن مورد خطایابی را جمله به جمله‪ ۱۶‬در اختیار خطایاب قرار میدهد‪ .‬پس از آن‪ ،‬خطایاب جمله را با توجه به عالئم جدا‬
‫کننده‪ ۱۷‬به اجزای پیوسته میشکند‪ .‬این عالئم جدا کننده عبارتند از عالئم سجاوندی‪ ،‬فاصله‪ ۱۸‬و فاصلهی مجازی‪ .۱۹‬یک جزء پیوسته ممکن‬
‫است جزئی از یک واژه )مث ً‬
‫ال یک وند( یا به تنهایی یک واژه باشد و یا از به هم چسبیدن چند واژه )نظیر عبارت بدترینهایشانست‪ :‬بد ‪ +‬ترین‬
‫‪ +‬ها ‪ +‬یشان ‪ +‬ست( درست شده باشد‪.‬‬
‫هر جزء پیوستهی صحیح میتواند از یک هسته‪ ،‬تعدادی وند‪ ۲۰‬و یک فعل اسنادی پیوسته‪ ۲۱‬تشکیل شده باشد‪ .‬همچنین در صورتی‬
‫که این جزء یک فعل باشد‪ ،‬شامل هسته )بن فعلی(‪ ،‬وندهای فعلی‪ ،‬شناسه و اجزای دیگر است‪.‬‬
‫پس از جداسازی اجزای پیوسته‪ ،‬با انجام تحلیل ساختاری‪ ،۲۲‬هستهی جزء شناسایی میشود و تمامی وندها و تکواژهای تصریفی آن‬
‫حذف میشود‪ .‬پس از آن‪ ،‬هسته برای تشخیص درستی در واژگان مورد جستجو قرار میگیرد‪.‬‬
‫در مورد تحلیل ساختاری دو نکته حائز اهمیت است‪ .‬اول آنکه خروجی این بخش‪ ،‬تمامی حاالت ممکن برای هستهی جزء پیوسته به‬
‫همراه نوع)های( احتمالی آنهاست‪ .‬در صورتی که هیچیک از این هستهها با توجه به نوع احتمالیش در واژگان یافته نشود‪ ،‬جزء پیوسته به‬
‫عنوان خطا تشخیص داده شده و برای تصحیح به بخشهای بعدی ارجاع داده میشود‪.‬‬
‫دوم اینکه وندها به دو دستهی تصریفی و اشتقاقی تقسیم میشود‪ .‬وندهای اشتقاقی )نظیر چه در باغچه و ا در بینا( با توجه به معنا و‬
‫کاربرد تنها بر روی مجموعهی خاصی از واژگان قابل استفاده است‪ .‬در حالی که وندهای تصریفی )نظیر ها در گلها و ترین در بهترین(‬
‫صرف نظر از معنا و کاربرد‪ ،‬بر روی همهی واژگان )با توجه به نوع واژه( قابل استفاده میباشد‪ .‬با توجه به این تفاوت‪ ،‬تنها وندهای تصریفی‬
‫در تحلیل ساختاری شناسایی و حذف میشود و وندهای اشتقاقی دست نخورده باقی میماند‪ .‬دلیل این امر صرفهجویی در حجم واژگان )از‬
‫ی بیشتر با کاربرد واژه در جمله است‪ .‬به عالوه با این کار امکان‬
‫مرتبهی ‪ ۱۰‬برابر کوچکتر(‪ ،‬و نیز ارائهی پیشنهادهای مناسبتر و در سازگار ِ‬
‫اِعمال سبکهای نگارشی که در بعضی موارد در مورد وندهای تصریفی متفاوت هستند مقدور میشود‪.‬‬
‫بخش تحلیل ساختاری‪ ،‬عالوه بر پیدا کردن هسته‪ ،‬با توجه به وندهایی که به آن متصلند‪ ،‬حدس میزند که واژه اسم‪ ،‬صفت و یا فعل‬
‫است‪ .‬همچنین در صورتی که وندهای متصل به واژه با هیچکدام از موارد وندهای خاص اسم‪ ،‬صفت و یا فعل تطبیق نکند این بخش نوع‬
‫نامشخص را برمیگرداند‪ .‬به دلیل اشتراک وندها ممکن است بخش ریشهیاب چند نوع احتمالی را برای هسته برگرداند‪ .‬به عنوان مثال در‬
‫صورتی که عالمت جمع »ها« از جزء پیوسته حذف شده باشد‪ ،‬هسته احتما ًال اسم یا صفت بوده است و نمیتواند فعل بوده باشد‪ .‬بنابراین‬
‫خروجی این بخش بایستی با اطالعات نوع واژه که برای هر هسته در واژگان نگهداری شده است تطبیق داده شود‪.‬‬
‫‪ ۱۶‬دلیل این امر در بخش ]‪ [۳،۴‬مطرح شده است‪.‬‬
‫‪delimiter‬‬
‫‪space‬‬
‫‪17‬‬
‫‪18‬‬
‫‪ ،Virtual space ۱۹‬به آن فاصلهی تهی )‪ (Null space‬نیز گفته میشود‪ .‬در استاندارد یونیکد )‪ ،(Unicode‬با ‪ (Zero width non joiner) ZWNJ‬شناخته میشود‪.‬‬
‫به عنوان مثال فعل »*می روم«‪ ،‬برای رعایت اصول نوشتار معیار‪ ،‬باید به صورت »میروم« )با قرار دادن فاصلهی مجازی بین »می« و »روم«( نوشته شود‪.‬‬
‫‪20‬‬
‫‪affix‬‬
‫‪copula‬‬
‫‪22‬‬
‫‪morphological analysis‬‬
‫‪21‬‬
‫صادق دری نوگورانی و محسن صبوریان‪ ،‬طراحی و پیاده سازی یک خطایاب فارسی‪ ،‬دومین کارگاه پژوهشی زبان فارسی و رایانه‪ ،‬دانشکده ادبیات دانشگاه تهران‪ ،‬تیر ‪۱۳۸۵‬‬
‫‪۴‬‬
‫واحد تحلیل ساختاری با استفاده از زبان ‪ Prolog‬طراحی شده است و تنها توالیهای مجاز برای وندها را میپذیرد‪ .‬این تحلیل با توجه‬
‫به نتایج ارائه شده در ]‪ [10‬و ]‪ [13‬صورت میگیرد‪ .‬چند نمونه از نتایج تحلیل ساختاری در جدول ‪ ۲‬آمده است‪ .‬با توجه به اینکه روشهای‬
‫بسیار کاراتر و مناسبتری برای تحلیل ساختاری وجود دارد‪ ،۲۳‬زبان ‪ Prolog‬صرفًا به جهت سادگی پیادهسازی انتخاب شده است و با انجام‬
‫تحقیقات بیشتر و در عمل بایستی با یک پیادهسازی کاراتر جایگزین شود‪.‬‬
‫جزء پیوسته‬
‫نوع احتمالی )هسته صحیح(‬
‫هستههای احتمالی‬
‫شنوندگانتان‬
‫شنونده‪ ،‬شنوندگ‪ ،‬شنوندگان‪ ،‬شنوندگانت‪ ،‬شنوندگانتان‬
‫اسم‪ ،‬صفت‬
‫رهایی‬
‫ر‪ ،‬رها‪ ،‬رهایی‬
‫اسم‪ ،‬صفت‬
‫نمیروم‬
‫رو‪ ،‬روم‪ ،‬میرو‪ ،‬میروم‪ ،‬نمیرو‪ ،‬نمیروم‬
‫فعل‬
‫بیفتند‬
‫افت‪ ،‬بیف‪ ،‬یفت‪ ،‬افتن‪ ،‬بیفت‪ ،‬یفتن‪ ،‬افتند‪ ،‬بیفتن‪ ،‬یفتند‪ ،‬بیفتند فعل‬
‫جدول ‪ .۲‬چند نمونه از نتایج تحلیل ساختاری‬
‫‪ ٣.٢‬نحوهی ذخیرهسازی واژگان‬
‫یکی از مهمترین بخشهای خطایاب‪ ،‬واژگان یا همان مخزن واژههای خطایاب است‪ .‬در صورتی که واژهای در واژگان وجود نداشته‬
‫باشد‪ ،‬نادرست تشخیص داده میشود و طی روندی باید اصالح شود‪.‬‬
‫نحوهی ذخیرهسازی واژهها در واژگان‪ ،‬هم از نظر سرعت بازیابی و هم از جهت میزان فضای مصرفی نقش مهمی در سرعت اجرا و‬
‫حجم خطایاب دارد‪ .‬در صورتی که واژگان به صورت مناسبی نگهداری شود‪ ،‬میتوان در زمان قابل قبول درستی یا نادرستی واژهای را‬
‫تشخیص و لیستی از پیشنهادهای مناسب را به کاربر ارائه داد‪ .‬همچنین برای استفاده از خطایاب در محیطهایی با حافظهی محدود )نظیر‬
‫تلفنهای همراه‪PDA ،‬ها‪ ،‬کاربردهای سمت مشتری‪ ۲۴‬و ‪ (...‬الزم است حجم واژگان تا حد ممکن کم باشد‪.‬‬
‫در عمل‪ ،‬امکان تولید واژگان مناسب برای خطایاب در زمان محدود و با دقت کافی از عهدهی نگارندگان خارج بود‪ .‬از این رو در قدم‬
‫اول واژگان خطایاب ‪ ۲۵Farsi Aspell‬با ِاعمال اصالحات و غربال کردن واژهها‪ ،‬به کار گرفته شد‪ .‬واژگان خطایاب مزبور که یک خطایاب‬
‫بازمتن‪ ۲۶‬فارسی است‪ ،‬به دلیل وجود خطاهای صرفی‪ ،‬واژههای غلط و بعضاً مهجور و نیز نگهداری تمام حاالت صرفی کلمه از کیفیت‬
‫مناسبی برخوردار نبود‪ .‬در قدم بعدی و در حال حاضر در تالش هستیم واژگان دیگری را که در آن نوع هر واژه‪ ۲۷‬نیز مشخص شده است به‬
‫کار بگیریم‪.‬‬
‫به طور کلی در ذخیرهسازی واژگان‪ ،‬موارد ذیل حائز اهمیت است‪:‬‬
‫•‬
‫حجم واژگان‬
‫•‬
‫شیوهی ذخیرهسازی واژگان‬
‫•‬
‫گزینش واژهها برای قرار گرفتن در واژگان‬
‫•‬
‫امکان افزودن واژههای جدید‬
‫•‬
‫امکان وزندهی واژهها‬
‫•‬
‫امکان صفتدهی )برچسب زدن(‬
‫‪۲۸‬‬
‫واژهها‬
‫در ادامه به بررسی هریک از موارد فوق و نحوهی پیادهسازی آن در خطایاب میپردازیم‪.‬‬
‫‪ ۲۳‬نظیر استفاده از ‪ Unification-based Grammars‬و ‪Two-Level Model of Morphology‬‬
‫‪24‬‬
‫‪client-side‬‬
‫‪http://projects.farsilinux.org/projects/spell-checker/‬‬
‫‪26‬‬
‫‪open source‬‬
‫‪27‬‬
‫)‪POS (Part of Speech‬‬
‫‪28‬‬
‫‪tagging/labeling‬‬
‫‪25‬‬
‫صادق دری نوگورانی و محسن صبوریان‪ ،‬طراحی و پیاده سازی یک خطایاب فارسی‪ ،‬دومین کارگاه پژوهشی زبان فارسی و رایانه‪ ،‬دانشکده ادبیات دانشگاه تهران‪ ،‬تیر ‪۱۳۸۵‬‬
‫‪۵‬‬
‫‪٣.٢.١‬حجم واژگان‬
‫روشهای مختلفی برای ذخیرهسازی واژگان وجود دارد‪ .‬سادهترین روش )که بسیاری از آن استفاده میکنند( نگهداری فایل سادهای‬
‫ب جدا از هم میباشد‪ .‬این روش اگرچه در پیادهسازی بسیار ساده است و به دلیل مرتب بودن واژگان‪ ،‬امکان یافتن یک واژه‬
‫از واژههای مرت ِ‬
‫را با ))‪ O(lg(n‬دسترسی میدهد؛ لکن در آن‪ ،‬واژگان حجم زیادی را اشغال میکند‪ .‬این موضوع به خصوص در صورتی که واژهها با‬
‫پیشوند‪/‬پسوند همراه باشد تشدید میشود‪.‬‬
‫در این مقاله قصد نداریم به بررسی روشهای مختلف فشردهسازی و ذخیرهکردن واژگان بپردازیم؛ این موارد به تفصیل در ]‪ [3‬مورد‬
‫بررسی قرار گرفتهاند‪ .‬در مقالهی مذکور ضمن مقایسهی روشهای متداول ساخت و ذخیرهسازی واژگان )ایستا( نظیر ‪ Perfect Hashing‬و‬
‫‪ ،Tries‬روش کارایی با استفاده از ‪ Finite Automata‬ارائه شده است و با توجه به نتایج این مقایسهها‪ ،‬نتیجه گرفته میشود که ذخیرهسازی‬
‫واژگان به وسیلهی یک »اتوماتای کمینهی متناهی و قطعی بدون دور« )‪ ،(۲۹MADFA‬نسبت به روشهای دیگر ذخیرهسازی برتری دارد‪.‬‬
‫]‪ [3‬و ]‪ [2‬نشان دادهاند که با استفاده از اتوماتای تشخیصدهندهی ‪ ،Mealy‬میتوان حجم واژگان را ‪ ۳‬تا ‪ ۶‬بار نسبت به حجم آن با‬
‫ل ‪ ۳۰ISpell‬فشردهتر کرد‪.‬‬
‫فشردهسازی مورد استفاده در سیستم خطایاب متداو ِ‬
‫‪٣.٢.٢‬شیوهی ذخیرهسازی واژگان‬
‫برای ذخیرهسازی واژگان فارسی از الگوریتم سریع ساخت ‪ MADFA‬ایستا که در ]‪ [3‬ارائه شده استفاده کردهایم‪ .‬با این کار عالوه بر‬
‫سرعت دسترسی باال‪ ،‬حجم واژگان به طور متوسط به یک سوم کاهش یافت‪ .‬شکل ‪ ۲‬ساختار یک ‪ MADFA‬نمونه را نمایش میدهد‪ .‬در این‬
‫مثال واژههایی چون آیت‪ ،‬آگهی‪ ،‬ماهی‪ ،‬ممکن و مسکن ذخیره شده است‪.‬‬
‫س‬
‫ک‬
‫م‬
‫م‬
‫آغاز‬
‫ن‬
‫ا‬
‫آ‬
‫ه‬
‫گ‬
‫ی‬
‫ی‬
‫ت‬
‫شکل ‪ .۲‬نمایش سادهی یک ‪) MADFA‬از نوع ‪(Mealy‬‬
‫به طور خالصه میتوان گفت تمامی گذارهای‪ ۳۱‬این اتوماتا در آرایهای ذخیره میشوند که هر عضو آن نمایندهی یک گذار است و هر‬
‫چند گذار نمایندهی یک حالت‪ ۳۲‬میباشد‪ .‬هر عضو آرایه ساختار زیر را داراست )عضو اول آرایه حاوی اشارهگری به اولین حالت است(‪:‬‬
‫•‬
‫‪ ۸‬بیت برای ذخیرهسازی کاراکتر )نویسه(‬
‫•‬
‫‪ ۱۷‬بیت برای نمایهی حالت مقصد )اشارهگر(‬
‫•‬
‫‪ ۱‬بیت برای بیان گذار پایانی‬
‫•‬
‫‪ ۱‬بیت برای بیان آخرین گذار خروجی از یک حالت‬
‫•‬
‫‪ ۵‬بیت برای اطالعات اضافی )نظیر نوع کلمه(‬
‫‪29‬‬
‫‪Minimal Acyclic Deterministic Finite Automata‬‬
‫‪http://fmg-www.cs.ucla.edu/geoff/ispell.html‬‬
‫‪31‬‬
‫‪transition‬‬
‫‪32‬‬
‫‪state‬‬
‫‪30‬‬
‫صادق دری نوگورانی و محسن صبوریان‪ ،‬طراحی و پیاده سازی یک خطایاب فارسی‪ ،‬دومین کارگاه پژوهشی زبان فارسی و رایانه‪ ،‬دانشکده ادبیات دانشگاه تهران‪ ،‬تیر ‪۱۳۸۵‬‬
‫‪۶‬‬
‫‪٣.٢.٣‬گزینش واژهها برای قرار گرفتن در واژگان‬
‫گزینش واژهها برای ذخیرهسازی در واژگان به دلیل تأثیری که روی دقت و سرعت خطایاب دارد یکی از مواردی است که باید در‬
‫پیادهسازی مد نظر قرار گیرد‪ .‬این موضوع به ویژه در مورد زبانهایی که بسیار صرفشدنی‪ ۳۳‬هستند )مانند فرانسه و عربی( اهمیت پیدا‬
‫میکند‪ [3] .‬تعداد مناسب واژههای یک واژگان را برای یک زبان کم‪-‬صرفشدنی )مانند انگلیسی( به طور متوسط بین ‪ ۵۰،۰۰۰‬تا ‪۲۰۰،۰۰۰‬‬
‫عنوان کردهاست‪ ،‬در حالی که برای زبانی که واژههای آن بسیار صرف میشود‪ ،‬این تعداد به چندین میلیون میرسد‪ [1] .‬و ]‪ [11‬به بررسی‬
‫روشهای ذخیرهی واژگان برای زبانهای بسیار صرفشدنی پرداختهاند‪.‬‬
‫همانطور که در بخش ]‪ [۳.۱‬نیز اشاره شد‪ ،‬در این خطایاب تمامی واژههای ساده )مانند انسان‪ ،‬درخت‪ ،‬خوب‪ ،‬خور و ‪ (...‬ذخیره‬
‫میشود‪ .‬بهعالوه واژههای مرکب که شکل پیوستهی آنها مرسومتر از شکل جدایشان است نیز به واژگان افزوده میشود )همچون کتابخانه‪،‬‬
‫فناوری‪ ،‬اینکه و بهتر(‪ .‬در میان واژههایی که وند میپذیرد‪ ،‬آنهایی که شامل وند اشتقاقی است‪ ،‬در واژگان ذخیره میشود )مانند دانا‪ :‬دان ‪+‬‬
‫ب ساختهشده از وندهای تصریفی )مانند خوبترینها‪ :‬خوب ‪ +‬ترین ‪ +‬ها( ذخیره نمیشود‪.‬‬
‫ا‪ ،‬سودمند‪ :‬سود ‪ +‬مند(؛ با این حال واژههای مرک ِ‬
‫ال صفت( سازگاری دارد اما وندهای اشتقاقی چنین‬
‫دلیل این تصمیم روشن است؛ چرا که وندهای تصریفی با تمام واژهها )از نوع مشابه‪ ،‬مث ً‬
‫نیست و در صورتی که در واژگان ذخیره نشود‪ ،‬مشکل اشتباه در تشخیص درستی واژه‪ ۳۴‬را به وجود میآورد‪ .‬عالوه بر موارد فوق‪ ،‬بن افعال‬
‫)ساده( نیز ذخیره میشود‪.‬‬
‫‪٣.٢.‬امکان افزودن واژههای جدید‬
‫همانطور که اشاره شد‪ ،‬الگوریتمی که برای نگهداری و بازیابی واژگان به کار برده شده است‪ ،‬یک الگوریتم ایستا است و امکان وارد‬
‫کردن واژههای جدید را به واژگان نمیدهد البته در ]‪ [11‬و ]‪ [12‬به مسئلهی به روزآوری اتوماتا پرداخته شده است که به آن نمیپردازیم‪ .‬در‬
‫حال حاضر امکان افزودن واژهی جدید به واژگان وجود ندارد‪.‬‬
‫‪٣.٢.‬امکان وزندهی واژهها‬
‫با رشد حجم واژگان‪ ،‬امکان ارائهی پیشنهادهای مهجور توسط خطایاب افزایش مییابد‪ .‬برای جلوگیری از این مشکل‪ ،‬میتوان یک‬
‫بیت را به عنوان معینکنندهی متداول و یا مهجور بودن واژه در ساختار واژگان در نظر گرفت‪ .‬همچنین از آنجا که خطایاب مورد بررسی در‬
‫این مقاله از نوع تعاملی است‪ ،‬در صورتی که کاربر برای اولین بار یک واژهی پیشنهادی را که ازدستهی واژههای مهجور است انتخاب کند‪،‬‬
‫آن واژه برچسب متداول میخورد‪.‬‬
‫مهجور یا متداول بودن واژهها به مرتبسازی پیشنهادها برای کاربر و آموزش نامحسوس خطایاب حین استفاده کمک میکند‪ .‬مشابه‬
‫این روش در ]‪ [4‬و ]‪ [6‬نیز جهت اولویت دهی به واژهها در لیست پیشنهادها بکار گرفته شده است‪ .‬در حال حاضر از این امکان در خطایاب‬
‫استفاده نشده است‪.‬‬
‫‪٣.٢.‬امکان صفتدهی )برچسب زدن( واژهها‬
‫در صورتی که صفتهایی برای واژهها ذخیره شود )نظیر نوع واژه‪ ،‬فارسی یا عربی بودن‪ ،‬جمع یا مفرد بودن و امثال آن(؛ به ارائهی‬
‫ال اگر با توجه به تحلیل ساختاری‪ ،‬نوع یک واژه فعل تشخیص داده شود‪ ،‬برای ارائهی پیشنهادها‬
‫پیشنهادهای مناسبتر کمک میکند‪ .‬مث ً‬
‫کافی است در میان فعلهای واژگان به جستجوی موارد مشابه پرداخته شود‪ .‬همچنین امکان تشخیص خطا در ساخت واژهها با وندهای‬
‫تصریفی فراهم میگردد‪ .‬به عنوان مثال با توجه به اینکه خوب صفت است‪ ،‬پسوند ترین میتواند به عنوان وند تصریفی به آن اضافه شود در‬
‫حالیکه در مورد اسم میز چنین نیست‪ .‬این صفت دهی از اهمیت خاصی در ارائه پیشنهادهای درست برای تصحیح واژه برخوردار است‪.‬‬
‫‪highly inflective‬‬
‫‪۳۴‬‬
‫‪33‬‬
‫به بخش ]‪ [۲،۱‬مراجعه کنید‪.‬‬
‫صادق دری نوگورانی و محسن صبوریان‪ ،‬طراحی و پیاده سازی یک خطایاب فارسی‪ ،‬دومین کارگاه پژوهشی زبان فارسی و رایانه‪ ،‬دانشکده ادبیات دانشگاه تهران‪ ،‬تیر ‪۱۳۸۵‬‬
‫‪۷‬‬
‫در حال حاضر صفتهای پیشبینی شده در واژگان این خطایاب )با توجه به خروجی بخش تحلیل ساختاری( تنها شامل نوع واژه‬
‫یعنی اسم‪ ،‬صفت و فعل است‪ .‬با توجه به اینکه ممکن است کلمهای نوعهای متفاوتی با معانی متفاوت داشته باشد هر یک از این انواع یک‬
‫بیت را در مدخل واژه به خود اختصاص میدهند‪.‬‬
‫‪ ٣.٣‬تصحیح خطا‬
‫پس از تشخیص نادرستی یک جزء پیوسته‪ ،‬نوبت به ارائهی لیست پیشنهادها برای تصحیح آن میرسد‪ .‬در این مرحله خطایاب بایستی‬
‫به نحوی حدس بزند که چه واژهی درستی مد نظر کاربر بوده است که به صورت نادرست وارد شده است‪ .‬نگرش ما در پیادهسازی این‬
‫سیستم حدس زدن تقریبی منظور نویسنده است‪ .‬بدین منظور از دیرباز روشهای متنوعی به کار گرفته شده است که در ادامه به بعضی از‬
‫آنها اشاره میکنیم ]‪.[9‬‬
‫‪٣.٣.١‬روشهای رایج تصحیح خطا‬
‫در روشهای مبتنی بر حداقل فاصلهی ویرایشی‪ (MED) ۳۵‬واژههای درستی که حداقل تغییرات برای تبدیل آنها به واژهی نادرست‬
‫الزم است به عنوان جایگزین پیشنهاد میشود‪.‬‬
‫در روشهای مبتنی بر کلی ِد شباهت‪ ،۳۶‬از روی واژهی نادرست کد یا کلیدی تولید میشود که واژههای درستی که کد یکسانی داشته‬
‫باشد‪ ،‬مشابه با آن واژه تشخیص داده و پیشنهاد میشود‪ .‬این کلید معمو ًال با نحوهی تلفظ واژه یا فونتیک‪ ۳۷‬آن در رابطه است و در مورد‬
‫زبانهایی که تلفظ واژهها با نوشتار آنها تفاوت زیادی دارد )خصوصًا در مورد اسامی خاص و زبان انگلیسی( کاربرد دارد‪ .‬در زبان فارسی این‬
‫تفاوت اغلب در گزینش میان چند حرف که همگی تلفظ یکسانی دارد )نظیر ذ‪ ،‬ز‪ ،‬ض و ظ( پیش میآید و به عنوان یک تغییر ویرایشی در‬
‫ب مورد بررسی در این مقاله قابل تصحیح است‪ .‬از این روشها میتوان به ‪ Metaphone ،SPEEDCOP ،SOUNDEX‬و‬
‫خطایا ِ‬
‫‪Double‬‬
‫‪ Metaphone‬اشاره کرد‪.‬‬
‫‪۳۸‬‬
‫در روشهای مبتنی بر قواعد ‪ ،‬خطایاب بر اساس یک سری قاعده‪ ،‬تالش میکند واژهی درست را از روی واژهی نادرست حدس بزند‪.‬‬
‫در این روشها معمو ًال استفاده از هر قاعده هزینهای از پیش تعیین شده دارد که واژههای درست با حداقل هزینه‪ ،‬در فهرست پیشنهادها‬
‫باالتر قرار میگیرد‪ .‬بهرغم کیفیت نسبت ًا خوب تصحیح خطا با این روش‪ ،‬مشکل تعیین هزینهی هر قاعده و تشخیص خطاهایی که بایستی‬
‫برای آنها قاعدهای پیشبینی کرد وجود دارد و به دلیل عدم دسترسی به اطالعات آماری مورد نیاز‪ ،‬استفاده از این روش در خطایاب فارسی‬
‫ممکن نیست‪.‬‬
‫عالوه بر روشهای فوق‪ ،‬استفاده از روشهای مبتنی بر احتماالت‪ ۳۹‬و یا شبکههای عصبی‪ ۴۰‬نیز مورد استفاده قرار میگیرد‪.‬‬
‫‪٣.٣.٢‬خطاهای صحیح‬
‫یکی از مزیتهای این خطایاب‪ ،‬تشخیص و نادیدهگرفتن نویسههای عربی است که بعضًا به دلیل وجود آرایشهای متفاوت صفحهکلید‬
‫در متون ظاهر میشود‪ .‬خطایاب استاندارد فارسی ‪ Microsoft Word 2003‬در این مورد و مواردی چون فاصلهی مجازی و واژهها و فعلهای‬
‫مرکب‪ ،‬ضعیف عمل میکند و به نظر میرسد طراحان آن تکنیکهای خاص زبان فارسی را مد نظر قرار ندادهاند‪.‬‬
‫خطایاب فارسی امکان نادیدهگرفتن واژههایی که در آن از نویسههای عربی استفاده شده را دارد؛ به بیان دیگر به واسطهی تع ّدد‬
‫آرایشهای صفحهکلید‪ ،۴۱‬بعض ًا از نویسههای مشترک با عربی برای نگارش واژههای فارسی استفاده میشود که سیستم این اشکاالت را‬
‫‪35‬‬
‫‪minimum edit distance‬‬
‫‪similarity key‬‬
‫‪37‬‬
‫‪phonetic‬‬
‫‪38‬‬
‫‪rule-based‬‬
‫‪39‬‬
‫‪probabilistic‬‬
‫‪40‬‬
‫‪neural net‬‬
‫‪36‬‬
‫صادق دری نوگورانی و محسن صبوریان‪ ،‬طراحی و پیاده سازی یک خطایاب فارسی‪ ،‬دومین کارگاه پژوهشی زبان فارسی و رایانه‪ ،‬دانشکده ادبیات دانشگاه تهران‪ ،‬تیر ‪۱۳۸۵‬‬
‫‪۸‬‬
‫نادیده میگیرد‪ .‬الزم به ذکر است که خطایاب گزینهای برای اصالح خودکار اینگونه ناهمگونیها در اختیار کاربر قرار میدهد‪ .‬برخی از این‬
‫موارد عبارتند از‪:‬‬
‫•‬
‫نویسهی ي عربی )ي‪ ،(U+064A :‬الف مقصوره )ى‪ (U+0649 :‬و ی فارسی )ی‪(U+06CC :‬‬
‫•‬
‫نویسهی ك عربی )ك‪ (U+0643 :‬و ک فارسی )ک‪(U+06A9 :‬‬
‫•‬
‫ٔه و هی )وابسته به سبک نگارش(‬
‫•‬
‫ِاعراب )عالئم‪ :‬شامل انواع الف‪-‬همزه‪ ،‬تنوین‪ ،‬تشدید و ‪(...‬‬
‫‪ ٣.‬چگونگی تصحیح خطا در خطایاب فارسی‬
‫با تشخیص واژهای به عنوان خطا‪ ،‬سیستم تالش میکند تا لیستی از بهترین پیشنهادها را برای تصحیح خطا ارائه دهد‪ .‬یکی از‬
‫مهمترین مالکهای تشخیص خطایاب خوب بررسی لیست پیشنهادی آن است؛ به طوریکه باید با احتمال باال‪ ،‬واژهی درست در موارد‬
‫پیشنهادی ابتدای این لیست باشد‪.‬‬
‫‪۴۲‬‬
‫روش مورد استفاده در تصحیح خطا‪ ،‬مبتنی بر شیوهی معکوس حداقل فاصلهی ویرایشی )‪ (RMED‬است‪ .‬در این روش به جای آنکه‬
‫ت مورد بررسی بر روی واژهی نادرست ِاعمال‬
‫ک تغییرا ِ‬
‫تمامی واژگان از لحاظ نزدیکی به واژهی نادرست مورد بررسی قرار گیرد‪ ،‬تمامی ت ْ‬
‫میشود و در صورتی که منجر به تولید واژهی درستی شد‪ ،‬آن واژه به عنوان پیشنهاد جایگزینی در نظر گرفته میشود ]‪.[9‬‬
‫ک تغییراتی که در این خطایاب برای تصحیح یک جزء پیوستهی نادرست در نظر گرفته شده عبارتست از‪:‬‬
‫ت ْ‬
‫•‬
‫افزودن یک حرف‬
‫•‬
‫حذف یک حرف‬
‫•‬
‫‪۴۳‬‬
‫جایگزین کردن یک حرف با حرف دیگر‬
‫‪۴۴‬‬
‫•‬
‫جابجا کردن دو حرف مجاور‬
‫•‬
‫شکستن به دو جزء‬
‫•‬
‫چسباندن به جزء قبلی و بعدی‬
‫مطابق تحقیقی که در ]‪ [5‬انجام شده است‪ ،‬تقریبًا ‪ ٪۸۰‬خطاهای امالیی در اثر تنها یکی از چهار مورد اول به وجود میآید‪.‬‬
‫استفاده از روش معکوس و محدود کردن تغییرات به یک تغییر‪ ،‬دو مزیت دارد‪ .‬اول آنکه با روش تحلیل ساختاری و نگهداری هستهی‬
‫اجزای پیوسته در واژگان )که پیش از این به آن پرداختیم( سازگاری دارد و خطایاب را از تولید تمام شکلهای تصریفی ممکن برای‬
‫واژههای نگهداری شده در واژگان بینیاز میکند؛ ثانی ًا از تعداد واژههایی که بررسی میشود به اندازهی قابل توجهی میکاهد‪ .‬هر دوی این‬
‫مزایا به باال رفتن سرعت اجرای خطایاب کمک شایانی میکند‪ .‬بدیهی است که با ایجاد یک تغییر نمیتوان همهی خطاهایی را که ناشی از‬
‫عدم آگاهی نویسندهی متن از امالی درست واژههاست پوشش داد‪.‬‬
‫ک تغییر بر روی آن انجام میشود‪ .‬پس از ایجاد هر تغییر‪ ،‬جزء‬
‫تت ْ‬
‫جزء پیوسته پس از اینکه نادرست تشخیص داده شد‪ ،‬تمام حاال ِ‬
‫پیوستهی جدید دوباره به مرحلهی تحلیل ساختاری میرود و هستهی آن از لحاظ درستی در واژگان بررسی میشود‪ .‬با توجه به وجود‬
‫وندهای تک حرفی و دو حرفی‪ ،‬احتمال اینکه جزء پیوستهی تولید شدهای صحیح تشخیص داده شود ولی از ساخت تصریفی درستی‬
‫برخوردار نباشد وجود دارد‪ .‬به دلیل واژههای نسبت ًا زیادی )البته غیر قابل مقایسه با حجم کل واژگان( که در این مرحله تولید میشود و با‬
‫‪ ۴۱‬به عنوان مثال در آرایش صفحه کلید فارسی مایکروسافت ویندوز ‪ ۲۰۰۰‬نویسهی الف مقصورهی عربی )‪ (U+0649‬به جای ی فارسی )‪ (U+06CC‬قرار دارد‪ ،‬در حالی‬
‫که در نسخهی ‪ XP‬ویندوز این موضوع اصالح شده است‪.‬‬
‫‪42‬‬
‫‪reverse minimum edit distance‬‬
‫‪substitution‬‬
‫‪44‬‬
‫‪reversal/transposition‬‬
‫‪43‬‬
‫صادق دری نوگورانی و محسن صبوریان‪ ،‬طراحی و پیاده سازی یک خطایاب فارسی‪ ،‬دومین کارگاه پژوهشی زبان فارسی و رایانه‪ ،‬دانشکده ادبیات دانشگاه تهران‪ ،‬تیر ‪۱۳۸۵‬‬
‫‪۹‬‬
‫ال احساس میشود‪ .‬با توجه‬
‫توجه به اینکه کاربر باید از میان پیشنهادها‪ ،‬انتخاب کند‪ ،‬نیاز به حذف کردن چنین پیشنهادهای نادرستی کام ً‬
‫به نوع کلمهی احتمالی و نگهداری نوع کلمه در واژگان‪ ،‬این امر میسر میشود‪.‬‬
‫یکی از خطاهای رایج در متون فارسی‪ ،‬پیوسته و جدا نویسی نابجا است‪ .‬صرف نظر از اینکه چه واژههایی باید پیوسته و کدامها باید‬
‫جدا نوشته شود‪ ،‬خطایاب فارسی باید توانایی تصحیح این خطاها را داشته باشد‪ .‬بدین منظور‪ ،‬شکستن یک جزء پیوسته به دو جزء نیز نوعی‬
‫ک تغییر در نظر گرفته میشود‪ .‬همچنین در صورتی که جزء پیوستهای نادرست تشخیص داده شود‪ ،‬به جزء پیوستهی پیش یا پس از خود‬
‫ت ْ‬
‫چسبانده‪ ،‬و جزء جدید از لحاظ درستی بررسی میشود‪ .‬به همین دلیل بایستی واژههایی که در یک جمله آمدهاست یکجا به خطایاب داده‬
‫شود‪ ،‬چرا که در غیر این صورت ممکن است واژههایی که اصو ًال در یک جمله نیامده است با این الگوریتم به یکدیگر چسبانده شود‪.‬‬
‫‪٣..١‬مرتبسازی لیست پیشنهادها‬
‫خطاهای پیوسته و جدا نویسی‪ ،‬احتمال اول لیست پیشنهادی را تشکیل میدهند‪.‬‬
‫نوع واژهای که نادرست تشخیص داده شده است به صورت آماری تعیین میشود‪ .‬به عنوان مثال اگر با دادن واژهی غلطی به بخش‬
‫تحلیل ساختاری‪ ۴ ،‬ریشهی احتمالی برای این واژه تشخیص داده شود‪ ،‬به طوری که ‪ ۲‬تای آنها فعل‪ ،‬یکی صفت و دیگری هم مشترکًا فعل‬
‫ی نوع واژهی غلط‪ ،‬به ترتیب فعل )فراوانی ‪ (۳‬و سپس صفت )فراوانی ‪ (۲‬قرار میگیرد‪.‬‬
‫و صفت تشخیص داده شود‪ ،‬در لیست احتمال ِ‬
‫پس از حدس زدن نوع واژه‪ ،‬پیشنهادها بر اساس نوع کلمهی هستهشان مرتب میشوند‪ .‬به این ترتیب ابتدا پیشنهاداتی که نوع آنها‬
‫با نوع محتمل واژهی غلط مطابقت میکند قرار میگیرند‪ .‬در همین مثال‪ ،‬در صورتی که دو پیشنهاد موجود باشد که یکی فعل و دیگری‬
‫صفت تشخیص داده شده است‪ ،‬ابتدا فعل و سپس صفت قرار میگیرد‪ .‬این موضوع با توجه به همان لیست مرتبشدهی آماری نوع واژهی‬
‫غلط است‪.‬‬
‫ کارهای آینده‬
‫در آینده افزودن امکانات ذیل به سیستم خطایاب پیشبینی شده است‪:‬‬
‫•‬
‫اعمال سبکهای نگارشی‪ :‬متون علمی و رسمی باید از ابتدا تا انتها یک سبک نگارشی را رعایت کنند‪ .‬مواردی چون پیوسته‪/‬جدا‬
‫نویسی‪ ،‬انواع همزه‪ ،‬استفاده یا عدم استفاده از ی کوتاه شده شبیه همزه‪ ،‬فاصلهگذاری و ‪...‬؛‬
‫•‬
‫وزندهی تغییرات‪ :‬در این روش به هر یک از تغییراتی که بر روی واژهی نادرست اعمال میشود‪ ،‬درجهی اهمیت نسبت داده‬
‫میشود‪ .‬به عنوان مثال درجه اهمیت تغییر حروفی که بر روی صفحهی کلید در کنار هم قرار دارد زیاد در نظر گرفته میشود؛‬
‫•‬
‫صفتدهی )برچسب زدن(‪ :‬اضافه کردن دیگر اطالعات در مورد واژه؛ نظیر عربی بودن‪ ،‬اسم جمع بودن‪... ،‬‬
‫•‬
‫مشخص کردن واژههای کم کاربرد یا مهجور‬
‫•‬
‫امکان اضافه کردن واژگان جدید به ‪MADFA‬؛‬
‫•‬
‫استفاده از لیست واژههای چند امالیی و شکل معیار آن؛‬
‫•‬
‫استفاده از لیست واژههای نادرست متداول و جایگزینهای آن؛‬
‫•‬
‫ارائهی یک الگوریتم تولید کلید شباهت بر مبنای تلفظ واژه )مشابه ‪ (Metaphone‬برای زبان فارسی؛‬
‫ جمعبندی‬
‫در این مقاله مراحل مختلف ساخت و پیادهسازی یک خطایاب تعاملی مورد بررسی قرار گرفت و همچنین در مواردی راه حل خاصی‬
‫برای زبان فارسی ارائه شد‪ .‬امکانات این خطایاب نظیر تصحیح با توجه به خصوصیات زبان فارسی و تجزیهی ساختاری واژهها در مقایسه با‬
‫خطایابهای دیگر فارسی‪ ،‬در نوع خود بینظیر است‪ .‬با این حال هنوز راه زیادی تا رسیدن به حد مطلوب وجود دارد‪.‬‬
‫صادق دری نوگورانی و محسن صبوریان‪ ،‬طراحی و پیاده سازی یک خطایاب فارسی‪ ،‬دومین کارگاه پژوهشی زبان فارسی و رایانه‪ ،‬دانشکده ادبیات دانشگاه تهران‪ ،‬تیر ‪۱۳۸۵‬‬
‫‪۱۰‬‬
‫ همچنین با عمل تحلیل‬.‫ حجم واژگان را تا چندین برابر پایین بیاوریم‬MADFA ‫در این خطایاب توانستیم با استفاده از یک ساختار‬
.‫ پیشنهاد مناسبی را به کاربر ارائه دهیم‬،‫ساختاری هر یک از واژگان وارد شده و ریشهیابی واژه‬
‫منابع‬
[1] Anick, P., Artemieff, S., “A High-level Morphological Description Language Exploiting Inflectional Paradigms”, Procceedings of
COLING-92 Nantes. Aug. 23-28.,1992
[2] Ciura, M.G., Deorowicz, S.: “Experimental study of finite automata storing static lexicons”. Technical report, Silesian Technical
University, Poland, November 1999.
[3]
Ciura, M.G., Deorowicz, S.: “How to squeeze a lexicon.” Soft. Pract. Exper., 2001, Vol. 31, No. 11, pp. 1077–1090
[4] Crowell, J., Zeng, Q., Ngo, L., Lacroix, E, “A Frequency-based Technique to Improve the Spelling Suggestion Rank in Medical
Queries”, Journal of the American Medical Informatics Association, 2004, Vol. 11, 179–185
[5]
Damerau, F J., Mays, E., “An examination of undetected typing errors”, Inf. Process. Manage., 1989, Vol. 25, pp 659–664
[6] Deorowicz, S., Ciura, M.G. “Correcting Spelling Errors by Modeling Their Causes”, Int. J. Appl. Math. Comput. Sci., 2005, No.
15, pp275-285
[7] Garfinkel, R., Fernandez, E., Gopal, R., “Design of An Interactive Spell Checker: Optimizing The List of Offered Words”,
Decision Support Systems, 2003, Vol. 35, 385–397
[8]
Hajic, J., Droza, J., “Spelling-checking for Highly Inflective Languages”, Research Institute of Computing Machinery
[9]
Kukich, K., “Technique for Automatically Correcting Words in Text”, ACM Computing Surveys, 1992, No. 24, pp. 377–493
[10] Megerdoomian, K., “Persian Computational Morphology: A Unification-Based Approach”, Computing Research Laboratory, New
Mexico State University, Las Cruces, New Mexico, 2000
[11] Park, K-H, Aoe, J-I, Morimoto, K, Shishibori, M, “An algorithm for dynamic processing of DAWG’s”, International Journal of
Computational Mathematics, 1994, Vol. 54, pp. 155–173
[12] Sgarbas, KN, Fakotakis, ND, Kokkinakis, GK, “Two algorithms for incremental construction of directed acyclic word graphs”,
International Journal on Artificial Intelligence Tools, 1995, Vol. 4, pp. 369–381
[13] Taghva, K., Beckley, R., Sadeh, M., “A Stemming Algorithm for The Farsi Language”, Information Science Research Institute,
University of Nevada, Las Vegas, 2003
۱۳۸۴ ،‫ چاپ سوم‬،(‫ فرهنگستان زبان و ادب فارسی نشر )آثار‬،‫ دستور خط فارسی‬،‫[ فرهنگستان زبان و ادب فارسی‬۱۴]
۱۳۸۱ ،‫ چاپ دوم‬،‫ سازمان چاپ و انتشارات وزارت فرهنگ و ارشاد اسالمی‬،‫ شیوهنامهی ویرایش؛ رسمالخط فارسی‬،.‫ر‬.‫ م‬،‫[ محمدیفر‬۱۵]
۱۳۸۵ ‫ تیر‬،‫ دانشکده ادبیات دانشگاه تهران‬،‫ دومین کارگاه پژوهشی زبان فارسی و رایانه‬،‫ طراحی و پیاده سازی یک خطایاب فارسی‬،‫صادق دری نوگورانی و محسن صبوریان‬
۱۱