أنا أفشل في اشتقاق بعض المصطلحات العربية باستخدام 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'
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 حلها في العلاقات العامة
التعليق الأكثر فائدة
richbalmer شكرًا للإبلاغ عن المشكلة.
LBenzahia هل يمكنك المساعدة في النظر في هذا؟ شكرا مقدما!