أدوات المستخدم

أدوات الموقع


thawab:stemming

اختلافات

عرض الاختلافات بين النسخة المختارة و النسخة الحالية من الصفحة.

رابط إلى هذه المقارنة

جانبي المراجعة السابقة المراجعة السابقة
المراجعة التالية
المراجعة السابقة
thawab:stemming [2010/03/10 21:09]
alsadi
thawab:stemming [2015/04/23 00:21] (حالي)
سطر 1: سطر 1:
 +====== التجذيع ======
 +===== تمهيد =====
 +هنا مقدمة عن طريق التجذيع ​ و RE و snowball
 +
 +المقصود بالتجذيع هو إزالة **جزء** من السوابق ​ واللواحق و**بعض** الحروف غير الأصلية حتى يتم إيجاد الكلمات التي لها نفس الجذع عند البحث عن أي منها.
 +وهو غير التجذير حيث أن إعادة الكلمة لجذرها يضيع جزء كبير من المعنى مثلا "​نفسية"​ و "​منافسة"​ لها نفس الجذر.
 +
 +ليس المقصود بالتجذيع هو بناء محرك صرفي إلا أن كتابة خوارزمية التجذيع يجب أن تراعي بعض القواعد
 +  * [[http://​www.angelfire.com/​tx4/​lisan/​sarf.htm|ملخص لأبواب الصرف]]
 +  * [[http://​www.9rf.info/​default.aspx|محرك صرفي]]
 +===== المقايضة =====
 +إننا أمام نقيضين وهما إما أن لا نجمع كلمات كان يجب أن نجمعها معا في جذع واحد مما يؤدي إلى عدم الحصول على المعلومة المطلوبة في نتائج البحث لاختلاف ظاهري مثلا كالاختلاف بين "​كتبته"​ و "​فكتبناه"​ فأحرف الزيادة هذه لا تستحق البحث لكنها أعمت الحاسوب عن تطابق الكلمتين.
 +
 +والخيار الآخر هو أن نجمع كلمات غير المترابطة معا مما يخفف تركيز المحتوى المطلوب في كم هائل من المعلومات التي لا علاقة لها بالموضوع. تخيل أن إزالة واو العطف ​ بطريقة عمياء قد تؤدي إلى إزالة واو أصلية كما في "​**ورد**"​
 +لتصبح "​**رد**"​. أما الأسوأ فهو أن تذهب نفس الكلمة لجذعين مختلفين فلو تم تجذيع "​ال"​ التعريف في "​**الورد**"​ فتصبح "​**ورد**"​ مما يجعلهما لا يتطابقان لأنهما أصبحا "​ورد"​ و "​رد"​
 +
 +===== قياس جودة التجذيع =====
 +==== الطريقة العمياء ====
 +
 +إن طريقة القياس المتبعة مثل TREC2002 عبر قياس كومة مصنفة من الصحف العربية غير صالحة لأسباب يعلمها الجميع من تردي حال الإعلام العربي. بل إن بعض الأوراق العلمية الغربية كانت تعجب من دخول السيارات (العربيات) والأموال (العربون) عند البحث عن كلمة "​العربية"​ على سبيل المثال!
 +
 +لذا يفترض أن نستخدم طرق خاصة بنا لقياس جودة التجذيع وهي
 +  * إدخال عدد من أمهات الكتب مثل كتب الحديث وكتب الفقه المعروفة (آخذين بعين الاعتبار أن كتب الحديث يكون فيها السند وهو أسماء ومصطلحات وليس جمل بنسب طبيعية لذا أحيانا يفضل أن نستخدم كتب الفقه)
 +  * إحصاء الكلمات التي ترد مرة واحدة فقط. (نظريا من الصعب أن ترد كلمة صحيحة مرة واحدة فقط في كومة كبيرة من الكتب فإن ورودها مرة واحدة يعني إما أنها أعجمية معربة أو اسم علم أو أنها لم تجذع)
 +  * إيجاد الانحراف المعياري للتكرار النسبي بين الكلمات المختلفة (في حالة التجذيع المجحف سيكون قريب من الصفر وفي حالة عدم التجذيع سيكون الرقم أكبر من 2 مثلا)
 +
 +==== عبر المحرك الصرفي ====
 +استخدام قائمة مدخلة مسبقا بالجذور الشائعة ثم تصريفها وإسنادها للضمائر وإضافة السوابق واللواحق ثم تجذيعها للتأكد من أن جميع التصريفات تذهب لنفس الجذع.
 +
 +===== التنفيذ =====
 +إن أسهل طرق التنفيذ هي استخدام RE
 +لكن في هذا المجال فإن الأفضل هو استخدام [[http://​snowball.tartarus.org/​compiler/​snowman.html|لغة snowball]] في كتابة الخوارزمية ثم تحويلها للغة البرمجة التي نعمل عليها
 +
 +يفترض أن لا تستخدم الخوارزمية أي قواميس كبيرة حتى تعمل على كلمات مستحدثة مثلا للتمكن من تجذيع كلمة الإنترنت إلى إنترنت. لكن يسمح للخوارزمية استعمال قواميس بالحالات الشاذة عن الخوارزمية
 +
 +على البرنامج التعامل مع الإضافات التالية على ترتيب التجذيع:​
 +  - همزة السؤال - سواء للاسم والفعل
 +  - واو وفاء العطف - سواء للاسم والفعل
 +  - خاصة بالاسم
 +    - الجر بالباء أو بالكاف أو اللام
 +    - ال التعريف (تتحول إلى "​لل"​ عند جرها باللام)
 +  - خاص بالأفعال
 +    - خاص بالفعل المضارع
 +      - سين التسويف - مثل سيأكل
 +      - أحرف المضارعة [نأتي] - مثل سأقفز
 +    - خاص بفعل الأمر
 +      - همزة الوصل رسما مثل أقلب
 +  - زيادات الأفعال والأسماء
 +      - ألف وهي إما أن تكون
 +        - ألف التعدية - "​**أأذهب** الخمر عقله أم أنه يمزح ؟" ومثل الإقلاع (قلع زيدت بألف لتصبح أقلع ومصدرها إقلاع)
 +        - أو ألف افعّل - مثل "​ابيض وجهه فرحا"​ ومثل "​الارتداد"​
 +        - ألف التفضيل مثل أكبر وأصغر ...
 +      - تاء
 +        - تاء تفعّل مثل "​ستتهجد المسلمات في بيوتهن"​
 +        - مصادر تبدأ بحرف التاء تَغَلغَل تَغَلغُل
 +
 +حروف محشورة infixes:
 +  * غالبا ما تحسن التجذيع
 +    - [[http://​www.reefnet.gov.sy/​education/​kafaf/​Bohoth/​JomoTaksir.htm|جموع التكسير]] مثل حرف الألف ​
 +  * ربما لا تحسن التجذيع
 +    - ألف الزيادة في فاعل مثل "​طالب المظلوم بحقه"​ (أمثلة تبين عدم فائدة التجذيع نافس وقاتل وجاهد قارنها مع نفّس و "​النفس الزكية"​)
 +    - ان... انفعل مثل "​انطلق"​ (لكن إن أهملنا الالف في "​انطلق"​ و "​انطلاق"​ لاشتباهها مع أي من القواعد يجب أن نذهب أختها في "​الانطلاق"​)
 +    - تاء افتعل مثل اجتمع اجتماع
 +    - تاء وألف تفاعل مثل تشارك والتضارب
 +    - اسْتَفْعَلَ:​ استغفر واسْتَكْبَرَ ... (لا نريد أن نجذع "​كبّر المؤذن"​ مع "​استكبر الظالم"​)
 +    - افْعَوْعَلَ:​ اعْشَوْشَبَ، افْعَوَّلَ:​ اعْلَوّطَ، افْعَالَّ:​ احْمَارَّ. ​ نادرة ولا تستحق التذجيع لأن من يبحث عنها يكون يقصدها
 +
 +اللواحق:​ كالتذكير والتأنيث والإفراد والتثنية والجمع السالم للأسماء
 +  * ضمائر رفع متصلة
 +    * ...ت المتكلم - "​أنا درست"​
 +    * ...نا المتكلمون - "​نحن درسنا"​
 +    * ...ت التأنيث ​ - "هي قالت"​
 +    * ألف الغائبان - "​هما قاما"​
 +    * ...ان الغائبان والغائبتان - "​هما يقومان وتقومان"​
 +    * ...تا الغائبتان - "​هما قامتا"​
 +    * الواو وألف التفريق - "هم قاموا"​
 +    * ...ون - "هم يقومون"​
 +    * ...ن النسوة - "هن قمن"​
 +    * ...ت المخاطب والمخاطبة "​أنتَ ضربت" ​ و "​أنتِ ضربت"​
 +    * ...ين المخاطبة في المضارع "​أنتِ تضربين"​
 +    * ...ي مع المخاطبة في الأمر "​أنت اضربي"​
 +    * ..تما المخاطبان والمخاطبتان "​أنتما قارعتما العدو"​
 +    * ...ان المخاطبان والمخاطبتان "​أنتما تقارعان العدو"​
 +    * ...ا في الأمر "​أنتما قارعا"​
 +    * ...تم المخاطبون "​أنتم جاهدتم أنفسكم"​
 +  * ضمائر نصب
 +    * ...ني - سألتني
 +    * ...نا - سألتنا
 +    * ...ه - سألته
 +    * ...ها - سألتها
 +    * ...هما - سألتهما
 +    * ...هم - سألتهم
 +    * ...هن - سألتهن
 +    * ...ك - سألتك
 +    * ...كما - سألتكما
 +    * ...كم - سألتكم
 +    * ...كن - سألتكن
 +  * الأسماء
 +    * التثنية
 +      * ...ان التثنية - عقيدتان
 +      * ...ين التثنية - عقيدتين (تحذيف النون مثلا "​عقيدتيهم"​)
 +    * الجمع
 +      * ...ون - مسلمون
 +      * ...ين - مسلمين
 +      * ...ات - مسلمات
 +    * ...ي النسبة - أردني (النسبة تكون للمفرد فقط)
 +      * ...ة المربوطة - عقيدة
 +      * ...ت إذا تبعت بأي شيء "​عقيدتهم"​
 +    * المضاف إليه
 +      * ...ي - كتابي
 +      * ...نا - كتابنا
 +      * ...ك - كتابك
 +      * ...كما - كتابكما
 +      * ...كم - كتابكم
 +      * ...ه - كتابه
 +      * ...ها - كتابها
 +      * ...هما - كتابهما
 +      * ...هن - كتابهن
 +      * ...هم - كتابهم
 +
 +ها ان ات ون ين يه ية ه ة ي
 +
 +===== السوابق prefixes =====
 +يجب تجذيع الحد على فرض أنه اسم إن سبقه جر أو تعريف
 + ​لأن الفعل لا يجر ولا يعرف بأل مع مراعاة بعض الشواذ التي قد يظن البرنامج فيها أن الكلمة اسم مع أنها فعل.
 +
 +المخطط التالي يبين مسار التجذيع للاسم
 +
 +{{ :​thawab:​stemming-prefix.png?​480 |مخطط لتجذيع السوابق}}
 +
 +حيث أن الفعل لا يقبل "​ال"​ التعريف ولا يقبل الجر
 +
 +ويمكن تمثيله بسهولة عبر الأنماط القياسية كما يلي
 +<code python>
 +prefix_re=u'​^\u0627?​[\u0648\u0641]?​(?:​[\u0628\u0643]?​\u0627\u0644?​|\u0644\u0644|\u0644)?​(\\w{2,​})$'​
 +</​code>​
 +وللتوضيح
 +<code python>
 +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
 +
 +</​code>​
 +
 +وهنا اشترطنا أن يكون الجذع من حرفين أو أكثر بعد التجذيع حتى لا يظن البرنامج أن فعل **بال** اسم معرف بال ومجرور بالباء ولا يظل منه شيء بعد التجذيع
 +
 +كذلك نلاحظ أننا استفدنا من جشع RE حتى نتأكد من أنه عندما يرى كلمة مثل الأرض لن يحسبها همزة سؤال ثم لام أصلية أو لام جر
 +
 +وفي هذا النموذج تكون الشواذ هي الأفعال التي تبدأ ببعض هذه السوابق كحروف أصلية وليس زوائد على الاسم مثلا "​بالغ (مبالغة)"​ ومع أن هذه الكلمة لا تطابق المثال لأن هناك حرف واحد بعد السوابق إلا أن الفعل قد يضاف له ضمائر كما في "​بالغنا"​ و "​بالغتم"​ وهنا سيظن البرنامج أنه أمام اسم معرف بال وهو الاسم غتم أو غنا...إلخ.
 +
 +هذه الشواذ هي:
 +  * أفعال تبدأ بالهمز ثم واو أو فاء ثم باء أو كاف أو لام أو ألف ...:
 +    * أولم (يولم، وليمة)
 +    * أفلح (يفلح، فلاحا)
 +  * أفعال تبدأ بالهمز ثم باء أو كاف أو لام أو ألف ...: قيد البحث
 +  * بال ثم أي حرف..
 +    * بالغ... مثل بالغنا
 +    * البحث عن المزيد
 +  * واو ثم كاف أو باء أو لام
 +    * وكز... مثل وكزنا (أي ضربنا)
 +    * ولع... مثل ولع (أي عشق)
 +    * ولد...
 +    * ولف...
 +    * البحث عن المزيد
 +  * فاء ثم كاف أو باء أو لام
 +    * فلج... مثل فلجنا
 +    * فكك... مثل فككته
 +    * البحث عن مزيد
 +  * واو ثم ألف ثم لام
 +    * البحث عن مزيد
 +  * فاء ثم ألف ثم لام
 +    * البحث عن مزيد
 +
 +بالنسبة للتعريف "​ال"​ لدينا الحالات التالية (مع أن جذورها لا تدخل
 +في "​أفعال تبدأ بالهمز ثم باء أو كاف أو لام أو ألف"​):​
 +  * الآن
 +  * ألبسة
 +  * ألبان
 +  * ألوان
 +  * إلهام
 +  * ألف
 +  * لفظ الجلالة "​الله"​
 +
 +===== اللواحق =====
 +برامج التجذيع التقليدية تجرد الكلمة من اللواحق التالية
 +ها ان ات ون ين يه ية ه ة ي
 +
 +لكن في الأمر تفصيل حيث يلحق بالاسم ضمائر تكون "​مضاف إليه"​ مثل "​كتابه"​ و "​كتابنا"​ و "​كتابهم"​ (الصورة التالية بها خطأ الكود الذي يليدها أدق)
 +{{ :​thawab:​nounsuffixes.png?​480 |لواحق الأسماء}}
 +هذا كود RE الخاص بها (ملاحظة لا يراعيها الكود: إذا كان الاسم معرف بأل لا يجوز أن يكون مضاف إلى ضمير متصل)
 +<code python>
 +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"​)"​
 +])
 +
 +</​code>​
 +
 +وهناك لواحق للأفعال هي الضمائر
 +{{ :​thawab:​verbsuffixes.png?​480 |لواحق الأفعال}}
 +وهذه تمثل على شكل RE
 +<code python>
 +# [اتني]|نا|ان|تا|ون|ين|تما
 +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"​))?​$"​])
 +
 +</​code>​
 +
 +
 +انظر
 +  * [[http://​www.informatik.uni-trier.de/​~ley/​db/​conf/​sigir/​sigir2002.html#​LarkeyBC02|Light Stemming for Arabic Information Retrieval]]
 +
 +===== تجربة =====
 +<code python>
 +s="​وسألتمونيها"​
 +print stem_re.match(s.decode('​utf8'​)).group('​stem'​)
 +سأل
 +s="​فطالباتهم"​
 +print stem_re.match(s.decode('​utf8'​)).group('​stem'​)
 +طالب
 +</​code>​
 +
 +===== القائمة السوداء =====
 +يمكننا أن نضيف قائمة بالكلمات التي لا ينبغي تجذيعها وفق هذه الخوارزمية وتحتوي القائمة التجذيع المدخل يدويا لها. من بين الكلمات ابن (لحذف الألف لأنها الألف لن تحذف لقصر الكلمة) كذلك أبو وأبي لنفس السبب.
 +
 +لكن الغاية الأسمى للقائمة هي تجاوز اجحاف التجذيع كما في كلمة "​ألبسة"​ أو "​فسوق"​ أو "​فلول"​
 +
 +يكون ذلك من خلال
 +  * جمع كل الكلمات الموجودة في عينة من الكتب مع تكرارها
 +  * البحث عن كل الكلمات التي يمكن أن يلتبس الأمر على دالة التجذيع (كل الكلمات التي تبدأ بحرف فاء حتى نقرر هل هي فاء عطف أم أصلية مثلا)
 +  * جمع كل الكلمات التي تثبت أنها حروف أصلية (مثلا الكلمات الفلول ففلول وفلول كفلول كالفلول ... تثبت أن الفاء أصلية لأنه لا فاء عطف بعد تعريف)
 +  * قياس التكرار النسبي للكلمة لمقدار الالتباس (يعني عدد الكلمات التي جذعها على اعتبار أنها أصلية أو غير أصلية)
  
thawab/stemming.txt · آخر تعديل: 2015/04/23 00:21 (تحرير خارجي)