美文网首页
文本分类的思路

文本分类的思路

作者: 曦宝 | 来源:发表于2018-11-02 10:27 被阅读79次

终于在老公的言语讽刺之下,我终于把文本分类做了,虽然觉得之前我自己思考的文本分类的思路还是有一些可取之处的,但是考虑到我的文章或许可以给有需要的网友参考,因此还是不要误导别人了,直接给出正确的思路吧。

这里有一个重要问题要好好强调一下。

语料库最好大而全,否则严重影响分类效果。

好了下面就是正题了。

我在网上找了很多参考的文章,但是我觉得大同小异相互抄袭,都是转换成Bunch类型。
Bunch类型是sklearn的datasets中一种数据类型,和python中的字典型(dic)类似。


image.png

可以看看源码里面的描述。

第一步,切词

首先,介绍一下数据。我拿到的语料库是在网上下载的,复旦大学的中文文本分类的语料库。


image.png

打开是类似于上图的一个txt文档。


image.png
整体文件里面是这样的一个一个的文件夹,文件夹名就是类别名,打开每个文件夹里面属于这个类别的一系列文章。
这个是训练数据,测试数据可以在训练数据里面复制几个,或者自己随意找几个。

第二,读取每个文件夹中的每个文件,然后再用结巴分词,将分词后的文章按照原来的文件夹名和文件名重新存储一下。


image.png
这里有几个提一下,首先看到的分词方法是结巴分词。第二,看到的是原文档是GB2312,分词以后重新存储为utf-8型的。
第三,提醒一下,训练集和测试集都要切词。

第二,将切词后的文档转换成Bunch型。

from sklearn.datasets.base import Bunch
下图是方法。


image.png

还是要将训练集和测试集一起转换成Bunch型。我在代码里的注释十分仔细了。有兴趣的可以跟进去看一下源码,Bunch型其实和字典型很像。

第三,计算tf-idf

# 构建tfidf的向量空间
def vector_space(stopword_path, bunch_path, space_path, train_tfidf_path=None):
    # 加载停词表
    stpwrdlst = readfile(stopword_path).splitlines()
    # 加载bunch型
    bunch = readbunchobj(bunch_path)
    # 这里的tfidfspace定义了一个新的Bunch类型,在之前的bunch基础上增加了tdm=[],vocabulary={}两项。
    tfidfspace = Bunch(target_name=bunch.target_name, label=bunch.label, filenames=bunch.filenames, tdm=[],
                       vocabulary={})

    # 从主函数进来第一次调用这个方法的时候(对训练数据)train_tfidf_path实际为空,
    # 也就是说进入了else部分,然后writebunchobj,写了一个bunch的类型,也就是train数据的tfidf的向量空间。
    # 第二次在进入这个方法的时候,train_tfidf_path就不为空了,因此进入了if的部分,
    # 跟上面一样if执行完了以后又执行了writebunchobj,写了一个bunch类型,也就是test数据的tfidf的向量空间。
    if train_tfidf_path is not None:
        trainbunch = readbunchobj(train_tfidf_path)
        tfidfspace.vocabulary = trainbunch.vocabulary
        vectorizer = TfidfVectorizer(stop_words=stpwrdlst, sublinear_tf=True, max_df=0.5,
                                     vocabulary=trainbunch.vocabulary)
        tfidfspace.tdm = vectorizer.fit_transform(bunch.contents)

    else:
        vectorizer = TfidfVectorizer(stop_words=stpwrdlst, sublinear_tf=True, max_df=0.5)
        tfidfspace.tdm = vectorizer.fit_transform(bunch.contents)
        tfidfspace.vocabulary = vectorizer.vocabulary_

    writebunchobj(space_path, tfidfspace)
    print("tf-idf词向量空间实例创建成功!!!")

第四,分类预测

这个就比较简单了,在sklearn的分类器中分类算法都可以替换。


image.png

这个虽然觉得大家都应该知道,但是还是提醒一下吧,在调用分类算法的时候,要先fit一下train数据,然后在predict一下test数据。

相关文章

  • 文本分类的思路

    终于在老公的言语讽刺之下,我终于把文本分类做了,虽然觉得之前我自己思考的文本分类的思路还是有一些可取之处的,但是考...

  • CNN文本分类

    概述 CNN文本分类,是将CNN处理图像的思路移植到文本问题上。具体的理论可以阅读‘Convolutional N...

  • 用深度学习(CNN RNN Attention)解决大规模文本分

    应用深度学习解决淘宝商品的类目预测问题的项目,总结下文本分类领域特别是应用深度学习解决文本分类的相关的思路、做法和...

  • 零基础入门NLP - 新闻文本分类(赛题理解)

    本文是零基础入门NLP - 新闻文本分类的第一篇作业,定位是对赛题的精简和解题思路开拓。 读题 任务 新闻文本分类...

  • 文本分类V1

    outline 什么是文本分类 特征工程+分类器 TextCNN 什么是文本分类 文本分类是自然语言处理的一个基本...

  • 文本分类;数据增强;模型微调 2020-02-25

    文本分类 文本情感分类数据集 使用循环神经网络进行情感分类 使用卷积神经网络进行情感分类文本分类是自然语言处理的一...

  • Python篇—文本分类

    1.自然语言整体概览 文本分类方法集锦基于text-cnn文本分类基于SVM基于dnn的文本情感分析多类别文本分类...

  • 文本分类

    文本分类的一般流程: 预处理 文本表示及特征选择 构造分类器 分类 文本分类的应用 垃圾邮件的判定:是否为垃圾邮件...

  • WWDC2018之Create ML(二)

    在上一篇我们主要讲了如何用CreateML分类图片,那么这一次,我们使用文本分类的功能。 何为文本分类? 文本分类...

  • 2018-11-10

    LSTM的应用 文本分类LSTM文本分类:使用LSTM的最后一个状态 文本分类中不用one-hot编码,使用emb...

网友评论

      本文标题:文本分类的思路

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