python.nlp随笔(六)监督式分类

        选择电影评论语料库,每个评论归类为正面和负面['neg', 'pos']。

from nltk.corpus import movie_reviews
import nltk
import random 
documents = [(list(movie_reviews.words(fileid)), category) for category in movie_reviews.categories() for fileid in movie_reviews.fileids(category)]

random.shuffle(documents)

文档已经按类别标记完成。

movie_reviews.categories()
Out[13]: ['neg', 'pos']

接下来,为文档定义特征提取器,这样分类器就会知道应注意哪些方面的数据,对于文档主题识别,可以为每个词定义一个特性以表示该文档是否包含这个词。为了限制分类器需要处理的特征数目,构建整个语料库中出现次数前2000词的链表。然后定义一个特征提取器,简单地检查这些词是否在一个给定的文档中。

all_words = nltk.FreqDist(w.lower() for w in movie_reviews.words())
word_features = list(all_words)[:2000] 

def document_features(document): 
    document_words = set(document) 
    features = {}
    for word in word_features:
        features['contains({})'.format(word)] = (word in document_words)
    return features

训练和测试分类器以进行文档分类

featuresets = [(document_features(d), c) for (d,c) in documents]
train_set, test_set = featuresets[100:], featuresets[:100]
classifier = nltk.NaiveBayesClassifier.train(train_set)

output:

nltk.classify.accuracy(classifier,test_set)
Out[16]: 0.81

classifier.show_most_informative_features(5)
Most Informative Features
 contains(unimaginative) = True              neg : pos    =      8.5 : 1.0
        contains(shoddy) = True              neg : pos    =      7.1 : 1.0
          contains(mena) = True              neg : pos    =      7.1 : 1.0
        contains(suvari) = True              neg : pos    =      7.1 : 1.0
     contains(atrocious) = True              neg : pos    =      6.7 : 1.0




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值