NLTK SklearnClassifier错误

时间:2013-12-05 15:26:17

标签: python classification nltk scikit-learn

我正在尝试使用NLTK的SklearnClassifier和MultinomialNB对文本文档进行分类。这是代码:

pipeline = Pipeline([('tfidf', TfidfTransformer()),
                             ('chi2', SelectKBest(chi2, k=1000)),
                             ('nb', MultinomialNB())])
classifier = SklearnClassifier(pipeline)

test_skl = []
t_test_skl = []
for d in test_set:
    test_skl.append(d[0])
    t_test_skl.append(d[1])

p_class = classifier.batch_classify(test_skl)

print classification_report(t_test_skl, p_class, labels=list(set(t_test_skl)),target_names=cls_set)

我收到了这个错误:

Traceback (most recent call last):
  File "classify.py", line 72, in <module>
    p_class = classifier.batch_classify(test_skl)
  File "/Users/me/anaconda/lib/python2.7/site-packages/nltk-3.0a3-py2.7.egg/nltk/classify/scikitlearn.py", line 84, in batch_classify
    X = self._vectorizer.transform(featuresets)
  File "/Users/me/anaconda/lib/python2.7/site-packages/sklearn/feature_extraction/dict_vectorizer.py", line 213, in transform
    vocab = self.vocabulary_
AttributeError: 'DictVectorizer' object has no attribute 'vocabulary_'

我正在使用NLTK 3.0a3和scikit-learn 0.14.1。

任何线索?

由于

3 个答案:

答案 0 :(得分:3)

没有训练分类器。在尝试对任何内容进行分类之前,请调用其train方法。 (作为此代码的作者,我承认错误消息可能更友好。)

答案 1 :(得分:1)

您的DictVectorizer对象没有词汇表 - 意味着它尚未安装,或者已经安装了空数据集。

您需要使用可用的数据集在DictVectorizer上调用fit(X [,y])方法。

vocabulary_属性是矢量化器在fittet之后存储特征矩阵的位置。没有词汇 - 没有可用的矢量化器。

答案 2 :(得分:0)

将管道更改为:

pipeline = Pipeline([('tfidf', TfidfVectorizer()),
                             ('chi2', SelectKBest(chi2, k=1000)),
                             ('nb', MultinomialNB())])

然后它应该工作