文档分类

作者: 青椒rose炒饭 | 来源:发表于2019-07-04 14:48 被阅读0次

这里就简单的举一个例子吧!第一次看的时候完全没有明白是怎么回事,后面睡了一下起来就明白了。主要是对于朴素贝叶斯分类模型不了解吧。

使用影评语料库获取所有的评论,训练模型后,模型能够根据文章,判断文章是正面的还是反面的。关键还是下面这张图。


有监督分类

首先是获取影评语料,这个库是按照积极(pos)和消极(neg)将文本以文件的形式分开。朴素贝叶斯分类模型,使用提取到的特征,以及正确的标签作为训练数据。

  • 特征提取:获取语料库的前2000个单词,就使用文章是否拥有这些单词为特征。

    #获取影评库中的单词构建频率分布
    fd = nltk.FreqDist(movie_reviews.words())
    #选取前2000个用于就够特征,特征集就是这些单词在不在文件中
    word_feature = list(fd.keys())[:2000]
    
    #特征提取器:
    def document_features(document):
        document = set(document)
        features = {}
        for w in word_feature:
            features[w] = w in document
    
        return features
    
  • 数据:首先要获取分类,再获取文件,最后获取文件所有单词传入特征提取函数,返回的特征集和文本的标签组成元组。这样就得到了训练数据。

      #获取数据
      documents =  [
              (document_features(movie_reviews.words(d)),c)
               for c in movie_reviews.categories()
               for d in movie_reviews.fileids(c)
           ]
      train_set,test_set = documents[100:],documents[:100]
    
  • 训练数据:前面的字典就是特征 {单词:存在与否},单词选用的是语料库的前2000个。

{.... , 'manhunter': False, 'scottish': False, 'brian': False, 'cox': False}, 'neg')

  • 朴素贝叶斯分类模型
    直接在nltk模块下调用就可以了很方便的。

     #训练模型
      classifier = nltk.NaiveBayesClassifier.train(train_set)
    

对于如何实现分类的需要取具体了解贝叶斯模型的原理。在本程序中一开始很不理解怎么就实现分类了? 仔细查看训练数据之后才明白过来。训练集提取文章的标签(neg/pos)然后是特征集(是否包含单词),就将这两项交给模型告诉他这个特征集是正面的或者是反面的。模型自己会学习,我感觉就是稍微复杂一点的匹配吧。


整个程序:

import nltk
#导入影评语料库
from nltk.corpus import movie_reviews
#构建语料库中所有单词的频率分布
fd = nltk.FreqDist(movie_reviews.words())
#获取前2000个单词,在提取特征值的时候会用到,
#此程序的特征集将这2000个单词组成字典,评论中包含这个词则值为True,不包含则为False
word_feature = list(fd.keys())[:2000]

#特征提取器:
def document_features(document):
    #将影评转换为集合,判断一个单词是否在集合中比判断它是否在list链表中快
    document = set(document)
    features = {}
    #遍历2000个单词构建当前文本的特征集,
    # 如果此单词存在则值为True,反之False
    for w in word_feature:
        features[w] = w in document
    return features

#获取数据
# 转换为了各个文本的 (特征集,标签)
documents =  [
        (document_features(movie_reviews.words(d)),c)
         for c in movie_reviews.categories()
         for d in movie_reviews.fileids(c)
     ]
#分为训练集和测试集
train_set,test_set = documents[100:],documents[:100]
#训练模型
classifier = nltk.NaiveBayesClassifier.train(train_set)
# 评估模型准确度
print(nltk.classify.accuracy(classifier,test_set))

输出结果:0.78

相关文章

  • 文档分类

    这里就简单的举一个例子吧!第一次看的时候完全没有明白是怎么回事,后面睡了一下起来就明白了。主要是对于朴素贝叶斯分类...

  • plm之文档管理

    1.确认文档分类 2.文档的维护 3.文档的

  • 项目开发涉及文档分类

    项目开发涉及文档分类

  • 1.1.02_文档过滤 Document Filtering

    文档过滤 Document Filtering 文档分类是机器智能(machine intelligence)的一...

  • 2019-02-11

    [TOC] 文档分类 BRD-Business Requirements Document(商业需求文档)市场分析...

  • 文本分类方法有哪些

    文本分类问题: 给定文档p(可能含有标题t),将文档分类为n个类别中的一个或多个文本分类应用: 常见的有垃圾邮件识...

  • 文档、配置与变更管理

    一、文档的分类 文档从重要性和质量要求方面可以分为非正式文档和正式文档;从项目周期角度可分为开发文档、产品文档、管...

  • 技术文档 | 文档对项目的重要性

    项目文档的分类 项目文档的重要性 常见的误区 写文档是浪费时间?没时间写文档?文档本身也是产出:coding的时间...

  • iOS contentInset属性

    参考文档:1、contentSize、contentInset和contentOffset区别 分类: iphon...

  • iOS 组件实现方案(Block)

    组件概述 一、什么才是好架构 代码整齐,分类明确,没有 Common,没有 Core; 不用文档,或很少文档,就能...

网友评论

    本文标题:文档分类

    本文链接:https://www.haomeiwen.com/subject/qptlhctx.html