Nltk Sklearn Unigram+Bigram

2024-05-13 08:47:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用NLTK和学习包装。在

classifier = SklearnClassifier(LinearSVC(), int,True)
classifier.train(train_set)

当我只使用unigrams和build featureset时,例如:

^{pr2}$

一切都很好。但是当我想用搭配的时候就有一个问题。功能集看起来不同:

{ {"Cristiano" : True, "Ronaldo : True, ("Cristiano", "Ronaldo") : True }

然后我收到错误:

feature_names.sort()TypeError: unorderable types: tuple() < str()

如何使用unigrams和bigrams为nltk-sklearn包装器正确地创建特性集?在


Tags: buildtruetrainintsetfeaturesetclassifiernltk
2条回答

您可以使用来自scikit-learnCountVectorizer来生成ngram。在

演示:

import sklearn.feature_extraction.text

ngram_size = 1
train_set = ['Cristiano plays football', 'Ronaldo like football too']

vectorizer = sklearn.feature_extraction.text.CountVectorizer(ngram_range=(ngram_size,ngram_size))
vectorizer.fit(train_set) # build ngram dictionary
ngram = vectorizer.transform(train_set) # get ngram
print('ngram: {0}\n'.format(ngram))
print('ngram.shape: {0}'.format(ngram.shape))
print('vectorizer.vocabulary_: {0}'.format(vectorizer.vocabulary_))

输出:

^{pr2}$

如果要继续使用NLTK warper,可以在训练分类器之前执行以下操作:

classifier._vectorizer.sort = False

相关问题 更多 >