Nltk: ArabicStemmer AttributeError

تم إنشاؤها على ١١ أكتوبر ٢٠١٧  ·  7تعليقات  ·  مصدر: nltk/nltk

أنا أفشل في اشتقاق بعض المصطلحات العربية باستخدام SnowballStemmer. يتم اشتقاق العديد من المصطلحات بنجاح ولكن بعض المصطلحات تؤدي إلى ظهور خطأ AttributeError. يرجى الاطلاع أدناه للحصول على مثال بسيط يفشل في المصطلح "من".

(anaconda2-4.4.0) richard-balmer-macbook:~ richardbalmer$ pip freeze | grep nltk
nltk==3.2.5
(anaconda2-4.4.0) richard-balmer-macbook:~ richardbalmer$ ipython
Python 2.7.13 |Anaconda custom (x86_64)| (default, Dec 20 2016, 23:05:08)
Type "copyright", "credits" or "license" for more information.

IPython 5.3.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: from nltk.stem.snowball import SnowballStemmer

In [2]: stemmer = SnowballStemmer('arabic')

In [3]: stemmer.stem(u'تسدد')
Out[3]: u'\u062a\u0633\u062f\u062f'

In [4]: stemmer.stem(u'من')
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-4-ffa733106049> in <module>()
----> 1 stemmer.stem(u'من')

/Users/richardbalmer/.pyenv/versions/anaconda2-4.4.0/lib/python2.7/site-packages/nltk/stem/snowball.pyc in stem(self, word)
    762                 modified_word = self.__Suffix_Verb_Step2b(modified_word)
    763                 if not self.suffix_verb_step2b_success:
--> 764                     modified_word = self.__Suffix_Verb_Step2a(modified_word)
    765         if self.is_noun:
    766             modified_word = self.__Suffix_Noun_Step2c2(modified_word)

/Users/richardbalmer/.pyenv/versions/anaconda2-4.4.0/lib/python2.7/site-packages/nltk/stem/snowball.pyc in __Suffix_Verb_Step2a(self, token)
    533                     break
    534
--> 535                 if suffix in self.__conjugation_suffix_verb_present and len(token) > 5:
    536                     token = token[:-2]  # present
    537                     self.suffix_verb_step2a_success = True

AttributeError: 'ArabicStemmer' object has no attribute '_ArabicStemmer__conjugation_suffix_verb_present'
bug pleaseverify resolved tests

التعليق الأكثر فائدة

richbalmer شكرًا للإبلاغ عن المشكلة.

LBenzahia هل يمكنك المساعدة في النظر في هذا؟ شكرا مقدما!

ال 7 كومينتر

richbalmer شكرًا للإبلاغ عن المشكلة.

LBenzahia هل يمكنك المساعدة في النظر في هذا؟ شكرا مقدما!

مرحبًا richbalmer ، شكرًا لك على الإبلاغ ، الكلمة الأولى "تسدد" هي أفضل جذع ممكن لأن مشتق Snowball العربي المستند إلى خوارزمية الاشتقاق الخفيف يتعامل مع البادئات / اللاحقات ، إذا كنت تبحث عن جذر "تسدد" يمكنك استخدام ISRI (الجذر -بناء جذري / عميق) ، الكلمة الثانية 'من' هي كلمة توقف ، يجب عليك استخدام مرشح كلمة التوقف قبل البدء في استخدام Snowball ArabicStemmer ، كما أن هذا الجذع لا يتعامل مع الحالة عندما تحتوي الكلمة على حرفين.
على أي حال ، لقد أصلحت المشكلة في PR # 1856.
شكرا مرة اخرى !

LBenzahia شكرًا للنظر في هذا الأمر بسرعة! انا احصل:

  File "/Users/richardbalmer/src/nltk/nltk/stem/util.py", line 24
    arabic_stopwords = ['إذ',
                             ^
SyntaxError: Non-ASCII character '\xd8' in file /Users/richardbalmer/src/nltk/nltk/stem/util.py on line 24, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

والذي يبدو أيضًا أنه يتسبب في فشل الاختبارات على Jenkins /). أعتقد أن كل ما عليك فعله هو وضع # -*- coding: utf-8 -*- في الجزء العلوي من stem/util.py .

أيضًا ، بعد إصلاح ذلك محليًا ، أحصل على UnicodeWarning:

/Users/richardbalmer/src/nltk/nltk/stem/snowball.py:748: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
  if word in arabic_stopwords:

قد يكون من المفيد إنشاء سلاسل يونيكود كلمات الإيقاف هذه.

بخلاف ذلك ، يبدو أن الإصلاح الخاص بك يعمل بشكل جيد بالنسبة لي - شكرًا مرة أخرى!

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

richbalmer هل تستخدم python2.7؟ و

قد يكون من المفيد إنشاء سلاسل يونيكود كلمات الإيقاف هذه.

تم إجراؤه لـ python2.7 ، اختبره مرة أخرى وأخبرني ، إنه يعمل جيدًا بالنسبة لي. لقد قمت بتحديث العلاقات العامة

نعم أنا أستخدم 2.7. حسن المظهرLBenzahia - شكرا مرة أخرى!

لا يزال الخطأ موجودًا:
AttributeError: الكائن "ArabicStemmer" ليس له سمة "_ArabicStemmer__conjugation_suffix_verb_present"

أنا أستخدم بيثون 3

NouraAls حلها في العلاقات العامة

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات