تحلیل تطبیقی غلطیابی در زبانهای پارسی و انگلیسی: از بیقاعدگیهای نوشتاری تا پیچیدگی صرفی (ساختواژه)

گستره استفاده وسیع در ارتباطهای دیجیتال و عملکرد موفق و سریع نرمافزارهای غلطیاب خودکار باعث شده است پیچیدگی ساختار الگوریتمی غلطیابی و پیشرفت چشمگیر آن از نظرها پنهان بماند. غلطیابی خودکار در اصل، کاری از نوع زبانشناسی محاسباتی (رایانشی) است که در آن خطاهای نوشتاری متن شناسایی شده و اصلاح میشود. مستقل از زبان مقصد و هدف، معماری بنیادین این نرمافزارها به ۲ مرحله اساسی تقسیم میشود: شناسایی خطا و پیشنهاد اصلاح یا واژه(های) جایگزین. ابتدا کمی توضیح درباره زبانشناسی محاسباتی یا رایانشی.
زبانشناسی محاسباتی یا رایانشی (Computational Linguistics) چیست؟
زبانشناسی محاسباتی شاخهای از علم است که بین زبانشناسی و رایانه قرار میگیرد. در این رشته تلاش میشود رایانه بتواند زبان انسان را درک کند، پردازش کند و تولید کند.
چند نمونهی از کاربردهای آن:
ترجمهی ماشینی مانند گوگل ترنسلیت.
تصحیح خودکار املایی و دستوری در نرمافزارهای نوشتاری.
تشخیص گفتار مانند تبدیل صدا به متن.
دستیارهای هوشمند صوتی مانند سیری یا الکسا.
به بیان ساده، زبانشناسی محاسباتی یعنی:
آموزش دادن زبان انسانی به رایانهها.
وظایف اصلی زبانشناسی محاسباتی را میتوان به چند بخش ساده تقسیم کرد:
۱. درک زبان (Understanding)
رایانه باید بتواند متن یا گفتار انسان را بفهمد.
مثال: وقتی یک نرمافزار متوجه میشود شما چه پرسشی پرسیدهاید.
۲. پردازش زبان (Processing)
رایانه باید بتواند کلمات و جملهها را تجزیه و تحلیل کند.
مثال: جدا کردن واژهها، شناختن نقشهای دستوری یا پیدا کردن معنی یک کلمه در متن.
۳. تولید زبان (Generation)
رایانه باید بتواند جملههای درست و قابل فهم بسازد.
مثال: وقتی یک نرمافزار متنی را برای شما مینویسد یا ترجمه میکند.
۴. یادگیری از دادهها (Learning)
رایانه با استفاده از هوش مصنوعی و دادههای زبانی، بهتدریج زبان را بهتر یاد میگیرد.
مثال: نرمافزارهایی که هرچه بیشتر استفاده شوند، پیشبینی و پیشنهاد دقیقتری میدهند.
در یک جمله:
زبانشناسی محاسباتی تلاش میکند انسان و رایانه بتوانند از راه زبان با یکدیگر ارتباط برقرار کنند.
ادامه موضوع. تا اینجا گفته شد که هر غلطیابی ۲ بخش اساسی دارد، تشخیص خطا و ارائه پیشنهاد جایگزین. اما هر زبان ویژگیهای خاص خود را دارد. مثلاً در انگلیسی مشکل بیشتر به خاطر تنوع املایی و شباهت آوایی واژههاست، در حالیکه در فارسی چالشها به موضوعاتی مثل همنویسهها (کلمات با شکل یکسان ولی معنای متفاوت)، وجود حروف همصدا (مثل «س»، «ص»، «ث») و نبود فاصلهگذاری دقیق مربوط میشود.
فرایند اولیه در هر نرمافزار غلطیاب، جستجوی متن و استخراج واژههای تشکیلدهنده آن است. پس از انجام توکنسازی (تقسیم متن به واحدهای واژگانی)، هر واژه وارد فرایند اعتبارسنجی میشود تا درستی یا نادرستی آن مشخص شود. به تبدیل متن به واحدهای کوچکتر یعنی واژهها در علوم رایانهای و زبانشناسی رایانشی «توکنسازی» (Tokenization) میگویند.
تشخیص خطا
رایجترین و سادهترین روش برای شناسایی خطا، مقایسه با واژهنامه یا فرهنگ لغت است. در این روش، هر واژه استخراجشده با یک واژهنامه از پیش آمادهشده از کلمات درست مقایسه میشود. اگر واژه در این واژهنامه یافت نشود، بهعنوان خطای احتمالی غیرواژگانی علامتگذاری میشود. این واژهنامه میتواند فهرست ساده واژهها باشد یا یک ساختار داده پیچیدهتر که اطلاعات دستوری و واژگانی بیشتری را هم شامل میشود. هرچند این روش برای بسیاری از خطاهای نوشتاری رایج موثر است، محدودیتهایی هم دارد:
نمیتواند خطاهای «واژه واقعی» را شناسایی کند؛ یعنی زمانی که یک غلط املایی به یک کلمه معتبر دیگر تبدیل میشود (مثلاً نوشتن «راه» به جای «رام»).
ممکن است واژههای صحیحی که در واژهنامه وجود ندارند، مانند اسامی خاص، اصطلاحات تخصصی یا واژههای تازه ساختهشده (مانند میانافزار)، به اشتباه بهعنوان خطا علامتگذاری کند.
برای رفع برخی از این محدودیتها، روشهای جایگزین بدون استفاده از واژهنامه توسعه یافتهاند. یکی از این تکنیکها، تحلیل n-گرامهای حروف است (دنبالهای از حروف، معمولاً تریگرامها یا سه حرفی). در این روش، سامانه با استفاده از یک پیکره متنی یا متن بزرگ (Corpus) آموزش داده میشود تا فراوانی تمام تریگرامهای معتبر را یاد بگیرد. سپس هنگام بررسی متن، اگر واژهای شامل ۳حرفی شود که از نظر آماری غیرممکن یا بسیار نادر است (مثلاً «pkx» در انگلیسی یا «خهژ» در پارسی)، بهعنوان خطا علامتگذاری میشود.
فرض کنید سامانه با متنهای فارسی معمولی آموزش داده شده و فراوانی تریگرامها را یاد گرفته است.
تشخیص خطای غیرمعمول: اگر کسی به جای نوشتن «خانه» بنویسد «خاخه»
تریگرام «خاخ» در زبان فارسی بسیار نادر یا غیرممکن است.
سامانه این واژه را خطا تشخیص میدهد.
محدودیت روش: اگر کسی به جای «کتاب» بنویسد «کتان» (با یک اشتباه کوچک که توالی حروف هنوز طبیعی است)،
هیچ تریگرامی غیرمعمول در واژه وجود ندارد.
سامانه ممکن است خطا را تشخیص ندهد.
به این ترتیب، روش n-گرام در تشخیص خطاهای عجیب و غیرطبیعی خوب عمل میکند، اما برای خطاهای ظریف یا واژههای واقعی با غلط تایپی کمتر موثر است.
مزیت این روش این است که تا حدی وابسته به زبان خاصی نیست و میتواند برای زبانهای مختلف استفاده شود. اما محدودیت آن این است که خطاهایی که توالی حروف غیرمعمول ایجاد نمیکنند را شناسایی نمیکند؛ یعنی اگر یک غلط املایی همچنان توالی حروفی طبیعی داشته باشد، این روش قادر به تشخیص آن نیست.
تهیه پیشنهادهای اصلاحی
پس از شناسایی خطا، نرمافزار از مرحله ساده «اعتبارسنجی» به مرحله «اصلاح» میرود و فهرستی از واژههای جایگزین احتمالی تولید میکند. این مرحله بسیار مهم و از نظر محاسباتی پرهزینه است. برای این منظور، از چند دسته الگوریتم مختلف استفاده میشود:
● الگوریتمهای فاصله ویرایشی (Edit Distance): این دسته از الگوریتمها شباهت بین واژهی اشتباه و واژههای موجود در واژهنامه را اندازهگیری میکنند. برای این کار، کمترین تعداد تغییرات تکحرفی که لازم است تا یک کلمه به دیگری تبدیل شود، محاسبه میشود. مهمترین و پرکاربردترین الگوریتم در این دسته الگوریتم فاصله لونشتاین (Levenshtein Distance) است. این الگوریتم ۳ عملیات اصلی را در نظر میگیرد: درج (Insertion)، حذف (Deletion) و جایگزینی (Substitution). برای مثال، فاصله لونشتاین بین واژههای انگلیسی «kitten» و «sitting» برابر با ۳ است. الگوریتم معمولاً از برنامهریزی پویا (Dynamic Programming) برای ساخت یک ماتریس و محاسبه موثر این فاصله استفاده میکند.
چرا فاصله لونشتاین kitten با sitting عدد ۳ است؟
برای تبدیل kitten به sitting ابتدا k باید با s جایگزین شود kitten -> sitten
حرف e باید با i جایگزین شود sitten -> sittin
سرانجام حرف g باید در انتها درج شود sittin -> sitting
مثال دیگر، فاصله لونشتاین میز با میوه ۲ است
ابتدا حرف ز با و جایگزین میشود میز -> میو
سپس حرف ه در انتها درج میشود میو -> میوه
فاصله لونشتاین کلمات از هر ۲ طرف عدد یکسان است و تنها ترتیب درج و حذف و جایگزینی معکوس میشود. یعنی فاصله لونشتاین میوه با میز با فاصله میز با میوه برابر است.
یک نسخه بسیار مرتبط برای غلطیاب، فاصله دامرو–لونشتاین (Damerau–Levenshtein Distance) است که یک عملگر چهارم را اضافه میکند: جابجایی دو حرف مجاور (Transposition). مثلاً واژه «acheive» با جابجایی حروف به «achieve» تبدیل میشود یا واژه «سالم» به «سلام». این عملگر مهم است زیرا جابجایی حروف یکی از رایجترین انواع خطاهای تایپی انسان است و الگوریتم لونشتاین استاندارد آن را بهعنوان دو عملیات (حذف و درج) میشمارد، در حالی که در واقع فقط یک خطای ساده تایپی است و واژهها شبیهتر از آن چیزی هستند که الگوریتم استاندارد نشان میدهد.
● نمایهگذاری N-گرام (N-gram Indexing): محاسبه فاصله ویرایشی بین یک واژه اشتباه و تمام واژههای موجود در یک واژهنامه بزرگ از نظر محاسباتی بسیار سنگین است. برای بهینهسازی این جستجو، سامانهها اغلب از نمایه معکوس (Inverted Index) استفاده میکنند که n-گرامهای حروف را به واژههای واژهنامهای که آنها را دارند نگاشت میکند.
بهعنوان مثال، اگر واژه اشتباه «langauge» بررسی شود، سامانه میتواند به سرعت تمام واژههای واژهنامهای که تعداد قابل توجهی از n-گرامهای آن را دارند (مثل «lan»، «ang»، «gua») بازیابی کند. این کار فضای جستجوی مورد نیاز برای محاسبه پرهزینه فاصله ویرایشی را به شکل چشمگیری کاهش میدهد.
فرض کنید واژه اشتباه «کتابخونه» در متن نوشته شده است، در حالی که واژه درست «کتابخانه» است. این نوع غلط در فارسی بسیار رایج است، چون بسیاری از افراد هنگام تایپ، حرفها را جا میاندازند یا به شکل محاورهای مینویسند.
مرحله ساخت N-گرامها (تریگرام):
واژه اشتباه «کتابخونه» → «کتا»، «تاب»، «ابخ»، «بخو»، «خون»، «ونه»
نمایه معکوس:
سامانه از قبل یک نمایه دارد که به هر تریگرام، لیستی از واژههای واژهنامه که شامل آن تریگرام هستند، نگاشت میکند. هنگام بررسی:
واژههایی که بیشترین تعداد تریگرام مشترک با «کتابخونه» دارند انتخاب میشوند.
«کتابخانه» → تریگرامهای «کتا»، «تاب»، «ابخ»، «بخا»، «خانه» → بیشترین شباهت → بررسی میشود
«کتاب» → تریگرامهای «کتا»، «تاب»، «تاب» → شباهت کمتر → بررسی میشود
«خانه» → «خا»، «ان»، «نه» → تقریباً هیچ تریگرام مشترک → کنار گذاشته میشود
مرحله فاصله ویرایشی:
سپس فاصله ویرایشی تنها بین این زیرمجموعه محاسبه میشود تا بهترین پیشنهادها ارائه شوند:
کتابخانه
کتاب
● الگوریتمهای آوایی (Phonetic Algorithms): برای مقابله با اشتباهات آوایی، جایی که یک کلمه همانطور که تلفظ میشود نوشته میشود (مثلاً «speshle» به جای «special»)، سیستمها میتوانند از الگوریتمهای رمزگذاری آوایی مانند Soundex یا نسخه پیشرفتهتر آن یعنی Double Metaphone استفاده کنند. این الگوریتمها یک کلمه را بر اساس تلفظ انگلیسی آن به یک کد کوتاه تبدیل میکنند، صداهای مشابه را با هم یکسان میسازند و حروف صدادار را نادیده میگیرند. کلماتی که شبیه به هم تلفظ میشوند، کدهای یکسان یا مشابه خواهند داشت و این امکان را به سیستم میدهد که اصلاحات آوایی محتمل را پیشنهاد کند، حتی اگر فاصله ویرایشی آنها زیاد باشد.
الگوریتم Soundex یک روش رمزگذاری آوایی است که کلمات انگلیسی را بر اساس صدای آنها به یک کد ثابت تبدیل میکند. این الگوریتم در سال ۱۹۱۸ اختراع شد و هدف آن یافتن کلماتی با تلفظ مشابه، حتی اگر املای متفاوتی داشته باشند، است. مراحل اصلی آن عبارتند از:
حفظ حرف اول کلمه (به عنوان حرف شروع کد).
تبدیل حروف باقیمانده به اعداد بر اساس جدول صوتی (مثلاً B, F, P, V به ۱؛ C, G, J, K, Q, S, X, Z به ۲ و غیره).
حذف مصوتها (A, E, I, O, U, Y) و حروف H, W.
حذف اعداد تکراری متوالی.
پر کردن کد تا ۳ رقم با صفر اگر لازم باشد، و محدود کردن به ۴ کاراکتر (حرف + ۳ رقم).
این الگوریتم برای جستجوهای نامهای مشابه با تلفظ متفاوت در پایگاههای داده مفید است، اما محدودیتهایی مانند نادیده گرفتن مصوتها و تمرکز فقط روی انگلیسی دارد.
نمونههای Soundex:
کلمه "Robert" → کد: R163 (حرف اول R، سپس b,r,t به ۱۶۳ تبدیل میشود).
کلمه "Rupert" → کد: R163 (صدای مشابه، کد یکسان).
کلمه "Honeyman" → کد: H555 (h,n,m,n,y به ۵۵۵).
کلمه "Bangalore" → کد: B524.
کلمه "Bengaluru" → کد: B524 (تغییرات آوایی، کد یکسان).
مثال برای خطای آوایی: "speshle" (برای special) → کد: S124، در حالی که "special" → S124 (تطبیق آوایی).
Double Metaphone نسخه پیشرفتهتری از الگوریتم Metaphone است که در سال ۲۰۰۰ توسط لارنس فیلیپس توسعه یافت. این الگوریتم دو کد آوایی (اولیه و ثانویه) تولید میکند تا ابهامات تلفظی را پوشش دهد، به ویژه برای نامهای خانوادگی با ریشههای متنوع (مانند اسلاوی، ژرمنی، سلتیک) و بهبودهایی نسبت به Soundex دارد، مانند:
در نظر گرفتن بیش از ۱۰۰ قاعده برای حروف خاص (مانند C در زمینههای مختلف).
مدیریت حروف غیرلاتین و تلفظهای جایگزین.
تولید کدهای ۴-۶ کاراکتری بر اساس صدای صامتها، با تمرکز روی تلفظ واقعی انگلیسی.
این الگوریتم دقت بالاتری (تا ۹۸٪ در نسخههای جدید) دارد و برای جستجوهای چندزبانه مناسبتر است.
نمونههای Double Metaphone:
کلمه "Smith" → کد اولیه: SM0، کد ثانویه: XMT.
کلمه "Schmidt" → کد اولیه: XMT، کد ثانویه: SMT (کد XMT مشترک، تطبیق آوایی).
کلمه "Robert" → کد اولیه: RPRT، کد ثانویه: (مشابه Soundex اما دقیقتر).
مثال برای خطای آوایی: "speshle" (برای special) → کد اولیه: SPL، کد ثانویه: XPL؛ "special" → کد اولیه: SPL (تطبیق با وجود فاصله ویرایشی بالا).
این الگوریتمها در سیستمهای تصحیح املا، جستجوی پایگاه داده و پردازش زبان طبیعی کاربرد دارند و کمک میکنند تا خطاهای نوشتاری بر اساس صدا جبران شوند.
در زبان پارسی هم حروفی مانند پ و ف در واژگانی مانند «پارسی، پیل» و «فارسی، فیل» بهم تبدیل شدهاند یا حروفی مانند ک و ق در «لاکانی، کیانوری» به «لاقانی، قیانوری» یا پ به چ در واژگانی مانند «پلوکباب» و «چلوکباب» یا حرف د و ت در واژگانی مانند «تیرک» و «دیرک».