2015-10-28 16 views
7

precisionからnltk.metrics.scoresまでの関数を使用しようとするとエラーが発生します。私は多くの異なる輸入品を試しましたが、成功はありませんでした。AttributeError: 'module'オブジェクトに 'スコア'属性がありません

私は私のpythonディレクトリ(下記参照)上のファイルを調べましたが、その機能はそこにありますが、 "これに触れることはできません"ということです。

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

これは私の端末が私を示しているものである:私は見て、私は私の2つのオプションが与えこのlink、につまずいた私の検索で

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が含まれていない場合にもこのエラーが発生します。要するに
+1

追加してみてくださいと '__init __という名前の空のファイル' /usr/local/lib/python2.7/dist-packagesにpy'/nltk/metrics'を実行するので、pythonはそれをモジュールとしてインポートすることができます。 – Cyrbil

+0

あなたはどのOSを使用していますか?どうやってNLTK(pipなど)をインストールしましたか?どのバージョンのNLTKとPythonを使用していますか?どのようにnltkをインポートしましたか? 'nltk.metrics.score import precision'から試しましたか? – alvas

+0

私の前のコメントのタイプミスに注意してください。あなたは 'nltk.metrics.scores import precision'を試しましたか? – alvas

答えて

11

from nltk import precision 

ロングでは:

これはトリッキーです。この問題は、NLTKがどのようにパッケージ化されたかによって発生しました。私たちはdir(nltk.metrics)を見れば、NLTKの最先端のバージョンでalignment_error_rateところで

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

以外のその内部の何も、ありません、alignment_error_ratenltk.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__.pyhttps://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.__init__.pyにインポートされていないnltk.metricsにある中間レベルのモジュールにはまだアクセスできます。しかし、関数がそれぞれのディレクトリにどのように保存されるかについては、正しい名前空間を使用する必要があります。これらは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> 
関連する問題