我有问题。这是我的代码。 http://colorscripter.com/s/9vc2ryj
我错了。 evaluate_classifier(bigram_word_feats)就是我想要的。
我正在尝试通过SVM进行文本挖掘。 特征向量是二元模型。 但是我遇到了一个问题:
Traceback (most recent call last):
File "C:/Users/LG/Desktop/untitled1/TEST.py", line 184, in <module>
evaluate_classifier(bigram_word_feats)
File "C:/Users/LG/Desktop/untitled1/TEST.py", line 90, in evaluate_classifier
classifier.train(trainfeats)
File "C:\Users\LG\Anaconda3\lib\site-packages\nltk\classify\scikitlearn.py", line 115, in train
X = self._vectorizer.fit_transform(X)
File "C:\Users\LG\Anaconda3\lib\site-packages\sklearn\feature_extraction\dict_vectorizer.py", line 226, in fit_transform
return self._transform(X, fitting=True)
File "C:\Users\LG\Anaconda3\lib\site-packages\sklearn\feature_extraction\dict_vectorizer.py", line 190, in _transform
feature_names.sort()
TypeError: unorderable types: tuple() < str()
为什么会发生这种情况,我该如何解决? 什么是nltk分类器的过程? 把它放到我的专题词和句号中?然后它只生成svm模型?
哦,我正在使用python 3.我需要使用python 2吗?
答案 0 :(得分:1)
我认为问题在于nltk
期望字符串由字符串而不是元组索引。您可以尝试替换return
声明:
return dict([(ngram, True) for ngram in itertools.chain(words, bigrams)])
以下内容:
return dict([('|'.join (ngram), True) for ngram in itertools.chain(words, bigrams)])
negfeats = [featx(f) for f in word_split(negdata)]
posfeats = [featx(f) for f in word_split(posdata)]
...
trainlabels = [-1,] * negcutoff + [+1,] * poscutoff
classifier.train(trainfeats, trainlabels)
在定义 trainlabels
时,我遵循了在列表中使用算术运算符的风格,但我不会在代码中执行此操作,因为它使其不太可读。