一. 文本预处理

文本处理的核心任务是要把非结构化和半结构化的文本转换成结构化的形式,即向量空间模型,在这之前,必须要对不同类型的文本进行预处理,在大多数文本挖掘任务中,文本预处理的步骤都是相似的,基本步骤如下:

1.选择处理的文本范围

2.建立分类文本语料库

2.1训练集语料(已经分好类的文本资源)

目前较好的中文分词语料库有复旦大学谭松波中文分词语料库和搜狗新闻分类语料库。复旦大学的语料库小一些,但是质量很高。

下文中采用的中文语料库。

未分词训练语料库的路径G:\workspace\TextClassification\train_corpus_small

语料目录结构如图:

未分词训练语料一共包含10个子目录,目录名称为已预料类别。该类所属的训练文本就位于子目录中,以连续的自然数编号。

2.2测试集语料

待分类的文本语料,可以是训练集的一部分,也可以是外部来源的文本语料。

本文选用的测试集下载

未分词测试语料库的路径G:\workspace\TextClassification\test_corpus

3.文本格式转换

不同格式的文本不论采取何种处理方式,都要统一转换为纯文本文件。

4.检测句子边界

标记句子的结束

二. 分词介绍

将一个汉字序列(句子)切分成一个个单独的词。分词就是将连续的字序列按照一定的规范重新组合成次序列的过程。解决中文分词的算法是基于概率图模型的条件随机场(CRF)。文本结构化表示简单分为四大类:词向量空间模型、主题模型、依存句法的树表示、RDF的图表示。

1.下载安装jieba

2.创建分词,语料库路径\train_corpus_seg

2.1设置字符集,并导入jieba分词包

import sys

import os

import jieba

#配置utf-8输出环境

reload(sys)

sys.setdefaultencoding('utf-8')

#定义两个函数,用于读取和保存文件

def savefile(savepath,content): #保存至文件

fp=open(savepath,"wb")

fp.write(content)

fp.close()

def readfile(path): #读取文件

fp=open(path,"rb")

content=fp.read()

fp.close()

return content

def corpus_segment(corpus_path, seg_path):

catelist=os.listdir(corpus_path)#获取corpus_path下的所有子目录

for mydir in catelist:

class_path=corpus_path+mydir+"/" #拼出子目录的路径

seg_dir=seg_path+mydir+"/" #拼出分词后语料分类目录

if not os.path.exists(seg_dir): #是否存在目录

os.makedirs(seg_dir) #没有,则创建

file_list=os.listdir(class_path) #获取目录下的所有文件

for file_path in file_list: #遍历目录下的文件

fullname=class_path+file_path #拼出文件名全路径

content=readfile(fullname).strip() #读取文件的内容

#删除换行和多余的空格

content=content.replace("\r\n","").strip()

content_seg=jieba.cut(content)#为文件内容分词

#将处理好的文件保存到分词后语料目录

savefile(seg_dir+file_path," ".join(content_seg))

#整个语料库的分词主程序

corpus_path="train_corpus_small/"#未分次训练语料库路径

seg_path="train_corpus_seg/" #分词后训练语料库的路径

corpus_segment(corpus_path,seg_path)

corpus_path="test_corpus/"#未分次测试语料库路径

seg_path="test_corpus_seg/" #分词后测试语料库的路径

corpus_segment(corpus_path,seg_path)

2.2分词的结果

截止目前,我们已经得到了分词后的训练集语料库和测试集语料库,下面我们要把这两个数据集表示为变量,从而为下面程序调用提供服务。在实际应用中,为了后续生成向量空间模型的方便,这些分词后的文本信息还要转换成文本向量信息,并对象化。需要引入Scikit-Learn库的Bunch数据结构。(分类集名称列表、分类标签列表、文件路径、文件词的向量形式)。Bunch就相当于python中的字典。你往里面传什么,它就存什么。

用Bunch表示,就是:

from sklearn.datasets.base import Bunch

bunch = Bunch(target_name=[],label=[],filenames=[],contents=[])

在Bunch对象里面创建了有4个成员:

target_name:是一个list,存放的是整个数据集的类别集合。

label:是一个list,存放的是所有文本的标签。

filenames:是一个list,存放的是所有文本文件的名字。

contents:是一个list,分词后文本文件词向量形式。

如图:

将分好词的文本文件转换并持久化为Bunch类的代码如下:

# -*- coding: utf-8 -*-

import os #python内置的包,用于进行文件目录操作,我们将会用到os.listdir函数

import pickle #导入cPickle包并且取一个别名pickle

from sklearn.datasets.base import Bunch

bunch=Bunch(target_name=[],label=[],filenames=[],contents=[])

def corpus2Bunch(wordbag_path,seg_path):

catelist=os.listdir(seg_path)

bunch.target_name.extend(catelist)

for mydir in catelist:

class_path=seg_path+mydir+"/"

file_list=os.listdir(class_path)

for file_path in file_list:

fullname=class_path+file_path

bunch.label.append(mydir)

bunch.filenames.append(fullname)

bunch.contents.append(readfile(fullname).strip())

file_obj=open(wordbag_path,"wb")

pickle.dump(bunch,file_obj) #将文件bunch保存到file_obj中

file_obj.close()

#对训练集进行Bunch化操作

wordbag_path="train_word_bag/train_set.dat"

seg_path="train_corpus_seg/"

corpus2Bunch(wordbag_path,seg_path)

# 对测试集进行Bunch化操作:

wordbag_path = "test_word_bag/test_set.dat" # Bunch存储路径

seg_path = "test_corpus_seg/" # 分词后分类语料库路径

corpus2Bunch(wordbag_path,seg_path)

python如何预处理文本分类_文本分类二之文本预处理相关推荐

  1. 朴素贝叶斯分类器 文本分类_构建灾难响应的文本分类器

    朴素贝叶斯分类器 文本分类 背景 (Background) Following a disaster, typically you will get millions and millions of ...

  2. 自然语言处理文本分析_通过自然语言处理释放文本分析的力量

    自然语言处理文本分析 深度学习 , 自然语言处理 (Deep Learning, Natural Language Processing) Natural language is a language ...

  3. android 富文本框架_五种JavaScript富文本编辑器,总有一款适合你

    全文共2099字,预计学习时长4分钟 也许,你时常会遇到要开发基于Web的文本编辑器的情况.有时候,只需实现一个简约且轻量级的应用程序,不必有其他任何不必要的功能.而有时候,你的首要任务是保护用户的商 ...

  4. 表单如何添加大的文本框_在 Flutter 中进行文本框的创建和设定

    文本框作为一个接收用户输入的组件,被广泛应用于表单构建.即时通讯.搜索等场景中. Flutter 提供了两个开箱即用的文本框组件:TextField 和 TextFormField. 1. 文本框 T ...

  5. 图片 富文本 粘贴_用C++实现富文本控件(中): 撤销

    用C++实现富文本控件: 撤销 本节是关于撤销重做相关实现. 项目地址: Github-RichED 本文备份地址: github 撤销重做 这就被称为UNDO/REDO之类的, 简直是'增量'的代表 ...

  6. python中文文本分析_基于CNN的中文文本分类算法(可应用于垃圾邮件过滤、情感分析等场景)...

    基于cnn的中文文本分类算法 简介 参考IMPLEMENTING A CNN FOR TEXT CLASSIFICATION IN TENSORFLOW实现的一个简单的卷积神经网络,用于中文文本分类任 ...

  7. python 爬取财经新闻_金融财经新闻的文本爬取

    大家一定还记得<金融数据的获取--一个爬虫的简单例子>这篇文章中介绍的爬虫思想和方法吧.看过之后,大多数人都会有这样的感受,虽然爬虫的原理比较简单,但是正则表达式却很难写.对于每个页面内容 ...

  8. 鸢尾花python分类_鸢尾花分类——Python机器学习起步

    引言 一直对AI有着莫大的兴趣,最近买了周志华先生的西瓜书,也是干货满满,最近也想从实战方面入手,了解一下机器学习,本文以<Python机器学习基础教程>为指导. 环境 Sublimete ...

  9. python 动物分类_动物分类及图片

    1 动物的分类 爬行类动物. 飞禽类动物. 哺乳类动物. 昆虫类动物. 家禽类动物. 鱼类动物. 食肉类动物. 爬行类动物 : 蛇 蜥蜴 蛇 蜥蜴 壁虎 .龟.鳖.鳄鱼 等 属于脊椎动物亚门.它们的身 ...

  10. python 动物分类_动物分类及图片.doc

    动物分类及图片 动物的分类爬行类动物.飞禽类动物.哺乳类动物.昆虫类动物.家禽类动物.鱼类动物.食肉类动物. 爬行类动物:蛇 蜥蜴蛇 蜥蜴 壁虎 .龟.鳖.鳄鱼等 属于脊椎动物亚门.它们的身体构造和生 ...

最新文章

  1. python 多分类 recall_python实现二分类和多分类的ROC曲线教程
  2. Android动画开发——Animation动画效果
  3. 抽象类可以创建对象吗_【基础篇】java-抽象类与继承的补充
  4. 推荐一些经过实践检验的学习方法
  5. 外设驱动库开发笔记26:nRF24L01无线通讯驱动
  6. 让人想骂街的 Python 炫技操作:条件语句的七种写法
  7. OpenFeign, Zuul, Gateway相互不兼容的问题总结
  8. json_decode用法
  9. docker删除为none的镜像
  10. intellij idea 在什么地方打开终端Terminal
  11. Java知识积累——参数个数可变的函数(Varargs)
  12. Android 基于x5Webview 浏览文件 office文档
  13. 自动化测试之路 —— Appium使用教程
  14. SNOWNLP情感分析报错解决
  15. Tcl学习2——Tcl语言语法
  16. logback 配置 日志
  17. BOOST的JSON解析库Boost.JSON简介
  18. 利用Python爬取网页内容
  19. 华为担纲建设基础软硬件国家新一代AI开放创新平台
  20. anchor译中文_anchor是什么意思中文翻译

热门文章

  1. 重启Windows的PowerShell
  2. 兼容sdk7iOS7的issue解决小片段总结
  3. 学习英文之社区,博客及源码 转载
  4. 发现一本好书--《Windows用户态程序高效排错 》
  5. 【MyBatis】bind标签
  6. mysql count group by_MySQL中使用count与group by 的统计问题
  7. hadoop api 复制文件_Hadoop核心架构是怎样的?
  8. 使用计算机音箱进行音乐播放的过程,插卡音箱音乐播放顺序调整及歌单式1
  9. 什么是反射,为什么要用反射,反射的知识讲解
  10. python画图x轴时间间隔_matplotlib绘图-设置横坐标为日期显示范围与间隔