Я не могу ограничить некоторые арабские термины с помощью 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 (root -базовый стеммер / глубокий стеммер), второе слово 'من' является стоп-словом, вы должны использовать фильтр стоп-слов перед тем, как начать использовать Snowball ArabicStemmer. Также этот стеммер не обрабатывает регистр, когда слово состоит из 2 букв.
В любом случае, я исправил проблему в этом 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 (https://nltk.ci.cloudbees.com/job/pull_request_tests/454/TOXENV=py27-jenkins,jdk=jdk8latestOnlineInstall/testReport/nose.failure/Failure/runTest /). Я думаю, все, что вам нужно сделать, это поставить # -*- 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:
Возможно, стоит сделать эти стоп-слова строками в Юникоде.
В остальном, похоже, ваше исправление хорошо работает для меня - еще раз спасибо!
ps Еще одно предложение: включение набора для тестирования происходит намного быстрее, чем включение в список, поэтому, возможно, стоит вместо этого сделать этот список запрещенных слов набором.
@richbalmer вы используете python2.7? ,
Возможно, стоит сделать эти стоп-слова строками в Юникоде.
сделано для python2.7, протестируйте его еще раз и скажите, что у меня все работает нормально. я обновил PR
Ага, я использую 2.7. Хорошо выглядишь @LBenzahia - еще раз спасибо!
По-прежнему возникает ошибка:
AttributeError: объект 'ArabicStemmer' не имеет атрибута '_ArabicStemmer__conjugation_suffix_verb_present'
Я использую Python 3
@NouraAls решена в PR
Самый полезный комментарий
@richbalmer Спасибо, что сообщили о проблеме.
@LBenzahia Не могли бы вы помочь разобраться в этом? Заранее спасибо!