文本文档的分类是在scikit-learn中一个简单的任务,但在NLTK中没有很好的支持,虽然有一些像这个样的繁琐做法。我想用NLTK进行预处理并用scikit-learn进行分类,于是我发现了NLTK中的SklearnClassifier,但出现了一点问题。
在scikit-learn中一切都很好:
from sklearn.naive_bayes import MultinomialNB
from sklearn.multiclass import OneVsRestClassifier
X_train = [[0, 0], [0, 1], [1, 1]]
y_train = [('first',), ('second',), ('first', 'second')]
clf = OneVsRestClassifier(MultinomialNB())
clf.fit(X_train, y_train)
print clf.classes_
结果是['first' 'second']
,这是我的期望。但当我尝试在NLTK中使用相同的代码时:
from nltk.classify import SklearnClassifier
X_train = [{'a': 1}, {'b': 1}, {'c': 1}]
y_train = [('first',), ('second',), ('first', 'second')]
clf = SklearnClassifier(OneVsRestClassifier(MultinomialNB()))
clf.train(zip(X_train, y_train))
print clf.labels()
结果是[('first',), ('second',), ('first', 'second')]
,但它不是正确的结果。是否有任何解决方案?