thawab:stemming

التجذيع

تمهيد

هنا مقدمة عن طريق التجذيع و RE و snowball

المقصود بالتجذيع هو إزالة جزء من السوابق واللواحق وبعض الحروف غير الأصلية حتى يتم إيجاد الكلمات التي لها نفس الجذع عند البحث عن أي منها. وهو غير التجذير حيث أن إعادة الكلمة لجذرها يضيع جزء كبير من المعنى مثلا “نفسية” و “منافسة” لها نفس الجذر.

ليس المقصود بالتجذيع هو بناء محرك صرفي إلا أن كتابة خوارزمية التجذيع يجب أن تراعي بعض القواعد

المقايضة

إننا أمام نقيضين وهما إما أن لا نجمع كلمات كان يجب أن نجمعها معا في جذع واحد مما يؤدي إلى عدم الحصول على المعلومة المطلوبة في نتائج البحث لاختلاف ظاهري مثلا كالاختلاف بين “كتبته” و “فكتبناه” فأحرف الزيادة هذه لا تستحق البحث لكنها أعمت الحاسوب عن تطابق الكلمتين.

والخيار الآخر هو أن نجمع كلمات غير المترابطة معا مما يخفف تركيز المحتوى المطلوب في كم هائل من المعلومات التي لا علاقة لها بالموضوع. تخيل أن إزالة واو العطف بطريقة عمياء قد تؤدي إلى إزالة واو أصلية كما في “ورد” لتصبح “رد”. أما الأسوأ فهو أن تذهب نفس الكلمة لجذعين مختلفين فلو تم تجذيع “ال” التعريف في “الورد” فتصبح “ورد” مما يجعلهما لا يتطابقان لأنهما أصبحا “ورد” و “رد”

قياس جودة التجذيع

الطريقة العمياء

إن طريقة القياس المتبعة مثل TREC2002 عبر قياس كومة مصنفة من الصحف العربية غير صالحة لأسباب يعلمها الجميع من تردي حال الإعلام العربي. بل إن بعض الأوراق العلمية الغربية كانت تعجب من دخول السيارات (العربيات) والأموال (العربون) عند البحث عن كلمة “العربية” على سبيل المثال!

لذا يفترض أن نستخدم طرق خاصة بنا لقياس جودة التجذيع وهي

  • إدخال عدد من أمهات الكتب مثل كتب الحديث وكتب الفقه المعروفة (آخذين بعين الاعتبار أن كتب الحديث يكون فيها السند وهو أسماء ومصطلحات وليس جمل بنسب طبيعية لذا أحيانا يفضل أن نستخدم كتب الفقه)
  • إحصاء الكلمات التي ترد مرة واحدة فقط. (نظريا من الصعب أن ترد كلمة صحيحة مرة واحدة فقط في كومة كبيرة من الكتب فإن ورودها مرة واحدة يعني إما أنها أعجمية معربة أو اسم علم أو أنها لم تجذع)
  • إيجاد الانحراف المعياري للتكرار النسبي بين الكلمات المختلفة (في حالة التجذيع المجحف سيكون قريب من الصفر وفي حالة عدم التجذيع سيكون الرقم أكبر من 2 مثلا)

عبر المحرك الصرفي

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

التنفيذ

إن أسهل طرق التنفيذ هي استخدام RE لكن في هذا المجال فإن الأفضل هو استخدام لغة snowball في كتابة الخوارزمية ثم تحويلها للغة البرمجة التي نعمل عليها

يفترض أن لا تستخدم الخوارزمية أي قواميس كبيرة حتى تعمل على كلمات مستحدثة مثلا للتمكن من تجذيع كلمة الإنترنت إلى إنترنت. لكن يسمح للخوارزمية استعمال قواميس بالحالات الشاذة عن الخوارزمية

على البرنامج التعامل مع الإضافات التالية على ترتيب التجذيع:

  1. همزة السؤال - سواء للاسم والفعل
  2. واو وفاء العطف - سواء للاسم والفعل
  3. خاصة بالاسم
    1. الجر بالباء أو بالكاف أو اللام
    2. ال التعريف (تتحول إلى “لل” عند جرها باللام)
  4. خاص بالأفعال
    1. خاص بالفعل المضارع
      1. سين التسويف - مثل سيأكل
      2. أحرف المضارعة [نأتي] - مثل سأقفز
    2. خاص بفعل الأمر
      1. همزة الوصل رسما مثل أقلب
  5. زيادات الأفعال والأسماء
    1. ألف وهي إما أن تكون
      1. ألف التعدية - “أأذهب الخمر عقله أم أنه يمزح ؟” ومثل الإقلاع (قلع زيدت بألف لتصبح أقلع ومصدرها إقلاع)
      2. أو ألف افعّل - مثل “ابيض وجهه فرحا” ومثل “الارتداد”
      3. ألف التفضيل مثل أكبر وأصغر …
    2. تاء
      1. تاء تفعّل مثل “ستتهجد المسلمات في بيوتهن”
      2. مصادر تبدأ بحرف التاء تَغَلغَل تَغَلغُل

حروف محشورة infixes:

  • غالبا ما تحسن التجذيع
    1. جموع التكسير مثل حرف الألف
  • ربما لا تحسن التجذيع
    1. ألف الزيادة في فاعل مثل “طالب المظلوم بحقه” (أمثلة تبين عدم فائدة التجذيع نافس وقاتل وجاهد قارنها مع نفّس و “النفس الزكية”)
    2. ان… انفعل مثل “انطلق” (لكن إن أهملنا الالف في “انطلق” و “انطلاق” لاشتباهها مع أي من القواعد يجب أن نذهب أختها في “الانطلاق”)
    3. تاء افتعل مثل اجتمع اجتماع
    4. تاء وألف تفاعل مثل تشارك والتضارب
    5. اسْتَفْعَلَ: استغفر واسْتَكْبَرَ … (لا نريد أن نجذع “كبّر المؤذن” مع “استكبر الظالم”)
    6. افْعَوْعَلَ: اعْشَوْشَبَ، افْعَوَّلَ: اعْلَوّطَ، افْعَالَّ: احْمَارَّ. نادرة ولا تستحق التذجيع لأن من يبحث عنها يكون يقصدها

اللواحق: كالتذكير والتأنيث والإفراد والتثنية والجمع السالم للأسماء

  • ضمائر رفع متصلة
    • …ت المتكلم - “أنا درست”
    • …نا المتكلمون - “نحن درسنا”
    • …ت التأنيث - “هي قالت”
    • ألف الغائبان - “هما قاما”
    • …ان الغائبان والغائبتان - “هما يقومان وتقومان”
    • …تا الغائبتان - “هما قامتا”
    • الواو وألف التفريق - “هم قاموا”
    • …ون - “هم يقومون”
    • …ن النسوة - “هن قمن”
    • …ت المخاطب والمخاطبة “أنتَ ضربت” و “أنتِ ضربت”
    • …ين المخاطبة في المضارع “أنتِ تضربين”
    • …ي مع المخاطبة في الأمر “أنت اضربي”
    • ..تما المخاطبان والمخاطبتان “أنتما قارعتما العدو”
    • …ان المخاطبان والمخاطبتان “أنتما تقارعان العدو”
    • …ا في الأمر “أنتما قارعا”
    • …تم المخاطبون “أنتم جاهدتم أنفسكم”
  • ضمائر نصب
    • …ني - سألتني
    • …نا - سألتنا
    • …ه - سألته
    • …ها - سألتها
    • …هما - سألتهما
    • …هم - سألتهم
    • …هن - سألتهن
    • …ك - سألتك
    • …كما - سألتكما
    • …كم - سألتكم
    • …كن - سألتكن
  • الأسماء
    • التثنية
      • …ان التثنية - عقيدتان
      • …ين التثنية - عقيدتين (تحذيف النون مثلا “عقيدتيهم”)
    • الجمع
      • …ون - مسلمون
      • …ين - مسلمين
      • …ات - مسلمات
    • …ي النسبة - أردني (النسبة تكون للمفرد فقط)
      • …ة المربوطة - عقيدة
      • …ت إذا تبعت بأي شيء “عقيدتهم”
    • المضاف إليه
      • …ي - كتابي
      • …نا - كتابنا
      • …ك - كتابك
      • …كما - كتابكما
      • …كم - كتابكم
      • …ه - كتابه
      • …ها - كتابها
      • …هما - كتابهما
      • …هن - كتابهن
      • …هم - كتابهم

ها ان ات ون ين يه ية ه ة ي

السوابق prefixes

يجب تجذيع الحد على فرض أنه اسم إن سبقه جر أو تعريف لأن الفعل لا يجر ولا يعرف بأل مع مراعاة بعض الشواذ التي قد يظن البرنامج فيها أن الكلمة اسم مع أنها فعل.

المخطط التالي يبين مسار التجذيع للاسم

مخطط لتجذيع السوابق

حيث أن الفعل لا يقبل “ال” التعريف ولا يقبل الجر

ويمكن تمثيله بسهولة عبر الأنماط القياسية كما يلي

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')
طالب

القائمة السوداء

يمكننا أن نضيف قائمة بالكلمات التي لا ينبغي تجذيعها وفق هذه الخوارزمية وتحتوي القائمة التجذيع المدخل يدويا لها. من بين الكلمات ابن (لحذف الألف لأنها الألف لن تحذف لقصر الكلمة) كذلك أبو وأبي لنفس السبب.

لكن الغاية الأسمى للقائمة هي تجاوز اجحاف التجذيع كما في كلمة “ألبسة” أو “فسوق” أو “فلول”

يكون ذلك من خلال

  • جمع كل الكلمات الموجودة في عينة من الكتب مع تكرارها
  • البحث عن كل الكلمات التي يمكن أن يلتبس الأمر على دالة التجذيع (كل الكلمات التي تبدأ بحرف فاء حتى نقرر هل هي فاء عطف أم أصلية مثلا)
  • جمع كل الكلمات التي تثبت أنها حروف أصلية (مثلا الكلمات الفلول ففلول وفلول كفلول كالفلول … تثبت أن الفاء أصلية لأنه لا فاء عطف بعد تعريف)
  • قياس التكرار النسبي للكلمة لمقدار الالتباس (يعني عدد الكلمات التي جذعها على اعتبار أنها أصلية أو غير أصلية)
آخر تعديل:: 23 نيسان 2015 الساعة 00:21 (تحرير خارجي)