AttributeError: объект «модуль» не имеет атрибута «баллы»

Я получаю сообщение об ошибке при попытке использовать функцию precision из nltk.metrics.scores. Я пробовал много разных импортов, но безуспешно.

Я просмотрел файлы в своих каталогах python (см. Ниже), и функция есть, но просто «не могу коснуться этого/этого». Я посмотрел на:

/usr/local/lib/python2.7/dist-packages/nltk/metrics
/usr/local/lib/python2.7/dist-packages/nltk/metrics/scores.py

Вот что мне показывает мой терминал:

File "/home/login/projects/python-projects/test.py", line 39, in <module>
  precision = nltk.metrics.scores.precision(correct[CLASS_POS], predicted[CLASS_POS])
AttributeError: 'module' object has no attribute 'scores'

В своих поисках я наткнулся на эту ссылку, что дает мне два варианта, но я не знаю, как перейти к любому из них:

  • Очевидной причиной этого является то, что в settings.py нет каталога, содержащего blah, указанного в INSTALLED_APPS.
  • Менее очевидная причина: вы также получите эту ошибку, если в каталоге нет файла __init__.py.

person user5496322    schedule 28.10.2015    source источник
comment
попробуйте добавить и очистить файл с именем __init__.py в /usr/local/lib/python2.7/dist-packages/nltk/metrics, чтобы python мог распознать его как модуль и импортировать из него.   -  person Cyrbil    schedule 28.10.2015
comment
Какую ОС вы используете? Как вы установили NLTK (пип или что-то еще)? Какую версию NLTK и Python вы используете? Как вы импортировали nltk? Вы пробовали from nltk.metrics.score import precision?   -  person alvas    schedule 29.10.2015
comment
Обратите внимание на опечатку в моем предыдущем комментарии, я хотел сказать, вы пробовали from nltk.metrics.scores import precision?   -  person alvas    schedule 29.10.2015


Ответы (2)


Вкратце:

from nltk import precision

Коротко:

Это сложно. Проблема возникла из-за того, как был упакован NLTK. Если мы посмотрим на dir(nltk.metrics), внутри него нет ничего, кроме alignment_error_rate

>>> import nltk
>>> dir(nltk.metrics)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'alignment_error_rate']

Кстати, в новейшей версии NLTK alignment_error_rate был перемещен в nltk.translate.metrics, см. https://github.com/nltk/nltk/blob/develop/nltk/translate/metrics.py#L10 . Пакет nltk.translate немного нестабилен, потому что он все еще находится в стадии разработки.

Возвращаясь к пакету метрик из https://github.com/nltk/nltk/blob/develop/nltk/metrics/__init__.py, мы видим следующее:

from nltk.metrics.scores import          (accuracy, precision, recall, f_measure,
                                          log_likelihood, approxrand)
from nltk.metrics.confusionmatrix import ConfusionMatrix
from nltk.metrics.distance        import (edit_distance, binary_distance,
                                          jaccard_distance, masi_distance,
                                          interval_distance, custom_distance,
                                          presence, fractional_presence)
from nltk.metrics.paice           import Paice
from nltk.metrics.segmentation    import windowdiff, ghd, pk
from nltk.metrics.agreement       import AnnotationTask
from nltk.metrics.association     import (NgramAssocMeasures, BigramAssocMeasures,
                                          TrigramAssocMeasures, ContingencyMeasures)
from nltk.metrics.spearman        import (spearman_correlation, ranks_from_sequence,
                                      ranks_from_scores)

в основном это означает, что функции из пакета метрик были закодированы вручную и расширены до nltk.metrics.__init__.py. Так что, если бы импорт остановился здесь, dir(metrics) перечислил бы здесь все импортированные метрики.

Но поскольку на более высоком уровне, на nltk.__init__.py https://github.com/nltk/nltk/blob/develop/nltk/__init__.py#L131, пакеты были импортированы с использованием :

from nltk.metrics import *

Теперь все оценки показателей были импортированы на верхний уровень, что означает, что вы можете:

>>> from nltk import precision
>>> from nltk import spearman_correlation
>>> from nltk import NgramAssocMeasures

Но вы по-прежнему можете получить доступ к любым модулям промежуточного уровня, которые находятся в nltk.metrics и не импортированы в nltk.metrics.__init__.py. Но вы должны использовать правильные пространства имен, поскольку функции сохраняются в соответствующем каталоге. Обратите внимание, что они не будут отображаться в dir(nltk.metrics), но являются допустимыми способами импорта функции:

>>> from nltk.metrics import spearman
>>> from nltk.metrics import paice
>>> from nltk.metrics import scores
<function precision at 0x7fb584a34938>
>>> scores.precision
>>> spearman.spearman_correlation
<function spearman_correlation at 0x7fb5842b3230>
>>> from nltk.metrics.scores import precision
>>> precision
<function precision at 0x7fb584a34938>
person alvas    schedule 29.10.2015

Замените импорт nltk.metrics на это:

from nltk.metrics import *

Теперь вызовите точность или баллы или отзыв напрямую.

person Akash Kandpal    schedule 19.06.2018