Nltk: ArabicStemmer AttributeError

Dibuat pada 11 Okt 2017  ·  7Komentar  ·  Sumber: nltk/nltk

Saya gagal membendung istilah Arab tertentu menggunakan SnowballStemmer. Banyak istilah yang berhasil di-root tetapi beberapa istilah menyebabkan AttributeError dimunculkan. Silakan lihat di bawah untuk contoh minimal yang gagal pada istilah 'dari'.

(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

Komentar yang paling membantu

@richbalmer Terima kasih telah melaporkan masalah ini.

@LBenzahia Bisakah Anda membantu untuk melihat ini? Terima kasih sebelumnya!

Semua 7 komentar

@richbalmer Terima kasih telah melaporkan masalah ini.

@LBenzahia Bisakah Anda membantu untuk melihat ini? Terima kasih sebelumnya!

Hai @richbalmer terima kasih atas laporannya, Kata pertama 'تسدد' adalah kata dasar terbaik karena Snowball arabic stemmer berdasarkan algoritma light stemming berhubungan dengan prefiks / sufiks, jika Anda mencari root dari "تسدد" Anda dapat menggunakan ISRI (root -based stemmer / deep stemming), kata kedua 'من' adalah stop word, Anda harus menggunakan filter stop word sebelum mulai menggunakan Snowball ArabicStemmer, juga stemmer ini tidak menangani kasus ketika kata tersebut memiliki 2 huruf.
Bagaimanapun, saya telah memperbaiki masalah dalam PR # 1856 ini.
Terima kasih lagi !

@LBenzahia terima kasih telah melihat ini begitu cepat! Saya mendapatkan:

  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

Yang juga tampaknya menyebabkan pengujian gagal di Jenkins (https://nltk.ci.cloudbees.com/job/pull_request_tests/454/TOXENV=py27-jenkins,jdk=jdk8latestOnlineInstall/testReport/nose.failure/Failure/runTest /). Saya pikir semua yang perlu Anda lakukan adalah meletakkan # -*- coding: utf-8 -*- di atas stem/util.py .

Juga, setelah memperbaikinya secara lokal saya mendapatkan 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:

Mungkin layak membuat string unicode stopwords itu.

Selain itu, sepertinya perbaikan Anda berfungsi dengan baik untuk saya - terima kasih lagi!

ps Satu saran lain: menguji penyertaan set cukup jauh lebih cepat daripada penyertaan daftar, jadi mungkin ada baiknya menjadikan daftar stopword sebagai satu set.

@richbalmer, apakah Anda menggunakan python2.7? ,

Mungkin layak membuat string unicode stopwords itu.

selesai untuk python2.7, uji lagi dan beri tahu saya, Ini berfungsi dengan baik untuk saya. Saya telah memperbarui PR

Yup saya menggunakan 2.7. Terlihat bagus @LBenzahia - terima kasih lagi!

Masih mengalami kesalahan:
AttributeError: Objek 'ArabicStemmer' tidak memiliki atribut '_ArabicStemmer__conjugation_suffix_verb_present'

Saya menggunakan python 3

@NouraAls diselesaikan di PR

Apakah halaman ini membantu?
0 / 5 - 0 peringkat