اليوم أكتب في مجال عملي ، فكرت خلال عطلة نهاية الاسبوع بكتابة خوارزمية تحليلية للنصوص.
المدخلات : ملف نصي TXT
المخرجات : ملف اكسل CSV بعدد تكرار كل كلمة في هذا النص
احتجت هذا لأجل عملي ، المهم بعد ان انهيت كتابة الخوارزمية .. جربتها على مجموعة من الملفات النصية و مجموعة روايات و سجلات مراسلات .. الخ الخ .. كل نتيجة تحليل تعطيك نتائج مثيرة للاهتمام تعكس الأفكار الرئيسة للنص.. مثلاً ، تحليل رواية Shattered Faith ينتج التوزيع الآتي :
نلاحظ تكرار I من بعدها الحروف و الاسماء العامة في الانجليزية من ثم اسماء الشخصيات الرئيسية و هكذا ..
في الغالب اكثر الكلمات تكراراً هي نكرات (حروف جر ، أسماء موصولة ، الخ .. ) يليها اسماء محورية للنص ..
في الغالب اكثر الكلمات تكراراً هي نكرات (حروف جر ، أسماء موصولة ، الخ .. ) يليها اسماء محورية للنص ..
بامكانكم استخدام هذه الأداة لتحليل الملفات النصية المختلفة و هناك موقع مجاني لتحميل الكتب كملفات TEXT
https://www.free-ebooks.net/
بامكانكم التجربة عليه ، اعتذر فالبرنامج حالياً يقرأ فقط الملفات في صيغة TXT و ترميز UTF8 . ربما إذا دعت الحاجة لتطويره في المستقبل ، ساقوم بذلك ..
النتيجة الجميلة هي اني حاولت قراءة ملف نصي للقرآن الكريم من دون حركات ، حيث اردت ان أرى ما هي اكثر الكلمات تكراراً .. كانت كلمة الله ثاني اكثر كلمة تكراراً ... سبقتها كلمة .. هي كلمة من .. فكانت اكثر كلمتين تكراراً هما : من الله :) ..
ربما هي محض صدفة ، لكن النتيجة كانت جميلة و ذات معنى لدي ..
و تبقى القاعدة ان القرآن كتاب سبق زمنه (العصر الجاهلي) بعصور و أتى بأفكار معجزة و دعوات للتأمل في بيئة راكدة ، و لكن هو ليس كتاب فيزياء و ليس كتاب رياضيات .. جميل ان كلمة الله هي ثاني اكثر الكلمات تكراراً و جميلة ان "من" ثم "الله" هما اكثر كلمتان تكراراً ..
في النتائج التي تلى الاسماء الموصولة و حروف الجر تأتي كلمة "الأرض" و "آمنو" و "الرحمن" و "عذاب" و "الرحيم" .. الخ ..
حتى لو كانت كل هذه النتائج هراء .. فترتيب هذا التكرار حتماً يلخص كيف ان القرآن في اكثر الكلمات تكراراً لا يحتوي على كلمات الحرب و لا الإرهاب و لا العداء مما يُرسم في الوعي العالمي عن الدين و الإسلام .. إنما يتحدث عن الله و تصور الحياة الآخرة و الاستخلاف في هذه الحياة الدنيا ..
أسعد كثيراً بتعليقاتكم لإثراء الموضوع من ناحية تطبيقات ممكنة للفكرة أو انتقادات لتطبيقها على النص القرآني . :)
المراجع و الملحقات :
- https://www.free-ebooks.net/ يحتوي على مجموعة كبيرة من الكتب بصيغة TXT
- القرآن كملف نصي يمكن تحمليه من : http://tanzil.net/download/ و اختيار النص كنمط Simple Clean
- النتيجة كملف اكسل لتحليل نص القرآن : http://moatazelgamal.com/?attachment_id=197
- المشروع كمشروع C# يمكنكم تحميله و تجهيزه (Compile) من هنا : http://moatazelgamal.com/?attachment_id=193
- شكراً للصديق محمود مسعد لتحسينه أداء البرنامج ..
- إذا أردت تجربة البرنامج مباشرة ، يمكنك ذلك من خلال تحميل هذا الملف : http://moatazelgamal.com/?attachment_id=196
- الخوارزمية ب #C:
StreamWriter output = new StreamWriter(new FileStream("output.csv", FileMode.Create), Encoding.UTF8);
StreamReader reader = new StreamReader(new FileStream(args[0], FileMode.Open), Encoding.UTF8);
Char thischar;
string thisWord = "";
Dictionary<String, int> freqs = new Dictionary<string, int>();
while (!reader.EndOfStream)
{
foreach (string word in reader.ReadLine().ToLower().Replace('.', ' ').Replace('"', ' ').Replace('\'', ' ').Replace(',', ' ').Replace(':', ' ').Replace(';', ' ').Replace('(', ' ').Replace(')', ' ').Replace('?', ' ').Replace('/', ' ').Replace('\\', ' ').Split(' '))
{
if (word.Length > 0)
if (freqs.ContainsKey(word))
freqs[word]++;
else
freqs[word] = 1;
}
}
foreach (KeyValuePair<String, int> freq in freqs)
{
output.WriteLine(freq.Key + "," + freq.Value.ToString());
}
output.WriteLine("");
output.WriteLine("Processing Time: " + (DateTime.Now.Ticks - startTick) + " 100 nano seconds");
output.Close();
Console.WriteLine("Completed processing the file .. loading it in excel");
System.Diagnostics.Process.Start("output.csv");
}
ليست هناك تعليقات:
إرسال تعليق