20

خوارزمية تجذيع عربية لعدّة لغات برمجة (Stemmer)

  • عاصم

السلام عليكم،

أعرّفكم بمشروعي لصنع خوارزمية تجذيع للغة العربية تكون سريعة ومتوفرة لجميع لغات البرمجة وقد وجدت ضالتي مع Snowball framework (

http://snowballstem.org

) . الخوارزمية بدأت فكرتها في إطار صيف غوغل للتطوير عام 2014 مع مشروع Xapian .

الغاية الأساسية لهذا المجذع هي البحث وبالتالي لا يشترط أن يكون الجذع صحيحا لغويا ولكن يشترط أن يجمع أغلب كلمات العائلة.

البذرة الأولى للمجذع مستوحاة من توثيق في موقع أعجوبة:

http://ojuba.org/thawab/ste...

يمكن الإطلاع على المشروع وتجريبه في الرابط التالي:

http://www.arabicstemmer.com

الخوارزمية استعمالها سهل مثلا في البايثون يمكن استعمالها كما يلي (بعد تثبيتها):

 from snowballstemmer import stemmer
 ar_stemmer = stemmer("arabic")
 ar_stemmer.stemWord(u"فسميتموها")

شفرة المصدر:

لمن يريد المساهمة ، هناك أربع مجالات:

  • تحسين الخوارزمية الأساسية

  • إنشاز الخوارزمية إلى لغة برمجة جديدة مع توثيقها مثلا GO

  • ادماج الخوارزمية في مكتبات البحث والمعالجة المشهورة مثل NLTK و whoosh...

  • تحسين الموقع

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

لقد جربت الشواذ (عندما تكون الزوائد أصلية) "وألبان" "وألوان" "فالكون الواسع". وجربت التي لها اكثر من احتمال مثال "والدين" تحتمل عطف على الدين وجذعها دين أو مثنى والد.

المفروض في الخوارزمية الجيدة هي ان لا تجذع عندما يكون هناك شك يعني الأصل أن والدين تظل والدين أفضل من أن تخلط بين الدين والأولاد. لهذا المفروض عمل light stemmer مع كشف كل احتمالات الشواذ

هل هناك حصر للشواذ؟

وفي حالة حصرنا الشواذ، هل نعطي كل الاحتمالات والد-ين أو وال-دين.

أعتقد أنّ كشف هذه الحالات، يؤدي إلى الخروج عن إطار التجذيع الخفيف، ويستلزم تحليلا سياقيا

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

مثلا لقد حصرت كل ألف لام الأصلية لذا يمكنني حذف ال التعريف

لكني لم أتمكن من حصر الواوات الأصلية مثل ولد لذا لا أقوم بتجذيف واو العطف.

أردت أن تكون الخوارزمية حرة من أي قائمة معدّة مسبقا ، لكن قد أضطر لإضافة بعض القوائم القصيرة للتخلص من بعض المشاكل ، هل يمكنك مشاركتي بالقوائم التي صنعتها ؟

كما أوضح @linuxscout لا يمكن معالجة حالة "والدين" دون "tagging" ومعرفة سياق الجملة وإن رفضت تجذيع "والدين" فسيتم رفض "والتين" "والموت" لذلك على المجذع أن يختار إما أن يسبق السوابق فتصبح "دين" أو يسبق اللواحق فتصبح "والد". ف

alsadi أضف ردا

الخوارزمية التي عملتها أبسط من ذلك. إن كان هناك أكثر من احتمال لا تجذع واعتبر الكلمة جذعا كما هي.

عندما نكون بين احتمالين to over stem or to under stem أختار الثانية.

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

هل من رابط للخوارزمية؟

ماهي الاستخدامات الممكنة لمثل هذه الخوارزمية لو سمحتم؟

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

استعمال آخر هو في عمل tags حيث يجب اعتبار الكلمات التي لها نفس الجذع ككلمات مكررة مثلا: شفرة، الشفرة، والشفرة ،...

واضح.. شكرا

OlSkool أضف ردا

جربت كلمة استفتاء واعطتني نفس الكلمة

هل من المفروض ان تعطي جذر الكلمة (ف ت ي) ؟

التجذيع لا يعطي الجذور بل المفردات العجمية

شكراً!

ممكن توضيح اكثر ما هي المفردات العجمية؟

يقصد المفردات كما ترد في المعجم(القاموس)

alsadi أضف ردا

من وجهة نظري اشتراط ارسال الكلمة لجذعها المعجمي غاية سامية لكنها لا تدرك أو صعبة المنال.

من وجهة نظري يكفي أن يرسل الكلمة لكلمة مفتعلة لا معنى لها لكنها تؤدي لربط كلمات ذات دلالة متقاربة

هو كذلك، هدف هذه الخوارزمية هو التجميع وخاصة للفهرسة والبحث وحبذا لو يكون الجذع صحيحا لغويا.