ریشه‌یابی واژه‌ها

تغییرات پروژه از تاریخ 1392/12/24 تا حالا
در هر زبان، واژه‌ها با توجه به نقش معنایی و نحوی خود در جلمه به شکل‌های ظاهری متفاوتی حضور می‌یابند، این شکل ظاهری متفاوت از جهتی نشان‌دهنده معنای متفاوت این واژه‌هاست، اما با توجه به این که تمامی آن‌ها از یک ریشه مشتق شده‌اند، از نظر معنا قرابت نسبتا زیادی خواهند داشت. ازهمین رو در بسیاری از کاربردهای پردازش زبان طبیعی و بازیابی اطلاعات، نیاز داریم تا همه مشتقات یک واژه را به ریشه‌ی آن، که همان شکل ساده واژه می‌باشد، تبدیل نماییم. 

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

>• **ریشه یابی کلمات در ماشین های مترجم:** کلمات به همراه اشتقاق های آنها تنوع محسوسی به کلمات می دهند و عملا باعث دشوارتر شدن ساختار های ترجمه جملات می شوند. با استفاده از ریشه یابی کلمات به کاهش پیچیدگی های ترجمه می پردازند.

>• **ریشه یابی کلمات در سیستم های بازیابی اطلاعات:** بازیابی اطلاعات و پردازش متن یکی از کاربردهای رو به رشد دوره اخیر محسوب می گردد. پردازش و دسته بندی اخبار، پردازش نوشته های علمی و کاربردهایی از این دست امروزه کاملا مرسوم است. درسیستمهای بازیابی اطلاعات معمولا یک پایگاه داده بسیار بزرگ وجود دارد که باید پردازش و بازیابی اطلاعات بر روی آنها صورت پذیرد. هر چه شبکه های معنایی استخراج شده از این اطلاعات دقیقتر و گسترده تر باشد، امکان فراهم شدن اطلاعات استخراج شده بیشتر و راحت تر است. یکی از کاربردهای ریشه یابی در امکان فراهم کردن شبکه های معنایی گسترده تر در سیستمهای پردازش متن و بازیابی اطلاعات است.

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


# کارهای مرتبط
سه رهیافت رایج برای ریشه یابی عبارتند از:** رهیافت ساختاری**، **رهیافت جدول مراجعه **و **رهیافت آماری**. 

>• الگوریتمهای مربوط به **رهیافت ساختاری** "مبتنی بر قاعده"، وابسته به تحلیل ساخت واژی زبان میباشند. در این الگوریتمها، با توجه به یک سری قواعد از پیش تعریف شده، به حذف برخی وندها جهت استخراج ریشه پرداخته میشود. الگوریتم پورتر مثالی از این دسته از الگوریتمهاست. این ریشه یاب از 5 مرحله تشکیل شده است. در طی این مراحل قواعدی بر روی کلمه اعمال میشود و بزرگترین پسوند آن حذف میشود.

>• در **رهیافت جدول مراجعه** هر لغت و ریشه مربوط به آن در یک داده ساختار ذخیره شده اند. در نتیجه، ریشه هر لغت ذخیره شده را میتوان یافت. این رهیافت نیاز به فضای حافظه زیادی دارد. همچنین برای هر لغت جدید، جدول بایستی به طور دستی به روز رسانی شود.

>• در **رهیافت آماری**، از میان یک فرایند استنتاج و بر مبنای آماره های یک پیکره متنی، قواعدی با توجه به ساختمان لغت، استخراج میشود. برخی روشهای آماری عبارتند از: تعداد رخداد، N-gram ها، تحلیل پیوند  و مدل مخفی مارکوف. رهیافت آماری به هیچ وجه نیازی به دانش زبانشناسی ندارد و در کل، از ساختار ساخت واژه ی زبان، مستقل است.

با توجه به سه روش اصلی مطرح شده در زمینه ریشه یابی کلمات، الگوریتمهای زیادی جهت ریشه یابی کلمات برای زبانهای مختلف ارائه شده است که اکثر آنها وابسته به زبان هستند و بر اساس ساختار یک زبان خاص مطرح شده اند و متأسفانه قابلیت اجرا بر روی زبانهای دیگر را ندارند. از مهمترین کارهای انجام شده در ریشه یابی زبان فارسی می توان ریشه یاب های " تشکری"، "تقوا" و "فارسی تک" که همگی مبتنی بر روش های ساختاری می باشند و ریشه یاب "محمدی نصیری" که مبتنی بر روش آماری است را نام برد.

 با این وجود برای ریشه یابی در زبان فارسی تلاشهای جدی چندانی نشده است. این در حالی است که در زبان فارسی به علت روشمند بودن اشتقاق کلمات، ریشه یابی از امکان مکانیزه شدن خوبی برخوردار است. روش های مشابه تنها از ساختار های زبانی استفاده کرده اند که در نتیجه نتایج آنها قابل بهتر شدن می باشد. 

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


# آزمایش‌ها

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

## مراجع
+ Manning, Christopher D, Prabhakar Raghavan, and Hinrich Schütze. Introduction to Information Retrieval. New York: Cambridge University Press, 2008. Print.
+ Loponen, Aki, and Kalervo Jarvelin. "A dictionary-and corpus-independent statistical lemmatizer for information retrieval in low resource languages." Multilingual and Multimodal Information Access Evaluation. Springer Berlin Heidelberg, 2010. 3-14.
+   Kazem Taghva, Russell Beckley, Mohammad Sadeh, “A Stemming Algorithm for the Farsi Language”. ITCC (1): 158-
162, 2005.
+ 
Mahyar, and Mojgan Farhoodi. "ParsiPardaz: Persian Language Processing Toolkit." Computer and Knowledge Engineering (ICCKE), 2013 3th International eConference on. IEEE, 2013
+ 
Aleahmad, A., Amiri, H., Oroumchian, F., and Rahgozar, M., 2009. “Hamshahri: A standard Persian text collection”, Knowledge-Based systems,. 
+ 
MohammadiNasiri, M., SheykhEsmaili, K. and Abolhassani, H., 2006. "A Statistical Stemmer for Persian Language”, 11th International CSI Computer Conference, Tehran, Iran, Jan.
+ 
Tashakori, M., Meybodi, M.R and Oroumchian, F., 2003. “Bon: The Persian stemmer”, in Proc. 1st EurAsian Conference. on Information.
+ 
Porter, M.F., 1980. “An algorithm for suffix stripping”, Program, July.
+ 
رضا حسامی فرد، غلامرضا قاسم ثانی "طراحی یک الگوریتم ریشه یابی برای زبان فارسی"، دانشگاه صنعتی شریف،.  بهمن 86.
 
+ 
نوا احسان و هشام فیلی "بررسی تأثیرات ریشه‌یابی در بازیابی اطّلاعات در زبان فارسی"، دانشکدۀ مهندسی برق و کامپیوتر، پردیس دانشکده های فنی، دانشگاه تهران، 1390.

  
    	

# پیوندهای مفید
+ [پردازش زبان فارسی در پایتون](http://www.sobhe.ir/hazm/)
+ [پیکره وابستگی نحوی زبان فارسی](http://dadegan.ir/catalog/perdt)
+ [فارس‌نت (وردنت فارسی)](http://nlp.sbu.ac.ir:8080/farsnet/)
+ [یک نمونه برای زبان فارسی](http://step1.nlplab.sbu.ac.ir/stemmer/)
+ [یادگیری ماشین در پایتون](http://www.scikit-learn.org)
+ [رابط توسعه ویراستیار](http://virastyar.ir/development)
+ [Difference Between Stemming and Lemmatization](http://www.ideaeng.com/stemming-lemmatization-0601)
+ [Miltilingual open-source lemmatizer](http://lemmatise.ijs.si/Software)