2015-10-28 28 views
7

precision işlevini nltk.metrics.scores'dan kullanmaya çalışırken bir hata alıyorum. Birçok farklı ithalatı denedim ama başarılarım yok.AttributeError: ‘modül’ nesnesinin 'puanlar' özelliği yok

Python dizinlerimdeki dosyalara baktım (aşağıya bakın) ve işlev var, ama sadece "buna dokunamayacağım".

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

Bu benim terminali bana gösterilen budur: Ben baktım bana iki seçenek sunar bu link, üzerinde tökezledi benim aramalarda

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' 

ama bilmiyorum nasıl bunlardan birini geçin:

  • bu bariz nedeni settings.py INSTALLED_APPS listelenen dizin içeren vesaire sahip olmamasıdır.
  • Daha az belirgin bir neden: Dizin __init__.py bir dosya içermiyorsa bu hatayı da alacaksınız. Kısaca
+1

deneyin eklenmesi ve adlandırılmış boş bir dosya' __init __ py'. Bu bir işlev ithal etmek geçerli yollarını dir(nltk.metrics) göstermek ama vardır unutmayın/nltk/metrics' böylece python onu bir modül olarak tanımlayabilir. – Cyrbil

+0

Hangi işletim sistemini kullanıyorsunuz? NLTK'yi nasıl kurdunuz (pip veya başka bir şey)? NLTK ve python'un hangi sürümünü kullanıyorsunuz? Nltk'i nasıl ithal ettiniz? 'Nltk.metrics.score import precision' den denediniz mi? – alvas

+0

Önceki yorumumda yazım hatası olduğunu not et, 'nltk.metrics.scores import precision' den denediniz mi? – alvas

cevap

11

:

from nltk import precision 

uzun olarak:

Bu zordur. Sorun, NLTK'nin nasıl paketlendiğinden kaynaklandı. Biz dir(nltk.metrics) bakarsak, NLTK deneysel bir versiyonunda alignment_error_rate BTW

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

dışındaki bunun içinde bir şey, orada, alignment_error_ratenltk.translate.metrics taşındı, https://github.com/nltk/nltk/blob/develop/nltk/translate/metrics.py#L10 bakın. nltk.translate paketi biraz kararsız çünkü hala geliştirilme aşamasında.

https://github.com/nltk/nltk/blob/develop/nltk/metrics/__init__.py den geri ölçümlerini paketine dönecek olursak, biz görüyoruz:

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) 

temelde, bu ölçütleri paketten fonksiyonları elle kodlanmış ve nltk.metrics.__init__.py kadar itilmiş demektir. Bu nedenle, içe aktarmalar burada durursa, dir(metrics), burada içe aktarılan tüm metrikleri listeleyebilir.

Ama çünkü daha yüksek düzeyde, nltk.__init__.pyhttps://github.com/nltk/nltk/blob/develop/nltk/__init__.py#L131 de, paketler kullanılarak ithal edildi:

Artık tüm ölçümlerini yapabileceğiniz anlamına üst düzeye ithal edilmiş puanı
from nltk.metrics import * 

:

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

Ancak, nltk.metrics.__init__.py'da içe aktarılmayan nltk.metrics numaralı tüm orta düzey modüller erişebilirsiniz. Ancak, işlevin ilgili dizinde nasıl kaydedildiğiyle doğru ad alanlarını kullanmalısınız./usr/local/lib/python2.7/dist-packages `üzere

>>> 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> 
İlgili konular