به نام خدا طراحی و پیادهسازی یک خطایاب فارسی صادق ُد ّری نوگورانی محسن صبوریان مهندسی نرمافزار مهندسی نرمافزار گروه برق و کامپیوتر دانشکده فنی دانشگاه تهران گروه برق و کامپیوتر دانشکده فنی دانشگاه تهران [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 ۱۳۸۴ ، چاپ سوم،( فرهنگستان زبان و ادب فارسی نشر )آثار، دستور خط فارسی،[ فرهنگستان زبان و ادب فارسی۱۴] ۱۳۸۱ ، چاپ دوم، سازمان چاپ و انتشارات وزارت فرهنگ و ارشاد اسالمی، شیوهنامهی ویرایش؛ رسمالخط فارسی،.ر. م،[ محمدیفر۱۵] ۱۳۸۵ تیر، دانشکده ادبیات دانشگاه تهران، دومین کارگاه پژوهشی زبان فارسی و رایانه، طراحی و پیاده سازی یک خطایاب فارسی،صادق دری نوگورانی و محسن صبوریان ۱۱
© Copyright 2026 Paperzz