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

تغییرات پروژه از تاریخ 1394/10/05 تا تاریخ 1394/11/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 |

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

# کارهای آینده

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

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

# کارهای مرتبط
## انواع روش‌های نویسه‌گردانی
به طور کلی، نویسه‌گردانی به چهار روش عمده انجام می‌شود: [3]
### نویسه‌گردانی بر اساس حرف [^Grapheme-based Transliteration] 
در حقیقت، این روش همان نگاشت املایی مستقیم[^Direct Orthographic Mapping] از زبان مبدأ به زبان مقصد است. روش‌های نویسه‌گردانی متعددی از این روش مشتق شده‌اند که از آن‌ها می‌توان به روش‌های بر اساس درخت تصمیم‌گیری[^Decision Tree] و شبکه‌ی نویسه‌گردانی[^Transliteration Network] اشاره کرد.
در این روش، کلیه‌ی حالات نگاشت حروف از زبان مبدأ به زبان مقصد در هر مرحله تولید شده و در نهایت بر اساس لغات ایجاد شده، محتمل‎ترین لغت جهت جایگزینی انتخاب می‌شود.
این روش برای ورودی‌های بدون خطا و با داشتن نگاشتی صحیح، به درستی عمل می‌کند، اما در صورت بروز خطا در سیستم نویسه گردانی و یا وجود ابهام، قادر به تشخیص لغت صحیح نیست.

###نویسه‌گردانی بر اساس واج[^Phoneme-based Transliteration]
در نگاشت واجی به جای حروف، واج‌ها بنیان اصلی نویسه‌گردانی را تشکیل می‌دهند. این روش در حقیقت تبدیل حروف به واج و سپس تبدیل واج به حروف است. در این روش از یک واسط برای نگاشت‌ها استفاده می‌شود. یکی از پرکاربردترین روش‌ها استفاده از روش مارکوف[^Extended Markov Window] است. بر این اساس، لغت مبدأ ابتدا به تلفظ[^Pronunciation] صحیح از آن زبان تدیل می‌شود. سپس واج‌های زبان مبدأ به تکه[^Chunk]هایی تبدیل می‌شود سپس این تکه‌ها با استفاده از روش مارکوف به حروف زبان مقصد نگاشت می‌شوند.

### نویسه‌گردانی بر اساس روش‌های ترکیبی و بر اساس مکاتبات[^Hybrid and Correspondence-based Transliteration]
استفاده از حروف و واج‌های زبان مبدأ، اساس استفاده از روش‌های ترکیبی و استفاده از مکاتبات است. در این روش‌ها از ارتباط حرف و واج زبان مبدأ برای ایجاد حرفی در زبان مقصد استفاده می‌شود. این روش‌ها با استفاده از الحاق خطی[^Linear Interpolation]، واج و حرف نویسه‌ی اصلی را در هم می‌آمیزند[^Combine].
در این روش‌ها همچنین می‌توان از یک پیکره[^Corpus] جهت تبدیل لغات استفاده کرد.

در این پروژه از روش تلفیقی با استفاده از پیکره برای نویسه‌گردانی استفاده شده، پس این روش را به تفصیل توضیح می‌دهیم. اصول و قواعد نگاشت کلمات با استفاده از این روش به شرح زیر است.
+ بسیاری از حروف انگلیسی دارای معادلی در زبان انگلیسی هستند، به عنوان مثال 'b' به 'ب'، 'd' به 'د'، 'k' به 'ک' و ... تبدیل می‌شوند.
+ بعضی حروف انگلیسی در زبان فارسی چند نگاشت دارند، مانند 's' که به 'س'، 'ث' و 'ص' نگاشت می‌شود و ...
+ بعضی از حروف انگلیسی هم به حرفی در زبان فارسی و هم به یک مصوت نگاشت می‌شوند، مانند 'o' که به 'و' و ' ُ ' نگاشت می‌شود و ...
+  پس از تکمیل فرآیند نگاشت، لغات نویسه‌گردانی شده با پیکره‌ی لغات مقایسه می‌شوند و محتمل‌ترین لغت به عنوان حاصل نویسه‌گردانی انتخاب می‌شود.

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

+ [بهنویس]
   یک ویرایشگر[^Editor] مبدل پینگلیش به فارسی است ه با اهداف تجاری ساخته شده و از روش نگاشت حروف و همین‌طور ذخیره‌ی نتایج نویسه‌گردانی جهت بهبود نتایج استفاده می‌کند. جهت مشاهده‌ی روش کار این سیستم و راهنمایی‌های لازم میتوانید به [آدرس] مربوطه مراجعه کنید.
+ [نویسه‌گردان گوگل]
   یک سیستم نویسه‌گردان چندزبانه است، متاسفانه توضیحاتی در رابطه با نحوه‌ی عملکرد این سیستم در دسترس نیست.
+ [اسم نویسه‌گردان] 
   یک سیستم نویسه‌گردان با هدف تبدیل اسامی است که از روش نگاشت حروف استفاده می‌کند.
+ [سیاوش محمودیان - مترجم پینگلیش (فینگلیش) به فارسی]
   متاسفانه توضیحاتی در رابطه با عملکرد این سیستم در دسترس نیست. این سیستم در فاز آزمایشی قرار دارد.
   


# آزمایش‌ها

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

در روش تبدیل حرف به حرف معمولی، هر یک از حروف زبان مبدأ به یک حرف در زبان مقصد نگاشت می‌شود. مشکل این روش سختی کار برای نویسنده است، زیرا کاربران معمولا تمایل ندارند که بر اساس اصول و قواعد خاصی مطالب خود را بنویسد.
برای جلوگیری از مشکلاتی که ممکن بود در روند نویسه گردانی به دلیل یکسان نبودن قواعد پیش بیاید، برای بعضی حروف مانند '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 پیش‌بینی اول) شناسایی شدند که عملکرد رضایت‌بخش برنامه را نشان می‌دهد. اگر 	دقت را نسبت کلمات صحیح به کل کلمات در نظر بگیریم، خواهیم داشت:

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


** به دلیل تغییر در پیاده‌سازی و نحوه‌ی نمایش خروجی برنامه، نحوه‌ی اندازه گیری دقت نرم‌افزار نیز تغییر کرده است. به این ترتیب، دقت برنامه بر اساس میزان دقت در تشخیص لغت صحیح از بین n لغت پیشنهادی تعیین می‌شود که آن را دقت(n) می‌نامیم. همچنین عبارت تعداد (n) به معنای مجموع تعداد لغات پیش‌بینی شده برای حالتی است که امان نمایش n لغت وجود دارد. به عنوان مثال اگر برای ورودی 8 عدد، تعداد (2) برابر با 10 باشد، یعنی برنامه برای تبدیل هر لغت اجازه‌ی پیش‌بینی 2 لغت را داشته، اما در مجموع فقط ده لغت برگردانده که خروجی صحیح شامل آن‌ها است.**

|تعداد کل لغات ورودی|دقت(1)|تعداد(2)|دقت(2)|تعداد(5)|دقت(5)|تعداد(10)|دقت(10)|
|:-----------------:|:----:|:------:|:----:|:------:|:----:|:-------:|:-----:|
|     70            | 71.4 |   111  | 81.4 |  156   |  88  |   193   |94.2   |
|     70            |  80  |   111  | 91.4 |  156   |  94.2|   193   |  94.2 |

در این روش، پیش‌بینی لغاتی مانند "obama" ، "kangavari" ، "riakar" ، و "foqolade" حتی با n=10 نیز میسر نشد. اما لغاتی مانند "no avari" ، "quri" و... برای n=2 و n=5 به نتیجه‌ی صحیح رسیدیم.

## آزمایش 2 - برچسب‌گذاری تعداد تکرار لغات در پیکره
در این آزمایش، تعداد هر لغت به عنوان برچسبی به پایگاه داده اضافه شده؛ همین‌طور پیکره‌ی irBlogs m ([پیکره وبلاگ‌ها]) به مجموعه‌ی پیکره‌های برنامه اضافه شد.
در صورت یافتن چند حالت نگاشت برای یک لغتی، لغتی که در پیکره به دفعات بیشتری تکرار شده باشد به عنوان نتیجه برگردانده می‌شود.
نتایج این آزمایش به شرح زیر است.

|تعداد کل لغات ورودی|دقت(1)|تعداد(2)|دقت(2)|تعداد(5)|دقت(5)|تعداد(10)|دقت(10)|
|:-----------------:|:----:|:------:|:----:|:------:|:----:|:-------:|:-----:|
|     70            |  80  |   111  | 91.4 |  156   |  94.2|   193   |  94.2 |

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

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

## آزمایش 4 - بررسی لغات مبهم
در سیستم فعلی، همواره لغاتی وجود دارد که یا توسط سیستم نگاشت صحیحی برای آن‌ها یافت نمی‌شود. دلیل این امر می‌تواند ضعف سیستم نویسه‌گردان در تشخیص لغت و در مواردی نگاشت‌های نادرست و یا ضعف پایگاه داده و نیز خطای کاربر باشد.
برای رفع مشکل خطاهای کاربر و نیز اشکال در نویسه‌گردانی، میتوان با استفاده از الگوریتم‌هایی، لغات مشابه با لغت نویسه‌گردانی شده را از پایگاه داده استخراج کرد و با بررسی احتمال رخ دادن هریک از لغات، لغت با بیشترین احتمال تکرار را به عنوان خروجی نمایش داد.
لازم به ذکر است در این روش احتمال رخ دادن هر لغت برابر با تعداد تکرار لغت در پیکره‌ی مربوطه است.
با انجام آزمایش فوق، لغات 'obama' و "etebar" به درستی نویسه‌گردانی شدند که در روش‌های قبلی با اشکال مواجه شده بودند.

|تعداد کل لغات ورودی|دقت(1)|تعداد(2)|دقت(2)|تعداد(5)|دقت(5)|تعداد(10)|دقت(10)|
|:-----------------:|:----:|:------:|:----:|:------:|:----:|:-------:|:-----:|
|     70            | 81.4 |   111  |92.8  |  156   |95.7  |   193   |  95.7 |

## آزمایش 5 - بررسی احتمال وقوع هر واج
با بررسی پیکره، می‌توان احتمال وقوع هر حرف را پیدا کرد. با فرض این‌که احتمال هر لغت برابر با حاصل‌ضرب احتمال هر یک از حروف آن است، می‌توان در هر مرحله تعدادی از لغاتی که احتمال آن‌ها مقدار بسیار کمی شده را حذف کرد، به این ترتیب طول لیست پیش‌بینی کاهش یافته و سرعت نرم‌افزار افزایش می‌یابد.
**این روش تاثیری در دقت پیش‌بینی‌ها نداشته و صرفا موجب بهبود سرعت برنامه می‌شود.**

**همچنین با استفاده از نرمال‌سازی پیکره توسط نرم‌افزار [هضم] می‌توان از اشکالات احتمالی نویسه‌گردانی جلوگیری کرد.**

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

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

# کارهای آینده

+ میتوان با استفاده از نرم‌افزار [هضم] و عملیات ریشه‌یابی[^Stemming] ، ریشه‌ی لغات را استخراج کرد. به این ترتیب با داشتن پایگاه داده‌ای کوچکتر و با دقت بیش‌تری می‌توان لغات را پیش‌بینی کرد. به عنوان مثال احتمال داشت لغت "kangavari" که به دلیل موجود نبودن در پیکره قادر به یافتن نگاشت صحیح آن نبودیم با تبدیل به "کنگاور" + "ی" به نتیجه‌ی مطلوب دست یابیم.
+ میتوان از [فهرست واژگان فارسی] استفاده کرد، به این ترتیب سیستم قادر به نگاشت همه‌ی لغات خواهد بود، اما باید روش پیش‌بینی را تغییر داد.
+ با استفاده از جدول درهم‌سازی[^Hash Table] برای نگه‌داری پیکره می‌توان سرعت و دقت و کارایی سیستم نویسه‎‌گردان را افزایش داد.
# مراجع

[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://ece.ut.ac.ir/dbrg/irblogs/index.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 
[گیت‌هاب]:https://github.com/rkarami/Transliteration
[لغت‌نامه‌ی دهخدا]:http://parsi.wiki
[آدرس]:http://behnevis.com/help.html
[هضم]:http://www.sobhe.ir/hazm/
[فهرست واژگان فارسی]:https://github.com/reza1615/Persian-Spell-checker