python中文文本分类

一,中文文本分类流程:

  1. 预处理
  2. 中文分词
  3. 结构化表示-构建词向量空间
  4. 权重策略—TF-IDF
  5. 分类器
  6. 评价.

二,具体实现

  1. 预处理

1.1 打标签:

对评论数据打好标签,这里将汽车评论数据分为正面和负面两类。假设负面标签为0,正面标签为1.

1.2 整理数据集:

一般可分为训练集,验证集和测试集。为什么要这么分,这篇博文给了浅显的解释:训练集、验证集和测试集的意义本试验将数据分为训练集和测试集两类。

1.3 得到训练集预料库:

例如,训练集文本的路径:train_data/train_positive.xlsx , train_data/train_negtive.xlsx…

1.4 得到测试集语料库:

例如,测试集文本的路径:test_data/test_negtive.xlsx , test_data/test_positive.xlsx…

2 中文分词

2.1 概述

第1节预处理中的语料库都是没有分词的原始语料(即连续的句子,而后面的工作需要把文本分为一个个单词),现在需要对这些文本进行分词,只有这样,才能在基于单词的基础上,对文档进行结构化表示。
中文分词有其特有的难点(相对于英文而言),最终完全解决中文分词的算法是基于概率图模型的条件随机场(CRF),CRF的原理我们不细说了,直接调用中文分词的工具,这里用的是python第三方分词库jieba(所采用的算法就是条件随机场)
关于分词库的更多讨论可以参考这篇文章:python分词工具推荐

2.2 jieba分词简述

首先讲解jieba分词使用方法(详细的和更进一步的,可以参考jieba分词原理

jieba.cut 方法接受三个输入参数: 需要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型
jieba.cut_for_search 方法接受两个参数:需要分词的字符串;是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8
jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode),或者用
jieba.lcut 以及 jieba.lcut_for_search 直接返回 list
jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定义分词器,可用于同时使用不同词典。jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。

实例代码:

import jieba
 
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list))  # 全模式
 
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list))  # 精确模式
 
seg_list = jieba.cut("他来到了网易杭研大厦")  # 默认是精确模式
print(", ".join(seg_list))
 
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")  # 搜索引擎模式
print(", ".join(seg_list))

输出:
【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学

【精确模式】: 我/ 来到/ 北京/ 清华大学

【新词识别】:他, 来到, 了, 网易, 杭研, 大厦    (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)

【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日本京都大

接下来,我们要通过python编程,来将1.3节中的 ./train_data/原始训练语料库和1.4节中的./test_data/原始测试语料库进行分词,分词后保存的路径可以设置为:./train_data_seg/和./test_data_seg/

代码如下,思路很简单,就是将excel里面的评论数据一条一条取出来保存到DataFrame中,然后遍历DataFrame中的文本数据,将每个文本依次进行分词之后保存到对应路径。

# encoding = utf-8

import sys
import os
import jieba
import jieba.analyse
import pandas as pd
import xlrd
import importlib
from pandas import DataFrame
from sklearn.datasets.base import Bunch
'''
#全模式
seg_list = jieba.cut("我是一位小仙女", cut_all = True)
print("Full Mode:" + "/".join(seg_list))

#精确模式,cut_all 属性不写的话也是默认精确模式
seg_list = jieba.cut("DX7 Prime是国产汽车SUV由内到外最上乘的!", cut_all= False)
print("Default Mode:"  + "/".join(seg_list))
'''

#保存至文件
def savefile(savepath, content):
    with open(savepath, "wb") as fp:
        fp.write(content.encode("utf-8"))

# 
  • 3
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值