سؤال

أحتاج إلى أخذ فقرة من النص واستخراج قائمة "العلامات" منها.معظم هذا واضح تمامًا.ومع ذلك فأنا بحاجة إلى بعض المساعدة الآن في استخلاص قائمة الكلمات الناتجة لتجنب التكرارات.مثال:المجتمع / المجتمعات

لقد استخدمت تطبيقًا لخوارزمية Porter Stemmer (أنا أكتب بلغة PHP بالمناسبة):

http://tartarus.org/~martin/PorterStemmer/php.txt

يعمل هذا إلى حد ما، لكنه لا يُرجع الكلمات "الحقيقية".المثال أعلاه ينبع من "commun".

لقد جربت "Snowball" (مقترح ضمن سلسلة رسائل Stack Overflow أخرى).

http://snowball.tartarus.org/demo.php

بالنسبة لمثالي (المجتمع/المجتمعات)، فإن كلمة Snowball تنبع من كلمة "communiti".

سؤال

هل هناك أي خوارزميات جذعية أخرى يمكنها القيام بذلك؟هل قام أي شخص آخر بحل هذه المشكلة؟

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

هل كانت مفيدة؟

المحلول

المشكلة الأساسية هنا هي أن الخوارزميات الجذعية تعمل على أساس صوتي يعتمد كليًا على قواعد التهجئة الخاصة باللغة مع عدم وجود فهم فعلي للغة التي يعملون بها.لإنتاج كلمات حقيقية، ربما يتعين عليك دمج مخرجات المصدر مع شكل من أشكال وظيفة البحث لتحويل الجذور إلى كلمات حقيقية مرة أخرى.أستطيع أن أرى بشكل أساسي طريقتين محتملتين للقيام بذلك:

  1. حدد موقع أو أنشئ قاموسًا كبيرًا يربط كل مصدر محتمل بكلمة فعلية.(على سبيل المثال، المجتمع -> المجتمع)
  2. قم بإنشاء وظيفة تقارن كل جذع بقائمة من الكلمات التي تم اختصارها إلى هذا الجذر وتحاول تحديد أي منها أكثر تشابهًا.(على سبيل المثال، مقارنة كلمة "communiti" بكلمة "communiti" و"communities" بطريقة يتم من خلالها التعرف على كلمة "communiti" باعتبارها الخيار الأكثر تشابهًا)

شخصيًا، أعتقد أن الطريقة التي سأفعل بها ذلك ستكون شكلًا ديناميكيًا للرقم 1، وبناء قاعدة بيانات قاموس مخصصة عن طريق تسجيل كل كلمة تم فحصها بالإضافة إلى ما تنبع منه ثم افتراض أن الكلمة الأكثر شيوعًا هي الكلمة التي ينبغي أن تكون مستخدم.(على سبيل المثال، إذا كان النص المصدري يستخدم "المجتمعات" أكثر من "المجتمع"، فقم بتعيين المجتمعات -> المجتمعات.) سيكون النهج القائم على القاموس أكثر دقة بشكل عام، كما أن بنائه بناءً على مدخلات الجذعية سيوفر النتائج مخصصة للنصوص الخاصة بك، مع العيب الأساسي هو المساحة المطلوبة، والتي لا تشكل مشكلة بشكل عام هذه الأيام.

نصائح أخرى

إذا فهمت بشكل صحيح، فإن ما تحتاجه ليس ساقًا بل أداة ليماتيزر.Lemmatizer هي أداة تحتوي على معرفة بالنهايات مثل -ies, -ed, ، وما إلى ذلك، وأشكال الكلمات الاستثنائية مثل مكتوب, ، إلخ.يقوم Lemmatizer بتعيين صيغة الكلمة المدخلة إلى الكلمة الخاصة بها، والتي من المؤكد أنها كلمة "حقيقية".

هناك العديد من lemmatizers للغة الإنجليزية، لقد استخدمت فقط morpha رغم ذلك.مورفا هو مجرد ملف lex كبير يمكنك تجميعه في ملف قابل للتنفيذ.مثال الاستخدام:

$ cat test.txt 
Community
Communities
$ cat test.txt | ./morpha -uc
Community
Community

يمكنك الحصول على المورفا من http://www.informatics.sussex.ac.uk/research/groups/nlp/carroll/morph.html

مرحبًا، لا أعلم إذا كان هذا متأخرًا جدًا، ولكن هناك نص برمجي واحد فقط لـ PHP ينتج كلمات حقيقية: http://phpmorphy.sourceforge.net/ - لقد استغرق الأمر مني وقتًا طويلاً للعثور عليه.يجب تجميع جميع السيقان الأخرى، وحتى بعد ذلك فإنها تعمل فقط وفقًا لخوارزمية بورتر، التي تنتج السيقان، وليس الليما (أي.المجتمع = المجتمع).يعمل PhpMorphy بشكل جيد تمامًا، ومن السهل تثبيته وتهيئته، ويحتوي على قواميس باللغة الإنجليزية والروسية والألمانية والأوكرانية والإستونية.كما يأتي أيضًا مع برنامج نصي يمكنك استخدامه لتجميع قواميس أخرى.الوثائق باللغة الروسية، لكن ضعها عبر ترجمة جوجل وسيكون الأمر سهلاً.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top