首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nltk Sklearn Unigram + Bigram

Nltk Sklearn Unigram + Bigram
EN

Stack Overflow用户
提问于 2015-08-27 22:25:44
回答 2查看 3.5K关注 0票数 1

我正在使用NLTK和nltk.sklearn包装器构建分类器。

代码语言:javascript
复制
classifier = SklearnClassifier(LinearSVC(), int,True)
classifier.train(train_set)

例如,当我只使用unigram和构建功能集时:

代码语言:javascript
复制
{"Cristiano" : True, "Ronaldo : True}

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

代码语言:javascript
复制
{ {"Cristiano" : True, "Ronaldo : True, ("Cristiano", "Ronaldo") : True }

然后我收到错误:

代码语言:javascript
复制
feature_names.sort()TypeError: unorderable types: tuple() < str()

如何使用unigram和二元语法为nltk sklearn wrapper正确创建功能集?

EN

回答 2

Stack Overflow用户

发布于 2015-08-31 03:21:42

您可以使用scikit-learn中的CountVectorizer来生成ngram。

演示:

代码语言:javascript
复制
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_))

输出:

代码语言:javascript
复制
ngram:   (0, 0) 1
  (0, 1)    1
  (0, 3)    1
  (1, 1)    1
  (1, 2)    1
  (1, 4)    1
  (1, 5)    1

ngram.shape: (2, 6)
vectorizer.vocabulary_: {u'cristiano': 0, u'plays': 3, u'like': 2, 
                         u'ronaldo': 4, u'football': 1, u'too': 5}
票数 2
EN

Stack Overflow用户

发布于 2016-04-20 06:32:51

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

代码语言:javascript
复制
classifier._vectorizer.sort = False
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32252075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档