<box center green | مشروع تطوير ثواب ٣ >
</box>
مشروع ثواب 3 قيد التطوير. إن كنت تجد في نفسك الكفاية العملية في المجال التقني أو الشرعي فأنت مدعو للمشاركة في فريق العمل فلا تبخلوا علينا بالاقتراحات. أدناه صفحات تتعلق بتطوير ثواب:
</box>
<box center green | مشروع تطوير ثواب ٣ >
</box>
مشروع ثواب 3 قيد التطوير. إن كنت تجد في نفسك الكفاية العملية في المجال التقني أو الشرعي فأنت مدعو للمشاركة في فريق العمل فلا تبخلوا علينا بالاقتراحات. أدناه صفحات تتعلق بتطوير ثواب:
</box>
هنا مقدمة عن طريق التجذيع و RE و snowball
المقصود بالتجذيع هو إزالة جزء من السوابق واللواحق وبعض الحروف غير الأصلية حتى يتم إيجاد الكلمات التي لها نفس الجذع عند البحث عن أي منها. وهو غير التجذير حيث أن إعادة الكلمة لجذرها يضيع جزء كبير من المعنى مثلا “نفسية” و “منافسة” لها نفس الجذر.
ليس المقصود بالتجذيع هو بناء محرك صرفي إلا أن كتابة خوارزمية التجذيع يجب أن تراعي بعض القواعد
إننا أمام نقيضين وهما إما أن لا نجمع كلمات كان يجب أن نجمعها معا في جذع واحد مما يؤدي إلى عدم الحصول على المعلومة المطلوبة في نتائج البحث لاختلاف ظاهري مثلا كالاختلاف بين “كتبته” و “فكتبناه” فأحرف الزيادة هذه لا تستحق البحث لكنها أعمت الحاسوب عن تطابق الكلمتين.
والخيار الآخر هو أن نجمع كلمات غير المترابطة معا مما يخفف تركيز المحتوى المطلوب في كم هائل من المعلومات التي لا علاقة لها بالموضوع. تخيل أن إزالة واو العطف بطريقة عمياء قد تؤدي إلى إزالة واو أصلية كما في “ورد” لتصبح “رد”. أما الأسوأ فهو أن تذهب نفس الكلمة لجذعين مختلفين فلو تم تجذيع “ال” التعريف في “الورد” فتصبح “ورد” مما يجعلهما لا يتطابقان لأنهما أصبحا “ورد” و “رد”
إن طريقة القياس المتبعة مثل TREC2002 عبر قياس كومة مصنفة من الصحف العربية غير صالحة لأسباب يعلمها الجميع من تردي حال الإعلام العربي. بل إن بعض الأوراق العلمية الغربية كانت تعجب من دخول السيارات (العربيات) والأموال (العربون) عند البحث عن كلمة “العربية” على سبيل المثال!
لذا يفترض أن نستخدم طرق خاصة بنا لقياس جودة التجذيع وهي
استخدام قائمة مدخلة مسبقا بالجذور الشائعة ثم تصريفها وإسنادها للضمائر وإضافة السوابق واللواحق ثم تجذيعها للتأكد من أن جميع التصريفات تذهب لنفس الجذع.
إن أسهل طرق التنفيذ هي استخدام RE لكن في هذا المجال فإن الأفضل هو استخدام لغة snowball في كتابة الخوارزمية ثم تحويلها للغة البرمجة التي نعمل عليها
يفترض أن لا تستخدم الخوارزمية أي قواميس كبيرة حتى تعمل على كلمات مستحدثة مثلا للتمكن من تجذيع كلمة الإنترنت إلى إنترنت. لكن يسمح للخوارزمية استعمال قواميس بالحالات الشاذة عن الخوارزمية
على البرنامج التعامل مع الإضافات التالية على ترتيب التجذيع:
حروف محشورة infixes:
اللواحق: كالتذكير والتأنيث والإفراد والتثنية والجمع السالم للأسماء
ها ان ات ون ين يه ية ه ة ي
يجب تجذيع الحد على فرض أنه اسم إن سبقه جر أو تعريف لأن الفعل لا يجر ولا يعرف بأل مع مراعاة بعض الشواذ التي قد يظن البرنامج فيها أن الكلمة اسم مع أنها فعل.
المخطط التالي يبين مسار التجذيع للاسم
حيث أن الفعل لا يقبل “ال” التعريف ولا يقبل الجر
ويمكن تمثيله بسهولة عبر الأنماط القياسية كما يلي
prefix_re=u'^\u0627?[\u0648\u0641]?(?:[\u0628\u0643]?\u0627\u0644?|\u0644\u0644|\u0644)?(\\w{2,})$'
وللتوضيح
prefix_re=u''.join( [ u"^\u0627?" , # optional hamza u"[\u0648\u0641]?", # optional Atf (with Waw or Faa) u"(?:" , # nouns specific prefixes (Jar and definite article) u"[\u0628\u0643]?\u0627\u0644?|" , # optional Jar (with ba or kaf) with optional AL u"\u0644\u0644|" , # optional LL (Jar with Lam and article ) u"\u0644" , # optional LL (Jar with Lam and article) u")?" , # end nouns specific prefixes u"(\\w{2,})$" ] ) # the stem is grouped
وهنا اشترطنا أن يكون الجذع من حرفين أو أكثر بعد التجذيع حتى لا يظن البرنامج أن فعل بال اسم معرف بال ومجرور بالباء ولا يظل منه شيء بعد التجذيع
كذلك نلاحظ أننا استفدنا من جشع RE حتى نتأكد من أنه عندما يرى كلمة مثل الأرض لن يحسبها همزة سؤال ثم لام أصلية أو لام جر
وفي هذا النموذج تكون الشواذ هي الأفعال التي تبدأ ببعض هذه السوابق كحروف أصلية وليس زوائد على الاسم مثلا “بالغ (مبالغة)” ومع أن هذه الكلمة لا تطابق المثال لأن هناك حرف واحد بعد السوابق إلا أن الفعل قد يضاف له ضمائر كما في “بالغنا” و “بالغتم” وهنا سيظن البرنامج أنه أمام اسم معرف بال وهو الاسم غتم أو غنا…إلخ.
هذه الشواذ هي:
بالنسبة للتعريف “ال” لدينا الحالات التالية (مع أن جذورها لا تدخل في “أفعال تبدأ بالهمز ثم باء أو كاف أو لام أو ألف”):
برامج التجذيع التقليدية تجرد الكلمة من اللواحق التالية ها ان ات ون ين يه ية ه ة ي
لكن في الأمر تفصيل حيث يلحق بالاسم ضمائر تكون “مضاف إليه” مثل “كتابه” و “كتابنا” و “كتابهم” (الصورة التالية بها خطأ الكود الذي يليدها أدق)
هذا كود RE الخاص بها (ملاحظة لا يراعيها الكود: إذا كان الاسم معرف بأل لا يجوز أن يكون مضاف إلى ضمير متصل)
idafa=u"[\u0643\u0647\u064a]|\u0646\u0627|\u0643\u0645\u0627|\u0643\u0645|\u0647\u0627|\u0647\u0645\u0627|\u0647\u0646|\u0647\u0645" noun_suffix_re=u''.join( [ u"\u064a?" , # yeh alnisba u"(?:", u"(?:\u0627\u062a)?(?:" , idafa,")?|" # جمع مؤنث سالم و/أو مضاف إليه أو دون زوائد u"\u0629|" , # ta marboota then $ u"\u062a?", # ta followed by something u"[\u0627\u0648\u064a]", # جمع أو تثنية u"(?:", u"\u0646|", # ن فنهاية idafa, # مضاف إليه u")", u")" ])
وهناك لواحق للأفعال هي الضمائر
وهذه تمثل على شكل RE
# [اتني]|نا|ان|تا|ون|ين|تما verb_some_subject_re=u"[\u0627\u062a\u0646\u064a]|\u0646\u0627|\u0627\u0646|\u062a\u0627|\u0648\u0646|\u064a\u0646|\u062a\u0645\u0627" # [هن]|ني|نا|ها|هما|هم|هن|كما|كم|كن verb_object_re=u"(?:[\u0647\u0646]|\u0646\u064a|\u0646\u0627|\u0647\u0627|\u0647\u0645\u0627|\u0647\u0645|\u0647\u0646|\u0643\u0645\u0627|\u0643\u0645|\u0643\u0646)" verb_suffix_re=u''.join( [ u"(?:(?:\u0648\u0627|\u062a\u0645)|" , # وا|تم u"(?:", u"(?:", verb_some_subject_re, u'|\u0648|\u062a\u0645\u0648', # و|تمو u")", verb_object_re,u'{1,2}' u")|(?:", verb_some_subject_re, u"))?$"])
انظر
s="وسألتمونيها" print stem_re.match(s.decode('utf8')).group('stem') سأل s="فطالباتهم" print stem_re.match(s.decode('utf8')).group('stem') طالب
يمكننا أن نضيف قائمة بالكلمات التي لا ينبغي تجذيعها وفق هذه الخوارزمية وتحتوي القائمة التجذيع المدخل يدويا لها. من بين الكلمات ابن (لحذف الألف لأنها الألف لن تحذف لقصر الكلمة) كذلك أبو وأبي لنفس السبب.
لكن الغاية الأسمى للقائمة هي تجاوز اجحاف التجذيع كما في كلمة “ألبسة” أو “فسوق” أو “فلول”
يكون ذلك من خلال