专栏首页python3python实现文本分类

python实现文本分类

一、中文文本分类流程:

1. 预处理

2. 中文分词

3. 结构化表示-构建词向量空间

4.权重策略-TF-IDF

5. 分类器

6. 评价

二、具体细节

1.预处理

    1.1. 得到训练集语料库

    本文采用复旦中文文本分类语料库,下载链接:https://download.csdn.net/download/laobai1015/10431543

    1.2 得到测试集语料库

    同样采用复旦中文文本分类语料库,下载链接:https://download.csdn.net/download/laobai1015/10431564

2. 中文分词

    第1小节预处理中的语料库都是没有分词的原始语料(即连续的句子,而后面的工作需要我们把文本分为一个个单词),现在需要对这些文本进行分词,只有这样才能在基于单词的基础上,对文档进行结构化表示。

中文分词有其特有的难点,最终完全解决中文分词的算法是基于概率图模型的条件随机场(CRF)。中文分词的工具有很多,但是比较著名的几个都是基于java的,这里推荐python的第三方库jieba(所采用的算法就是条件随机场)。

通过pip安装jieba:打开cmd,切换到Python所在目录下,执行命令:pip install jieba

    然后通过Python编程,将训练语料库和测试语料库进行分词,分词后保存的路径可以自己设置。

#!/usr/bin/env python  
# -*- coding: UTF-8 -*-  
 
import sys  
import os  
import jieba  
# 配置utf-8输出环境  
reload(sys)  
sys.setdefaultencoding('utf-8')  
# 保存至文件  
def savefile(savepath, content):  
    with open(savepath, "wb") as fp:  
        fp.write(content)  
    ''''' 
    上面两行是python2.6以上版本增加的语法,省略了繁琐的文件close和try操作 
    2.5版本需要from __future__ import with_statement 
    '''  
# 读取文件  
def readfile(path):  
    with open(path, "rb") as fp:  
        content = fp.read()  
    return content  
  
def corpus_segment(corpus_path, seg_path):  
    ''''' 
    corpus_path是未分词语料库路径 
    seg_path是分词后语料库存储路径 
    '''  
    catelist = os.listdir(corpus_path)  # 获取corpus_path下的所有子目录  
    ''''' 
    其中子目录的名字就是类别名,例如: 
    train_corpus/art/21.txt中,'train_corpus/'是corpus_path,'art'是catelist中的一个成员 
    '''  
  
    # 获取每个目录(类别)下所有的文件  
    for mydir in catelist:  
        ''''' 
        这里mydir就是train_corpus/art/21.txt中的art(即catelist中的一个类别) 
        '''  
        class_path = corpus_path + mydir + "/"  # 拼出分类子目录的路径如:train_corpus/art/  
        seg_dir = seg_path + mydir + "/"  # 拼出分词后存贮的对应目录路径如:train_corpus_seg/art/  
  
        if not os.path.exists(seg_dir):  # 是否存在分词目录,如果没有则创建该目录  
            os.makedirs(seg_dir)  
  
        file_list = os.listdir(class_path)  # 获取未分词语料库中某一类别中的所有文本  
        ''''' 
        train_corpus/art/中的 
        21.txt, 
        22.txt, 
        23.txt 
        ... 
        file_list=['21.txt','22.txt',...] 
        '''  
        for file_path in file_list:  # 遍历类别目录下的所有文件  
            fullname = class_path + file_path  # 拼出文件名全路径如:train_corpus/art/21.txt  
            content = readfile(fullname)  # 读取文件内容  
            '''''此时,content里面存贮的是原文本的所有字符,例如多余的空格、空行、回车等等, 
            接下来,我们需要把这些无关痛痒的字符统统去掉,变成只有标点符号做间隔的紧凑的文本内容 
            '''  
            content = content.replace("\r\n", "")  # 删除换行  
            content = content.replace(" ", "")#删除空行、多余的空格  
            content_seg = jieba.cut(content)  # 为文件内容分词  
            savefile(seg_dir + file_path, " ".join(content_seg))  # 将处理后的文件保存到分词后语料目录  
  
    print "中文语料分词结束!!!"  
  
''''' 
if __name__=="__main__": 
简单来说如果其他python文件调用这个文件的函数,或者把这个文件作为模块 
导入到你的工程中时,那么下面的代码将不会被执行,而如果单独在命令行中 
运行这个文件,或者在IDE(如pycharm)中运行这个文件时候,下面的代码才会运行。 
即,这部分代码相当于一个功能测试。 
 
'''  
if __name__=="__main__":
    #对训练集进行分词  
    corpus_path = "D:/work/train/train/"  # 未分词分类语料库路径  
    seg_path = "D:/work/train/train/train_corpus_seg/"  # 分词后分类语料库路径  
    corpus_segment(corpus_path,seg_path)  
  
    #对测试集进行分词  
    corpus_path = "D:/work/test/test/"  # 未分词分类语料库路径  
    seg_path = "D:/work/test/test/test_corpus_seg/"  # 分词后分类语料库路径  
    corpus_segment(corpus_path,seg_path)  

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 图说Python菜鸟版:第18章 JSON文件解析

    本文是作者在录制课程《Python全栈工程师魔鬼训练营》时,花费大量时间和精力整理出来的内容,历时近半年时间。在和学员的上万次互动过程中,发现Python初学者...

    数据饕餮
  • python 实现 2048 游戏 (一)

    初学 python ,大家恐怕都想找到一条终南捷径,会产生譬如 3 天精通 python 这样不太切合实际的想法。这种想法是危险的,一旦你发现你根本不可能做到...

    用户2870857
  • 图说Python菜鸟版:第12章 正则表达式

    本文是作者在录制课程《Python全栈工程师魔鬼训练营》时,花费大量时间和精力整理出来的内容,历时近半年时间。在和学员的上万次互动过程中,发现Python初学者...

    数据饕餮
  • #PY小贴士# 我的python开发环境如何搬到其他电脑上?

    昨天说到了 git,说到了在 git 中不应该上传代码以外的文件。那么就有人问了:

    Crossin先生
  • gunicorn accesslog 为空的一种可能解决办法

    在 gunicorn 的配置文件中,有 accesslog 和 errorlog 两项,分别用来记录接口的访问历史和服务启动以及错误消息。

    Alan Lee
  • 图说Python菜鸟版:第17章 xml文件解析

    本文是作者在录制课程《Python全栈工程师魔鬼训练营》时,花费大量时间和精力整理出来的内容,历时近半年时间。在和学员的上万次互动过程中,发现Python初学者...

    数据饕餮
  • 简单的语音分类任务入门(需要些深度学习基础)

    上次公众号刚刚讲过使用 python 播放音频与录音的方法,接下来我将介绍一下简单的语音分类处理流程。简单主要是指,第一:数据量比较小,主要是考虑到数据量大,花...

    用户2870857
  • 文言文不能编程乎?中国大四小哥哥曰:非也

    这就是最近被盛传的:文言文编程语言“wenyan-lang”。GitHub上线5天时间,已经突破了6000星。

    新智元
  • 数据分析篇 | Pandas 时间序列 - 日期时间索引

    DatetimeIndex 主要用作 Pandas 对象的索引。DatetimeIndex 类为时间序列做了很多优化:

    叫我龙总
  • 这42个Python小例子,太走心~ [看哭系列]

    除了简单地判断是否匹配之外,正则表达式还有提取子串的强大功能。用()表示的就是要提取的分组(group)。比如:^(\d{3})-(\d{3,8})$分别定义了...

    AI算法与图像处理

扫码关注云+社区

领取腾讯云代金券