الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

طريقة عمل stemming بإستخدام porter stemmer

بدأه عبقري زمانه في 12 ديسمبر 2011 · 4 رد · 1,980 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله

أود معرفة كيفية عمل stemming للكلمات

(أي إلغاء الزوائد واللواحق للكلمة وإرجاعها إلى أصلها ) وذلك بإستخدام طريقة

porter stemmer

,,

حيث أني بحثت كثيرا ولم أجد الطريقه المناسبه

ولكن وجدت هذا الرابط

http://tartarus.org/martin/PorterStemmer/

به الكثيير من أكواد porter

ولكن لم أعرف كيفية إستخدامها فهي طويله جداا

,,

وجزاكم الله خير

^_^

#2

السلام عليكم ..

  1. الموقع فيه خوارزمية Porter بعدة لغات ..و في أسفل رابط للكود باللغات المختلفة و هذا رابطمباشر للجافا .
  2. تشغيل البرنامج : البرنامج يقوم بقراءة الكلمات من ملف و إيجاد الجذر لها و لتشغيله استخدم :
    java Stemmer d:/f1.txt d:/f2.txt

    أو عدل الكود من الداخل و ثبت اسماء الملفات كمايلي

       	char[] w = new char[501];
        	Stemmer s = new Stemmer();
        	args = new String[] {"d:/f.txt"};
        	for (int i = 0; i < args.length; i++)

    مع إكمال باقي الكود .

  3. شرح الخوارزمية : ادخل للكود ستجد الإجراء stem و داخله مايلي
    public void stem()
    	{
        	k = i - 1;
        	if (k > 1)
        	{
            	step1();
            	step2();
            	step3();
            	step4();
            	step5();
            	step6();
        	}
        	i_end = k + 1;
        	i = 0;
    	}

    1. كل خطوة step مشروح فوقها ما تقوم به , مثلا step تزيل الأحرف التي تدل على الجمع و الــ ed و الــ ing .
    2. الأجراء step2 يقوم بتحويل الــ y غلى i (عند وجود حرف صوتي vowel .. لا أعرف أين؟)
    3. step4 التعامل مع الــ -ic-, -full, -ness etc
    4. step6 التعامل مع الــ final e
  4. يجب العودة إلى الشرح النظري لهذه الخوارزمية و حاول تشغيل الكود خطوة بخطوة , و تعتبر هذه الخوارزمية شهيرة حيث تستخدمها الكثير من الــ Information Systems و خاصة تلك المتعلقة بالبحث مثل Lucene.
  5. ملاحظة : يفضل أن لا يحوي ملف الدخل على أكثر من 500 حرف لانه على مايبدو يضع الكلمات في array of char with size =501 .
  6. قمت بتجريب الخوارزمية بالكلمات : schools studies lies slaves و كان الناتج school studi li slave و الله أعلم .
2

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3

جزاك الله خير أخوي حسام

بالنسبه للنقطة رقم 2

ماضبطت معي!

حفظت الملف بإسم java وغيرت الأسم اللي وضعته أنت ولكن يعرض لي رسالة خطأ ..بأنه لايسمح لي وضع هذا النوع من الكود لأنه يحتوي علي (.) (نقطه) في الكود

<<يقصد امتداد الملف

ووضعت قبله كلمة import ولكن مازال موجود الخطأ ووضعت اسم الملف بين علامتي تنصيص ومازال الخطأ موجود!

<<ربما يكون استفساري تافه

ولكن أنا ليس لدي معرفه حتى بأساسيات الجافا

حيث اني أريد إستخدام نتائج stemmer داخل كود موجود مسبقا

مع العلم أني استخدم برنامج netbeans 7

,,

وشكرا

#4

السلام عليكم ..

  1. بعد تحميل الملف و حفظة باللاحقة .java (تأكد من ذلك حيث أنه تكون اللواحق مخفية في الويندوز بشكل افتراضي) .
  2. افتح الكود و ادهب إلى الإجراء main و قم باضافة السطر التالي :
    args = new String[] {"d:/f.txt"};

    قبل حلقة الــ for مباشرة , بحث يكون الناتج بعد التعديل :

    public static void main(String[] args)
    	{
        	char[] w = new char[501];
        	Stemmer s = new Stemmer();
        	args = new String[] {"d:/f.txt"};
        	for (int i = 0; i < args.length; i++)

    مع بقاء باقي الكود دون نغيير ..

  3. الملف يجب أن يكون ضمن ملفات المشروع في الـ netbeans .
  4. نقرة يمينية على الملف ثم نأخذ Run File .. فيشتغل .. و يقوم بقراءة الكلمات من الملف الموجود على السواقة D و اسم الملف f.txt كما هو محدد بالكود ..
2

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#5

أخوي حسام

اللي فهمته من كلامك أن هذه التعديلات يتم عملها على الملف الخاص بـ stem

هل هذا صحيح؟

فغيرت الإمتداد للملف ليصبح java.java

ووضعت ملف stemmer و الملف المراد القراه منه كلاهما في نفس المجلد الخاص بالمشروع

ووضعت هذا الكود داخل ملف stemmer مثل ماقلت

args = new String[] {"input.txt"};

,,

ولكن لا أعلم هل هذه الطريقه تفيد في برنامجي أم لا؟

حيث أن البرنامج لديه طريقتين لكي يأخذ النص إما

1- يأخذ النص الموجود في الملف input.txt

أو 2- يأخذ النص من console

ثم يقوم بعدة عمليات عليه مثل حذف علامات الترقيم وحذف stop word

ثم يستخدم الملف الخاص بـ stemmer

ومن ثم يطبع النتيجه ..

فأعتقد أني فقط أحتاج إلى الأمر الذي من خلاله أستطيع الدخول على ملف stemmer

وتطبيق عملياته على النص الموجود

ولكن لا أعلم ماهو :sad:

,,

وجزااك الله كل خير

ولا حرمك الله الأجر

^_^

تم تعديل هذه المشاركة بواسطة عبقري زمانه في 15 ديسمبر 2011 في 16:40

مواضيع مشابهة