نویسه‌گردانی انگلیسی به فارسی

تغییرات پروژه از تاریخ 1394/08/30 تا تاریخ 1394/10/05
نویسه‌گردانی یعنی تبدیل خودکار صورت یک کلمه از زبان مبدا به زبان   مقصد، به طوری که تلفظ کلمه حفظ گردد. برای مثال هدف از نویسه‌گردانی تبدیل "salam" به "سلام" می‌باشد. 

# مقدمه
در اینترنت، در پاسپورت، در مکاتبات بین‌المللی، در مسابقات ورزشی و  فرم‌ها و . . .  ناگزیر هستیم تا نام خود را با حروف انگلیسی بنویسیم. همچنین بعضی افراد در ارسال پیامک[^Short Message Service (SMS)] کلمات فارسی را با حروف انگلیسی می‌نویسند. همواره  نمایش شکل نوشتاری و تلفظی نام‌های خاص جغرافیایی و اشخاص و اصطلاحات  فرهنگی فارسی در متن‌های غیرفارسی و به ویژه اروپایی مشکل و نابسامان بوده  است. تنها نگاهی به چند دایرة‌المعارف مانند ایرانیکا، اسلام، بریتانیکا و  یا برخی از کتاب‌های تاریخ، تاریخ ادبیات و مانند این‌ها نشان می‌دهد که چه  شیوه‌های متفاوتی وجود دارد. اغلب آن‌ها آمیزه‌ی نامشخصی از نویسه‌گردانی و  آوانویسی و نماینده‌ی مخلوطی از گونه‌های کهن و امروزی فارسی و حتی عربی  هستند. در زمینه‌ی کتابداری و اطلاع‌رسانی که نام‌ها، عنوان‌ها و کلیدواژه‌ ها در مرتب‌سازی، جستجو و بازیابی اطلاعات نقش اساسی دارند، مسئله جدی‌تر  می‌شود و هنگامی که صحبت از رایانه و خودکارسازی این فعالیت‌ها به میان می‌آید، این ناهماهنگی‌ها کار را ناممکن می‌سازد.

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


# کارهای مرتبط

## کارهای مشابه
 

+ [بهنویس] 
+ [اسم نویسه‌گردان] 
+ [نویسه‌گردان گوگل]
+ [سیاوش محمودیان - مترجم پینگلیش (فینگلیش) به فارسی]


# آزمایش‌ها

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

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

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

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

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

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

در صورت وارد کردن عبارات رسمی و بدون غلط‌های املایی، برنامه بدون مشکل عمل کرده و با دقت بسیار بالایی، در پیشنهاد‌های اول، لغات مربوطه را تشخیص می‌دهد:
![نمونه‌ی ورودی](http://uupload.ir/files/2u4u_test2.png)
![نمونه‌ی خروجی](http://uupload.ir/files/xkyi_test.png)

مشاهده می‌شود که همه‌ی لغات درست تشخیص داده شده‌اند. تنها ایراد موجود برای "لغات" بود که در ورودی 'loqa' نوشته شد و برنامه هم آن‌را به 'لغا' تبدیل کرد. همچنین برای لغت 'وسیعی' که به صورت 'vasiei' نوشته شده بود، کلمات زیر حدس زده شد که پس از تصحیح توسط کاربر، در دفعات بعدی لغت مربوطه درست تشخیص داده می‌شود.
![نحوه‌ی پیش‌بینی لغاتی که آن‌ها را نمی‌شناسد](http://uupload.ir/files/mi0h_test3.png)

در نمونه‌ی فوق، عبارت 'وسیعی'  و عبارات 'ی' به درستی تشخیص داده نشدند. همچنین برنامه نتوانست ایراد املایی موجود در '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.


**پیوندهای مفید** 
+ [پردازش زبان فارسی در پایتون](http://www.sobhe.ir/hazm) 
+ [پیکره فارسی همشهری](http://ece.ut.ac.ir/dbrg/hamshahri/fadownload.html) 

 [فرهنگ لغت آکسفورد]: http://www.oxforddictionaries.com
 [بهنویس]: http://www.behnevis.com
 [اسم نویسه‌گردان]: http://www.esmnevisegardan.ir
 [نویسه‌گردان گوگل]: http://www.google.com/intl/fa/inputtools/try
[سیاوش محمودیان - مترجم پینگلیش (فینگلیش) به فارسی]: http://syavash.com/portal/pinglish2farsi/convertor-fa
 
 [گیت‌هاب]:https://github.com/rkarami/Transliteration