یک زبان برنامهنویسی برای استخراج اطلاعات از قرآن
نکته: این مطلب به مرور زمان ویرایش و بروزرسانی خواهد شد تا نهایتا به یک ایده و دید کلی برسیم(یا برسم).
هر چقدر بیشتر در قرآن پژوهش میکنم، بیشتر به یک راه حل خودکار و ساده برای دریافت اطلاعات از قرآن احساس نیاز میکنم. از آنجا که خود یک برنامهنویس هستم، به راه حلهایی علاقه دارم که از تکنولوژی استفاده میکنند. برنامهنویسها عاشق خودکار و مکانیزه کردن هستند. اینجا من به دنبال راه حلی برای مکانیزه کردن استخراج اطلاعات از قرآن با استفاده از یک زبان برنامهنویسی مخصوص برای این کار هستم.
چیزی که در ذهن دارم، این هست که این زبان باید استفاده ساده باشد، یادگیری آن نیز برای همگان از جمله غیر برنامهنویسها سریع باشد. من میخواهم از زبان برنامهنویسی لیسپ الهام بگیرم. زبان یک هستهٔ کوچک خواهد داشت. و بنا به نیاز میتوان با استفاده از همان هستهٔ کوچک، زبان را توسعه داد و ویژگیهای جدید به آن اضافه کرد. این ویژگی، و ویژگی لیسپ که «همه چیز عبارت است» باعث میشود نوشتن کامپایلر یا مفسر برای زبان ساده باشد.
یک ویژگی مهم دیگر که نیاز داریم، ترجمهٔ واژههای کلیدی خود زبان به زبانهای دیگر از جمله فارسی و عربی است. نیازی نیست مردم انگلیسی بدانند تا بتوانند از این زبان برنامهنویسی استفاده کنند. البته این خود ایدهٔ جدیدی نیست. اما تا آنجا که من خبر دارم، این ایده برای مدتها کنار گذاشته شده است. و جز در پروژههایی که برای سرگرمی هستند، ندیدهام کسی یک زبان برنامهنویسی به زبانی جز انگلیسی اختراع کند.
قبل از این که به سمت طراحی این نسخهٔ خاص از لیسپ برویم، باید به یک پرسش مهم پاسخ دهیم. دقیقا چه اطلاعاتی را نیاز داریم از قرآن استخراج کنیم؟ اینجا من یک فهرست مینویسم. سپس بنا به نیاز و البته با مشورت کردن با دیگر پژوهشگرها، مواردی را به این فهرست کم و زیاد خواهم کرد.
اطلاعاتی که از قرآن نیاز داریم استخراج کنیم، موارد زیر هستند:
- پیدا کردن تمام واژهها از یک ریشهٔ خاص
- پیدا کردن تمام واژهها از یک باب و ریشهٔ خاص
- فیلتر کردن واژههای پیدا شده بر اساس نوع آنها(مانند فعل)
- پیدا کردن معمول، عامل، انجام دهنده(فاعل) و انجام شونده(مفعول) فعلهای مختلف که پیدا میشوند.
- پیدا کردن تمام واژهها از یک سه حرفی خاص بدون در نظر گرفتن ترتیب(مثلا صلو، وصل، ولص برای سه حرفی صاد، لام و واو)
مثلا میتوانیم چنین کدی را در نظر بگیریم:
(قرار-جهانی فهرست-سهگانهها (فهرست «صلو» «ولص» «وصل» «صلی»))
(قرار-جهانی فهرست-فعلها (فهرست))
(بهازایهر ث در فهرست-سهگانهها
(برنامه
(اضافهبه فهرست-فعلها (فعل-سوم-شخص-مفرد ث))
(اضافهبه فهرست-فعلها (فعل-سوم-شخص-جمع ث))
(اضافهبه فهرست-فعلها (فعل-دوم-شخص-مفرد ث))
(اضافهبه فهرست-فعلها (فعل-دوم-شخص-جمع ث)))
(بهازایهر فعل۱ در فهرست-فعلها
(قراردادن ((فهرست۱ (استخراج فعل۱ *قرآن*)))
(بهازایهر فعل-پیدا-شده در فهرست۱
(برنامه
(خروجی فعل-پیدا-شده)
(خروجی (واژه-بعد فعل-پیدا-شده))
(خروجی (واژه-قبل فعل-پیدا-شده)))))
در کد بالا، که در یک زبان برنامهنویسی تخیلی است:
- در خط اول یک فهرست به اسم «فهرست-سهگانهها» میسازیم و تعدادی عضو در آن تعریف میکنیم.
- در خط دوم یک فهرست به اسم «فهرست-فعلها» میسازیم و عضوی در آن قرار نمیدهیم(خالی هست).
- در خطهای بعدی به ازای هر عضو از «فهرست-سهگانهها»، آن را در «ث» میگذاریم که مخفف «ثلاثی» هست. سپس با استفاده از ویژگی «برنامه» که در این زبان برنامهنویسی وجود دارد، ۴ دستور اجرا میکنیم. این ۴ دستور هر کدام یک عضو جدید به «فهرست-فعلها» اضافه میکنند. عضوها نیز فعلهای دوم و سوم شخص، جمع و مفرد هستند. حال «فهرست-فعلها» دیگر خالی نیست و تعدادی فعل دارد. با توجه به این که تعداد عضو ها در «فهرست-سهگانهها» ۴ هست و ما نیز به ازای هر عضو ۴ فعل اضافه میکنیم، حال «فهرست-فعلها» ۱۶ عضو دارد.
- در خطهای بعدی تک تک عضو های «فهرست-فعلها» را میخوانیم و در «فعل۱» قرار میدهیم. سپس با استفاده از ویژگی «استخراج» زبان، در تمام دادههای موجود در
*قرآن*
جستجو میکنیم و هر کجا این فعل باشد، استخراج شده و نهایتا یک فهرست به اسم «فهرست۱» داریم که تمام نتیجهها را دارد. بعد تک تک نتیجهها را بیرون میکشیم و در «فعل-پیدا-شده» میگذاریم. نهایتا خود «فعل-پیدا-شده» و همچنین واژههای بعد و قبل آن را به خروجی میفرستیم تا ما بتوانیم آن را ببینیم و بخوانیم.