نویسه‌گردانی یعنی تبدیل خودکار صورت یک کلمه از زبان مبدا به زبان مقصد، به طوری که تلفظ کلمه حفظ گردد. برای مثال هدف از نویسه‌گردانی تبدیل "salam" به "سلام" می‌باشد.

۱. مقدمه

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

نویسه‌گردانی2 (حرف‌نویسی یا حرف‌نگاری) به معنی نوشتن الفبای یک زبان خاص با الفبای زبانی دیگر (معمولاً لاتین) است به نحوی‌که نوعی تناظر میان حروف عبارت اصلی با عبارت مقصد برقرار باشد. در لغت‌نامه‌ی دهخدا نویسه‌گردانی این‌طور بیان شده است : «عمل تبدیل کردن یک متن از یک آیین نوشتاری به آیینی دیگر به روشی‌ سامانمند را گویند». همچنین فرهنگ لغت آکسفورد transliteration را این‌گونه بیان می‌کند :« نوشتن و یا چاپ (یک حرف یا کلمه) با استفاده از نزدیک‌ترین حرف از القبا یا زبانی دیگر»

۲. کارهای مرتبط

۲.۱. کارهای مشابه

۳. آزمایش‌ها

در این پروژه از روش تبدیل حرف به حرف استفاده شده، اما با بهینه‌سازی‌هایی، مشکلات موجود در این روش تا حدودی برطرف شده که باعث افزایش کارایی این روش می‌شود.

در روش تبدیل حرف به حرف معمولی، هر یک از حروف زبان مبدأ به یک حرف در زبان مقصد نگاشت می‌شود. مشکل این روش سختی کار برای نویسنده است، زیرا کاربران معمولا تمایل ندارند که بر اساس اصول و قواعد خاصی مطالب خود را بنویسد.
برای جلوگیری از مشکلاتی که ممکن بود در روند نویسه گردانی به دلیل یکسان نبودن قواعد پیش بیاید، برای بعضی حروف مانند 'a' یا 'e' و ... ، همه‌ی جایگشت‌های ممکن برای آن حرف بررسی شده و حالات ساخته شده همگی بررسی می‌شوند تا نتایج به نتایج واقعی نزدیک‌تر باشد.

پس از نویسه‌گردانی، لغات ایجاد شده با پیکره لغات (در این‌جا پیکره همشهری که لغات آن استخراج شده و بر اساس حروف الفبا جداسازی شده‌اند) مقایسه می‌شود. اگر لغت یا لغاتی در مجموعه‌ی مذکور موجود باشد، ابتدا آن لغات پیشنهاد داده می‌شود و در صورت تایید کاربر، کلمه‌ی انگلیسی همراه با معادل فارسی در پایگاه داده ذخیره می‌شود تا در فراخوانی بعدی ابتدا از پایگاه داده‌ی ساخته شده استفاده شود و در صورت نبودن کلمه، روند نویسه‌گردانی طی شود. طی این روند نیز ابتدا لغات موجود در پیکره و در صورت نبودن لغت مدنظر در پیکره (مانند عباران محاوره‌ای)، سایر جایگشت های ممکن به کاربر نمایش داده می‌شود تا کاربر از بین آن‌ها، لغت مربوطه را انتخاب کند. در صورت نبودن لغت در آن لیست، امکان وارد کردن لغت جدید توسط کاربر وجود دارد.

با توجه به حجم زیاد لغات پیکره همشهری(570 هزار لغت) و با توجه به اینکه برای هر لغت ممکن است چند بار به پایگاه‌داده مراجعه شود، کلمات بر اساس حروف الفبا مرتب شده و لغاتی که با حرف یکسانی آغاز می‌شوند در یک جدول از پایگاه داده قرار گرفته اند. به این ترتیب سرعت دسترسی به اطلاعات به نسبت بسیار زیادی افزایش پیدا کرده و زمان اجرای برنامه کاهش می‌یابد.

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

بر اساس نمونه‌های تست شده که از مکالمات روزمره نیز گرفته شده بود و دارای تعداد زیادی عبارت محاوره‌ای بود، سرعت در بیش از 95 درصد موارد لغت مربوطه توسط برنامه شناسایی شد. با وجود اینکه در بعضی موارد خلاصه‎نویسی در محاورات روزمره هم دیده می‌شد. لازم به ذکر است برنامه در نویسه گردانی کلماتی که به زبان انگلیسی هستند دچار مشکل شده و نمیتواند آن‌ها را به درستی به معادل فارسی تبدیل کند که یکی از دلایل آن، تفاوت در قواعد این دو زبان است. به عنوان مثال کلمه‌ی 'File' به 'فیل' تبدیل می‌شود که البته پس از یک‌بار وارد کردن نمونه‌ی صحیح توسط کاربر، در دفعات بعدی درست تشخیص داده می‌شود.

در صورت وارد کردن عبارات رسمی و بدون غلط‌های املایی، برنامه بدون مشکل عمل کرده و با دقت بسیار بالایی، در پیشنهاد‌های اول، لغات مربوطه را تشخیص می‌دهد:

نمونه‌ی ورودی

نمونه‌ی خروجی

مشاهده می‌شود که همه‌ی لغات درست تشخیص داده شده‌اند. تنها ایراد موجود برای "لغات" بود که در ورودی 'loqa' نوشته شد و برنامه هم آن‌را به 'لغا' تبدیل کرد. همچنین برای لغت 'وسیعی' که به صورت 'vasiei' نوشته شده بود، کلمات زیر حدس زده شد که پس از تصحیح توسط کاربر، در دفعات بعدی لغت مربوطه درست تشخیص داده می‌شود.

نحوه‌ی پیش‌بینی لغاتی که آن‌ها را نمی‌شناسد

در نمونه‌ی فوق، عبارت 'وسیعی' و عبارات 'ی' به درستی تشخیص داده نشدند. همچنین برنامه نتوانست ایراد املایی موجود در 'loqa' را تشخیص دهد. با توجه به رسمی بودن متن، سایر عبارات در پیش‌بینی هی اول (5 پیش‌بینی اول) شناسایی شدند که عملکرد رضایت‌بخش برنامه را نشان می‌دهد. اگر دقت را نسبت کلمات صحیح به کل کلمات در نظر بگیریم، خواهیم داشت:

تعداد کلمات صحیح تعداد کل کلمات دقت
66 71 92.9

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

۴. کارهای آینده

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

۵. مراجع

[1] Sarvnaz Karimi, Falk Scholer, and Andrew Turpin. "Machine transliteration survey." ACM Computing Surveys (CSUR) 43.3 (2011): 17.
[2] Sarvnaz Karimi, Andrew Turpin, and Falk Scholer. "English to Persian Transliteration." School of Computer Science and Information Technology RMIT University.
[3] Jong-Hoon Oh, Key-Sun Choi, and Hitoshi Isahara. "A Comparison of Di®erent Machine Transliteration Models." Journal of Articial Intelligence Research 27 (2006) 119–151.
[4] Najmeh Mousavi Nejad, Shahram Khadivi, Kaveh Taghipour. "The Amirkabir Machine Transliteration System for NEWS 2011: Farsi-to-English Task." Proceedings of the 2011 Named Entities Workshop, IJCNLP (2011), 91–95.

پیوندهای مفید


  1. Short Message Service (SMS)

  2. Transliteration

تایید شده

سلام، چندتا نکته به ذهنم رسید که اینا هستند:

  • جا داشت تحقیق می‌کردید و الگوریتم‌ها و راهبرد‌های مختلف واسه این کار را می‌دیدید.

  • ایجاد جدول‌های مجزا باعث دشواری پیاده‌سازی شده که به نظرم راه‌حل‌های بهتری وجود دارد.

  • به نظر من یکی از نقاط قوت پروژتون استفاده از پایگاه داده و ذخیره نتایج صحیح هست.

  • برای برطرف کردن مشکل وارد کردن لغات نادرست توسط کاربر به نظرم کتابخانه‌هایی هستند که بر اساس لغات موجود در پایگاه داده شبیه‌ترین لغت رو پیدا کنند.

  • برای فاز بعدی به نظرم بهتره آزمایش‌های بیشتری هم انجام بدهید.

رد شده

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

تایید شده

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

تایید شده

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

محسن ایمانی

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