Nltk: ArabicStemmer AttributeError

Erstellt am 11. Okt. 2017  ·  7Kommentare  ·  Quelle: nltk/nltk

Ich kann bestimmte arabische Begriffe mit dem SnowballStemmer nicht eindämmen. Viele Begriffe werden erfolgreich gestemmt, aber einige Begriffe führen dazu, dass ein AttributeError ausgelöst wird. Im Folgenden finden Sie ein minimales Beispiel, das beim Begriff "von" fehlschlägt.

(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

Hilfreichster Kommentar

@richbalmer Vielen Dank, dass Sie das Problem gemeldet haben.

@LBenzahia Könnten Sie helfen, dies zu untersuchen? Danke im Voraus!

Alle 7 Kommentare

@richbalmer Vielen Dank, dass Sie das Problem gemeldet haben.

@LBenzahia Könnten Sie helfen, dies zu untersuchen? Danke im Voraus!

Hallo @richbalmer, danke für die Meldung. Das erste Wort 'تسدد' ist der bestmögliche Stamm, da der auf einem leichten Stemming-Algorithmus basierende arabische Schneeball-Stemmer Präfixe / Suffixe behandelt. Wenn Sie nach der Wurzel von "تسدد" suchen, können Sie ISRI (Wurzel) verwenden -basierter Stemmer / Deep Stemming), Das zweite Wort 'من' ist ein Stoppwort. Sie sollten den Stoppwortfilter verwenden, bevor Sie Snowball ArabicStemmer verwenden. Auch dieser Stemmer behandelt den Fall nicht, wenn das Wort 2 Buchstaben hat.
Wie auch immer, ich habe das Problem in dieser PR # 1856 behoben.
Danke nochmal !

@LBenzahia, danke, dass hast ! Ich erhalte:

  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

Dies scheint auch dazu zu führen, dass die Tests auf Jenkins fehlschlagen (https://nltk.ci.cloudbees.com/job/pull_request_tests/454/TOXENV=py27-jenkins,jdk=jdk8latestOnlineInstall/testReport/nose.failure/Failure/runTest) /). Ich denke, alles was Sie tun müssen, ist # -*- coding: utf-8 -*- an die Spitze von stem/util.py .

Nachdem ich das lokal behoben habe, erhalte ich außerdem eine 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:

Es könnte sich lohnen, diese Stoppwörter zu Unicode-Zeichenfolgen zu machen.

Ansonsten sieht es so aus, als ob dein Fix für mich gut funktioniert - nochmals vielen Dank!

ps Ein weiterer Vorschlag: Das Testen der Set-Inklusion ist viel schneller als das Einfügen von Listen. Daher kann es sinnvoll sein, diese Stoppwortliste stattdessen zu einem Set zu machen.

@richbalmer benutzt du python2.7? ,

Es könnte sich lohnen, diese Stoppwörter zu Unicode-Zeichenfolgen zu machen.

getan für Python2.7, testen Sie es erneut und sagen Sie mir, es funktioniert gut für mich. Ich habe die PR aktualisiert

Ja, ich benutze 2.7. Sieht gut aus @LBenzahia - nochmals

Immer noch den Fehler:
AttributeError: Das Objekt 'ArabicStemmer' hat kein Attribut '_ArabicStemmer__conjugation_suffix_verb_present'.

Ich benutze Python 3

@NouraAls in PR gelöst

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

stevenbird picture stevenbird  ·  3Kommentare

alvations picture alvations  ·  4Kommentare

alvations picture alvations  ·  4Kommentare

alvations picture alvations  ·  4Kommentare

peterbe picture peterbe  ·  5Kommentare