简言之:
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)
基本上,这意味着从metrics包中的函数已经手动编码并推送到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>
/usr/local/lib/python2.7/dist-packages/nltk/metrics
中添加一个名为__init__.py
的空文件,这样Python就可以将其识别为模块并从中导入。 - Cyrbilfrom nltk.metrics.score import precision
吗? - alvasfrom nltk.metrics.scores import precision
了吗? - alvas