عربي. كلمات

عربي. كلمات : مجموعة من الأدوات الإحصائية الخاصة بمعالجة المحتوى العربي وخاصة الكلمات ! تتضمن هذه الحُزمة أداة خاصة في إيجاد مشتقات الكلمات وأداة خاصة في التصحيح الإملائي و اخرى خاصة في معرفة ان كان النص المدخل عربياً ام لا (فارسي مثلاً)

تحتوي هذه الحُزمة على عدة أدوات برمجية و فيما يلي وصف كل أداة و طريقة إستعمالها:

أولاً: أداة إستخراج مشتقات الكلمة

تعمل هذه الأداة على إستخراج مشتقات الكلمة، وهنالك ثلاث طرق لإستخراج المشتقات سنقوم بشرحها بأمثلة

مثال ١: إستخراج المشتقات بالإعتماد على الجذور
// بناء كائن من نوع مستخرج مشتقات الكلمات
Expander E = new Expander();

//إختيار الكلمة المراد إستخراج مشتقاتها
String word = "الطموحات";

// تحليل الكلمة و تخزين الناتج في قائمة ، الناتج هو اعلى ٢٠ مشتقة وذلك حسب شيوع الإستخدام
// في حالة تغير قيمة المتغير الاخير من خطأ الى صح، فسيقوم البرنامج بإستخراج جميع (وليس ٢٠) المشتقات ذات العلاقة
ArrayList<String> expanByRoot = E.getExpandByRoot(word,20, false);

// إطبع القائمة على الشاشة
System.out.println(expanByRoot);
النتيجة:
[طموح, طموحات, الطموح, يطمح, تطمح, الطموحات, وطموحات, طموحة, نطمح, طموحاتها, طموحاته, الطموحة, طموحا, طموحه, وطموح, طموحاتهم, والطموحات, والطموح, يطمحون, ويطمح]

مثال ٢: إستخراج المشتقات بالإعتماد على الجذر مع طول الكلمة
حيث تعتمد النتائج على الكلمات ذات العلاقة و قريبة من طول الكلمة المدخلة
تستقبل العملية البرمجية الخاصة بالاشتقاق حسب طول ما يلي :
١- الكلمة
٢- عدد النتائج وترجع مرتبة حسب الاكثر شيوعاً
٣- الفرق في الطول بين الكلمة المدخلة والمخرجات
٤- قيمية بوليانية تحدد إرجاع كافة النتائج من عدمه وفي حالة كانت القيمة "صح" ، يتم تجاهل المتغير الثاني الذي يدل على عدد النتائج
// بناء كائن من نوع مستخرج مشتقات الكلمات
Expander E = new Expander();

//إختيار الكلمة المراد إستخراج مشتقاتها
String word = "أطفال";

// تقوم العملية البرمجية في هذا المثال بإرجاع اعلى ٢٠ اشتقاق (ان وجد) للكلمة مع فرق طول لا يتعدى الحرف الواحد
ArrayList<String> expanByLetters = E.getExpandByLetters(word, 20, 1, false);

// إطبع القائمة على الشاشة
System.out.println(expanByLetters);
النتيجة:
[الطفل, أطفال, طفلة, اطفال, طفلا, الطفلة, للطفل, لأطفال, لاطفال, والطفل, طفلها, وطفلة, وأطفال, واطفال, طفولته, طفلين, أطفالا, بالطفل, طفلان, أطفاله]

مثال ٣: إستخراج المشتقات بالإعتماد على خوارزمية Levenshtein Distance
تعتمد هذه الخوارزمية على ايجاد عدد الخطوات الضرورية لتحويل كلمة الى كلمة أخرى ، من إضافة أحرف أو تعديل أو حذف أو تبديل
تعمل العملية البرمجية على ايجاد الكلمات التي تشترك بنفس الجذر مع الكلمة المدخلة وقريبة بالشكل.
حيث تعتد النتائج على ما يلي:
١- الكلمة المدخلة
٢- عدد النتائج وترجع مرتبة حسب الاكثر شيوعاً
٣- القيمة المدخلة الى الخوارزمية لتحديد نسبة التشابه بين المشتقات والكلمة المدخلة
٤- قيمية بوليانية تحدد إرجاع كافة النتائج من عدمه وفي حالة كانت القيمة "صح" ، يتم تجاهل المتغير الثاني الذي يدل على عدد النتائج
// بناء كائن من نوع مستخرج مشتقات الكلمات
Expander E = new Expander();

//إختيار الكلمة المراد إستخراج مشتقاتها
String word = "يلعبون";

// تقوم العملية البرمجية بهذا المثال بإرجاع اعلى ٢٠ اشتقاق (ان وجد) للكلمة بالاعتماد على تشابه اعلى من  ٦٠٪ بين الكلمة وكل مشتقة
ArrayList<String> expanByLev = E.getExpandByLev(word, 20,0.6, false);

// إطبع القائمة على الشاشة
System.out.println(expanByLev);
النتيجة:
[يلعب, اللاعبون, يلعبون, يلعبه, لعبوا, لاعبون, يلعبان, يلعبوا, يلعبها, ويلعبون, يتلاعبون, ولعبوا, يلعبن, يلعبا, تلعبان, سيلعبون, سيلعبان, ليلعبوا]

ثانياً: أداة التصحيح الإملائي

تعتمد أداة التصحيح الإملائي على مجموعه هائلة من البيانات المعرفة مسبقاً (تعريف البينات الكلمات يحتوي ايضاً دلالات على شيوع الإستعمال) بشكل اساسي في فحص التشابه والعلاقة بين الكلمة المدخلة والكلمات المقترحة كتصحيح.
هنالك ٣ انواع من قوائم البيانات التي قد تستخدم مع أداة التصحيح الإملائي وسيتم شرحها في الامثلة الثالث القادمة:

مثال٤: برنامج يعمل على تصحيح الكلمة المدخلة و يعتمد على مرجع من ١٨٨ الف كلمة صحيحة ومرتبة على الاكثر شيوعا (بناء على تكرار تلك الكلمات) مستخرجة من مجموعة من الصحف
// تعريف كائن من نوع المصحح الإملائي العام
GeneralArabicSpeller G = new GeneralArabicSpeller();

// تعبئة قوائم الكلمات الضرورية للمصحح ، قائمة الكلمات القصيرة
String spellingData = G.fillData();

// تعريف متغير يخزن به الكلمة الخاطئة
String word_to_spell = "بالثربية";

// إستخرج الكلمات الصحيحة المرتبطة بالكلمة الخاطئة و خزن النتائج في قائمة
// القائمة تحتوي على الاكثر ٢٠ كلمة إن وجد
ArrayList<String> result = G.getGenSpell(word_to_spell,20,spellingData);

// طباعة النتائج على الشاشة
System.out.println(result);
النتيجة:
[بالتربية, بالعربية, بالغربية]

مثال ٥: برنامج يعمل على تصحيح الكلمة المدخلة و يعتمد على مرجع من اكثر من نصف مليون كلمة صحيحة ومرتبة على الاكثر شيوعا (بناء على تكرار تلك الكلمات)
// تعريف كائن من نوع المصحح الإملائي العام
GeneralArabicSpeller G = new GeneralArabicSpeller();

// تعبئة قوائم الكلمات الضرورية للمصحح ، قائمة الكلمات الكبيرة
String spellingData = G.fillDataLarge();

// تعريف متغير يخزن به الكلمة الخاطئة
String word_to_spell = "بالثربية";

// إستخرج الكلمات الصحيحة المرتبطة بالكلمة الخاطئة و خزن النتائج في قائمة
// القائمة تحتوي على الاكثر ٢٠ كلمة إن وجد
ArrayList<String> result = G.getGenSpell(word_to_spell,20,spellingData);

// طباعة النتائج على الشاشة
System.out.println(result);
النتيجة:
[بالتربية, بالحربية, بالعربية, بالغربية]

مثال ٦: برنامج يعمل على تصحيح الكلمة المدخلة بناءً على كلمات القرآن الكريم
يعتمد البرنامج على نصوص سور القرآن ، حيث تم إستخراج جميع الكلمات منها وترتيبها على الاكثر تكراراً داخل القرآن الكريم
// تعريف كائن من نوع المصحح الإملائي العام
GeneralArabicSpeller G = new GeneralArabicSpeller();

// تعبئة قوائم الكلمات الضرورية للمصحح ، قائمة كلمات القرآن الكريم
String spellingData = G.fillDataQuran();

// تعريف متغير يخزن به الكلمة الخاطئة
String word_to_spell = "يتثالوت";

// إستخرج الكلمات الصحيحة المرتبطة بالكلمة الخاطئة و خزن النتائج في قائمة
// القائمة تحتوي على الاكثر ٢٠ كلمة إن وجد
ArrayList<String> result = G.getGenSpell(word_to_spell,20,spellingData);

// طباعة النتائج على الشاشة
System.out.println(result);
النتيجة:
[يتساءلون, يتلو, يتلون, تعالوا]

ثالثاً أداة معرفة ان كان النص عربياً أم لا

تميز هذه الأداة بين النص المكتوب بأحرف اللغة العربية لكنه ليس عربياً وتستطيع ان تكتشف فقط النصوص العربية وتميزها من غيرها
مثال ٧: برنامج يُرجع ما إن كان النص عربياً أم لا
// تعريف متغير يحمل النص المراد معرفة إن كان عربياً أم لا
String text = "چند صد زبان و گویش مرتبط است. بیشتر زبان‌های مردمان ساکن قارهٔ اروپا";

// فحص النص وإن كان نسبة العربي به اكثر من ٨٠ بالئة يرجع قيمة صح
boolean isArabic = ArabicDetector.isArabic(text,0.8);

// اذا كان النص عربي ، إطبع على الشاشة انه عربي
if(isArabic) System.out.println("النص عربي");

// إذا لم يكن فإطبع انه ليس عربياً
else System.out.println("النص ليس عربياً");
النتيجة
النص ليس عربياً