http://imuhammad.ir علاقه مند به Data Science و Machine Learning
چند درصد از شاهنامه فردوسی عربی است؟
چند وقت پیش و به جهت سرگرمی با دیتاستی از اسامی محبوب فارسی سر و کله می زدم و اسامی داخل آن را با متن شاهنامه تطبیق می دادم تا ببینم کدام یک از اسامی محبوب فعلی ما ایرانی ها از شخصیت های شاهنامه برگرفته شده اند. بعد از یک بررسی اولیه، یک نکته جالب توجه من را جلب کرد: تعداد قابل توجهی از اسامی تطبیق پیدا کرده اسامی با ریشه عربی مثل حمزه، محمد و ... بودند! همین مساله باعث شد که ناخودآگاه ذهن من به سمت دوگانه زبانی عربی-پارسی که سال ها ذهنم را مشغول کرده برود.
احتمالا شما هم مثل من حداقل یک بار داستان افرادی که از کلمات با ریشه عربی استفاده نمی کنند یا یا اساتید ادبیاتی که دانش آموزان و دانشجویان خودشان را مجبور به عدم استفاده از کلمات عربی می کنند را شنیده اید یا با آن ها برخورد داشته اید. مدت ها پیش یکی از دوستانم برای من تعریف کرد که یکی از اساتید ادبیات یکی از دانشگاه های تهران هر دانشجویی که یک کلمه با ریشه عربی را در کلاس یا برگه امتحانی خودش به کار می برد را به شدت مجازات می کرد (تعیین صحت یاد عدم صحت داستان برای من مشخص نیست!). با تمام احترام به نظرات همه افراد، من این نوع رفتار را بیشتر مبتنی بر انگیزه های نژادپرستانه و نه لزوما مبتنی بر حفظ و صیانت از زبان کشورمان می دانم، چون هم زبان فارسی و هم زبان عربی در طول زمان با هم به صورت قابل توجهی آمیخته شده اند و به غنی تر شدن یکدیگر کمک کرده اند. همین موضوع باعث شد که یک تحلیل انجام بدهم و ببینم که چه مقدار در شاهکارهای شعر فارسی ما و بزرگان ادبیات ما که به آن ها افتخار می کنیم از کلمات عربی بهره برده شده است و آیا اصلا امکان حذف آثار زبان عربی از فارسی امکان پذیر است یا خیر.
طبیعتا راه اصلی برای این که به این سوال پاسخ بدهیم این است که یه صورت جداگانه عربی یا فارسی بودن هر کدام از کلمات در این آثار ادبی را تعیین کنیم، تعداد کلمات با ریشه فارسی و کلمات با ریشه عربی را بشمریم و نسبت آن ها به هم را محاسبه کنیم. همانطور که انتظار دارید انجام دادن این کار به صورت دستی برای تنها یک اثر ادبی بسیار طاقت فرساست چه برسد به کل آثار ادبی موجود. برای همین من تصمیم گرفتم که از این فرآیند را به صورت هوشمندتری و با استفاده از روش های مبتنی علم داده ها (Data Science) انجام بدهم و به جای شمارش دستی، با استفاده از زبان های برنامه نویسی و ابزارهای پردازش زبان طبیعی ریشه هر کدام از کلمات را بررسی کنم.
برای تخمین درصد کلمات عربی از دیتاست اشعار سایت گنجور که به صورت عمومی در این آدرس قابل دسترسی است استفاده کردم. در این دیتاست آثار معروف ترین شاعران و سخن وران فارسی متعلق به سبک های مختلفی مثل شعر نو، سبک خراسانی و ... ذخیره شده اند. اما پیش از این که از این دیتاست استفاده کنم باید یک راه حل برای تمایز کلمات عربی و فارسی پیدا می کردم. ایده آل ترین حالت برای این کار این بود که یک دیتاست «کامل» از کلمات عربی که در زبان (شعر) فارسی به کار برده می شوند (یا برعکس و یک دیتاست از کلمات فارسی) را در اختیار داشته باشیم، آن ها را با متن آثار ادبی مقایسه کنیم و تعداد کلمات عربی در آن متن را بشماریم. با این حال متاسفانه من موفق به پیدا کردن هیچ دیتاستی از کلمات با ریشه های عربی نشدم و این یعنی باید از روش های دیگری برای تخمین درصد کلمات عربی استفاده کنیم.
بعد از کلی سر و کله زدن با انواع روش های مختلف من دو روش جایگزین دیگر که کمی هم دارای خطا هستند را برای این کار انتخاب کردم.
1. در روش اول من از مجموعه ای از قواعد عمومی که برای تشخیص کلمات عربی و فارسی از یکدیگر وجود دارند و احتمالا شما هم از برخی از آن ها اطلاع دارید استفاده کردم. در زبان نوشتاری عربی حرف ها «پ»، «چ»، «گ» و «ژ» وجود ندارد. یعنی هر کلمه ای که در آثار ادبی فارسی پیدا می کنیم که دارای یکی از این حروف باشد قطعا غیرعربی است. به صورت بر عکس اصالتا در زبان نوشتاری فارسی حروف «ص»، «ث»، «ظ»، «ط»، «ح»، «ذ»، «ق» و «ض» وجود نداشته اند و هر کلمه ای که در آن ها یکی از حروف به کار رفته باشد عربی ( غیرفارسی) است (طبیعتا استثنائاتی هم وجود دارد مثل کیقباد).
2. با این که قواعد کلی بالا مفید هستند ولی همه موارد را پوشش نمی دهند. به طور مثال، کلماتی مثل «غرب» یا «کتاب» کلماتی با ریشه عربی هستند که توسط این قواعد شناسایی نمی شوند. به همین دلیل، پس از کلی جستجو و بررسی روش های مختلف، به این نتیجه رسیدم که استفاده از کتابخانه تشخیص زبان گوگل بهترین گزینه به نظر می آید. خروجی این کتابخانه به صورت صددرصد قابل اطمینان نیست اما با تقریب خوبی جواب قابل قبولی به ما می دهد.
هر دو این روش ها دارای خطا در تشخیص زبان کلمات هستند و برای همین علاوه بر آن ها، استفاده از روش های دیگری هم به ذهنم رسید که با دلایل مختلفی از پیاده سازی آن ها منصرف شدم. به طور مثال، احتمالا می دانید که اکثر کلمات عربی از سه حرف اصلی تشکیل می شوند مثل «حاکم» که از سه حرف ح.ک.م تشکیل می شود. یکی از روش هایی که به ذهن من رسیده بود که از یک دیتاست از حروف اصلی تشکیل دهنده کلمات عربی استفاده و آن را با کلمات آثار ادبی مقایسه کنم. با این حال، این روش هم از نظر محاسباتی و هم از نظر صحت ایرادات جدی داشت و از آن صرفه نظر کردم.
نتیجه تشخیص زبان آثار هر کدام از مشاهیر در نمودار زیر قابل دیدن هست. همانطور که می دانید شعر فارسی به چند دوره و سبک زمانی مختلف تقسیم بندی می شود: دوره سبک خراسانی، دوره سبک عراقی، دوره سبک هندی و دوران معاصر. در این نمودار هم شعرا بر اساس قرن فعالیت شان به هر کدام از این دوره ها تخصیص داده شده اند.
همانطور که مشاهده می کنید حکیم ابوالقاسم فردوسی کمترین درصد از کلمات عربی در آثار خود به کار برده است اما با این حال حتی وی هم برای غنی تر شدن شاهنامه از کلمات عربی استفاده کرده است. تقریبا نیمی از اشعار حافظ و سعدی و مولوی از کلمات با ریشه عربی تشکیل شده اند. با این حال شعرای معاصر و شعر نو از نسبت کلمات عربی کمتری در اشعار خود استفاده کرده اند.
نمودار زیر هم یک تصویر کلی تر از درصد کلمات عربی و فارسی در آثار بعضی از این مشاهیر ادبیات فارسی را نشان می دهد. در این نمودار هر مستطیل کوچک یک کلمه است و رنگ آن متناظر با زبان تشخیص داده شده آن است. برای ساختن نمودار زیر از یک نمونه تصادفی از کلمات به کار رفته در آثار هر کدام از این شعرا استفاده کرده ام.
باید مجدد ذکر کنم که این تحلیل یک «تخمین» از نسبت کلمات عربی و فارسی به کار رفته در ادبیات فارسی است و این اعداد به صورت صددرصد دقیق نیستند چون هم کلمات عربی به صورت فارسی تشخیص داده شده اند و هم کلمات فارسی به صورت عربی تشخیص داده شده اند. به طور مثال، به ابرکلمات (wordcloud) زیر از اشعار حافظ و فردوسی دقت کنید.
کمی جزئیات فنی تر
به صورت کلی فرآیندی که برای آماده سازی این پست طی کردم را می توانم به سه قسمت تقسیم کنم:
1. آماده سازی و پیش پردازش داده ها
2. تشخیص زبان کلمات
3. مصورسازی نتایج
پیاده سازی دو قسمت اول را به وسیله زبان برنامه نویسی پایتون و پیاده سازی قسمت سوم را با Rانجام دادم.
پیش از تعیین قواعد و مشخص کردن روش تشخیص زبان کلمات ، در مرحله اول اصلی ترین کار آماده سازی داده های متنی و پیش پردازش متن بود. اصلی عملیات این بخش، تشکیل توکن (کلمات) و حذف کلمات زائد (stop word) ها از متن بود. این کار با توجه به ذات متفاوت شعر از متن های امروزی فارسی کمی دشوار بود. اکثر دیتاست های حاوی کلمات زائد مناسب متن های استاندارد فارسی و امروزی هستند و از تشخیص کلمات زائد درون اشعار عاجز هستند. به عنوان مثال، یک کلمه زائد رایج در زبان رایج ما کلمه «دیگر» است ولی در اشعار فارسی معمولا از کلمه «دگر» مانند برو این دام بر مرغ دگر نه به عنوان معادل «دیگر» استفاده می کنیم. خروجی این بخش یک دیتافریم بود که هر سطر آن را یک کلمه و شاعری که از آن کلمه استفاده کرده بود تشکیل می داد.
بعد از این مراحل نوبت به پیاده سازی رویکرد تشخیص زبان بر روی تک تک کلمات دیتافریم بود. برای این کار ابتدا من بررسی می کردم که آیا کلمات از قواعدی که در بالا ذکر کرده بوده ام پیروی می کند یا خیر. در صورت عدم پیروی ( مثلا کلمه ای مثل غیب) زبان آن کلمه توسط کتابخانه langdetect بررسی می شد. نکته جالب این بود که این کتابخانه برخی از کلمات مانند پیر را به عنوان کلمات زبان اردو تشخیص می داد که با توجه به مواردی که که من دیدم تصمیم گرفتم که این کلمات را به دسته کلمات فارسی اختصاص بدهم.
در نهایت مصورسازی داده ها به وسیله R و به طور خاص توسط کتابخانه های ggplot، ggpage و wordcloud انجام شد. کدهای مربوط به این تحلیل در گیت هاب قابل دسترسی هستند.
مطلبی دیگر از این انتشارات
شبکههای عصبی مصنوعی
مطلبی دیگر از این انتشارات
هش (Hash) در بلاک چین چیست؟
مطلبی دیگر از این انتشارات
آئودی A8 مدل 2019 سدان لوکس آلمانی