机器学习算法与编程实践之中文文本分类

junjiang3 junjiang3     2022-09-20     457

关键词:

这周学习了机器学习算法与编程实践第二章——中文文本分类的部分内容。该章以文本挖掘为大背景,以文本分类算法为中心,详细介绍了中文文本分类项目的相关知识点。

一、文本挖掘与文本分类的概念

被普遍认可的文本挖掘的定义如下:文本挖掘是指从大量文本数据中抽取事先未知的、可理解的、最终可用的知识的过程,同时运用这些知识更好的组织信息以便将来参考。

文本挖掘的7个主要领域有:(1)搜索和信息检索,(2)文本聚类,(3)文本分类,(4)Web挖掘、(5)信息抽取,(6)自然语言处理,(7)概念提取。

而文本分类,通俗点讲,其实就是为用户给出的每个文档找到所属的正确类别,目前主要有两种文本分类方法,一是基于模式系统(通过运用知识工程技术),二是分类

模型(通过使用统计或者机器学习技术)。

二、文本分类项目

该节主要讲述了一个中文文本分类项目的主要流程,包括以下几个步骤:

(1)预处理:去除文本的噪音信息,例如HTML标签、文本格式转化、检测句子边界等。

(2)中文分词:使用中文分词器为文本分词,并去除停用词。

(3)构建词向量空间:统计文本词频,生成文本的词向量空间。

(4)权重策略——TF-IDF方法:使用TF-IDF发现特征词,并抽取为反映文档主题的特征。

(5)分类器:使用算法训练分类器。

(6)评价分类结果:分类器的测试结果分析。

2.1 文本预处理

文本预处理的核心任务就是要把非结构化和半结构化的文本转化为结构化的形式,及向量空间模型。在这之前,必须进行对不同类型的文本进行预处理。文本

预处理的步骤都相似,基本步骤如下:

(1)选择处理的文本范围

选择适当的范围取决与文本挖掘任务的目标,对于分类或者聚类任务,通常将整个文档作为处理单元,而对于情感分析,文档自动文摘或者信息检索,段落

或者章节则更合适。

(2)建立分类文本语料库

文本分类中所说的文本语料一般分为两大类:训练集语料和测试集语料。训练集语料是指已经分还累的文本资源,二测试集语料就是待分类的文本语料,可以是

训练集的一部分,也可以是外部来源的文本语料。该书截取了复旦大学谭松波中文文本分类语料库的部分进行实验。网址为http://www.threedweb.cn/thread-1288-1-1.html。

(3)文本格式转换

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

(4)检测句子边界

句子边界检测是分解整个文档,并转换成单独句子的过程。对于中文文本,它就是寻找“。”、“?”或者“!”等标点符号作为断句的依据。

2.2 中文分词介绍

中文分词指的是将一个汉字序列切分成一个个单独的词。分词就是讲连续的子序列按照一定的规范重新组合成词序列的过程。目前开源的比较成熟的

分析工具有北京理工大学张华平博士开发的中文分词系统和哈工大的分词系统。但是以上这些分词系统与python整合都比较麻烦,因此,在这里我们

使用python语言开发的分词系统jieba。

我们用jieba包来处理训练集语料库,代码如下。

#  _*_ coding:utf-8 _*_
import sys
import os
import jieba

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

corpus_path = "train_corpus_samll/" #未分词分类语料路径
seg_path = "train_corpus_seg/" #分词后分类语料库路径

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_path):
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.replace(" ","").strip()
content_seg = jieba.cut(content)

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

print "中文语料分词结束!!!"

这样我们就得到了分词后的一个训练集文件,并将其存在一个新的文件夹下。

当然,在实际应用中,为了后续生成向量空间模型的方便,这些分词后的信息还要转换为文本向量信息并对象化。这里需要引入一个Scikit-Learn库的Bunch数据结构。

Scikit-Learn库将会在后面的内容中详细介绍。今天先介绍到这里,下次接着介绍。

# wordbag_path:分词语料Bunch对象持久化文件路径
# seg_path:分词后分类语料库路径
def train_bunch(wordbag_path, seg_path):
catelist = os.listdir(seg_path)
bunch = Bunch(target_name=[], label=[], filenames=[], contents=[])
bunch.target_name.extend(catelist)
for mydir in catelist:
class_path = seg_path + mydir + "/"
file_list = os.list(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.dumps(bunch,file_obj)
file_obj.close()

print "构建文本对象结束"

 

机器学习算法原理与编程实践之朴素贝叶斯分类

在介绍朴素贝叶斯分类之前,首先介绍一下大家都比较了解的贝叶斯定理,即已知某条件概率,如何得到两个时间交换后的概率,也就是在已知P(A|B)的情况下如何求得P(B|A)?可以通过如下公式求得:而朴素贝叶斯分类是一种简单... 查看详情

毕业设计之---新闻分类系统(代码片段)

...设计中比较热门的,本质上是属于自然语言分类,可以使用机器学习算法去处理,也可以使用深度学习算法去处理.基本步骤如下:文本数据采集-->选择训练算法(机器学习/深度学习)-->进行训练-->检效果.本文章博主将介绍:从头... 查看详情

毕业设计之---新闻分类系统(代码片段)

...设计中比较热门的,本质上是属于自然语言分类,可以使用机器学习算法去处理,也可以使用深度学习算法去处理.基本步骤如下:文本数据采集-->选择训练算法(机器学习/深度学习)-->进行训练-->检效果.本文章博主将介绍:从头... 查看详情

机器学习实践:《python机器学习实践指南》中文pdf+英文pdf+代码

机器学习是近年来渐趋热门的一个领域,同时Python语言经过一段时间的发展也已逐渐成为主流的编程语言之一。《Python机器学习实践指南》结合了机器学习和Python语言两个热门的领域,通过利用两种核心的机器学习算法来将Python... 查看详情

阿旭机器学习实战33中文文本分类之情感分析--朴素贝叶斯knn逻辑回归(代码片段)

【阿旭机器学习实战】系列文章主要介绍机器学习的各种算法模型及其实战案例,欢迎点赞,关注共同学习交流。目录1.查看原始数据结构2.导入数据并进行数据处理2.1提取数据与标签2.2过滤停用词2.3TfidfVectorizer将文本向... 查看详情

《机器学习算法原理与编程实践》学习笔记

(上接第一章)1.2对象、矩阵与矢量化编程1.2.1对象与维度(略)1.2.2初识矩阵(略)1.2.3矢量化编程与GPU运算(略)1.2.4理解数学公式与NumPy矩阵运算1.矩阵的初始化#coding:utf-8importnumpyasnp#导入NumPy包#创建3*5的全0矩阵和全1的矩阵my... 查看详情

《机器学习算法原理与编程实践》学习笔记

(上接第一章)1.2.5Linalg线性代数库  在矩阵的基本运算基础之上,NumPy的Linalg库可以满足大多数的线性代数运算。  .矩阵的行列式  .矩阵的逆  .矩阵的对称  .矩阵的秩  .可逆矩阵求解线性方程1.矩阵的行列式In[4... 查看详情

阿里云机器学习平台pai之分类实践(代码片段)

💜这篇博客是机器学习PAI的实践部分,主要演示的是分类算法在平台上的使用方法,对往期内容感兴趣的小伙伴可以查看一下内容👇:hadoop专题:hadoop系列文章.spark专题:spark系列文章.阿里云系列:阿里云MaxComputerSQL... 查看详情

《机器学习系统设计》之应用scikit-learn做文本分类(上)

前言:  本系列是在作者学习《机器学习系统设计》([美]WilliRichert)过程中的思考与实践,全书通过Python从数据处理。到特征project,再到模型选择,把机器学习解决这个问题的过程一一呈现。书中设计的源码和数据集已... 查看详情

机器学习实践:基于支持向量机算法对鸢尾花进行分类(代码片段)

摘要:Listitem使用scikit-learn机器学习包的支持向量机算法,使用全部特征对鸢尾花进行分类。本文分享自华为云社区《支持向量机算法之鸢尾花特征分类【机器学习】》,作者:上进小菜猪。一.前言1.1本文原理支... 查看详情

nlp之文本分类

...法的发展,特别是在90年代后互联网在线文本数量增长和机器学习学科的兴起,逐渐形成了一套解决大规模文本分类问题的经典玩法,这个阶段的主要套路是人工特征工程+浅层分类模型。整个文本分类问题就拆分成了特征工程和... 查看详情

常见机器学习算法原理+实践系列6(朴素贝叶斯分类)

朴素贝叶斯NBNativeBayes是一种简单有效的分类算法,贝叶斯定律用这个条件概率公式来表示:P(A|B)=P(B|A)*P(A)/P(B),其中P(A|B)的意思是,在B发生的前提下,发生A的概率,P(A),P(B)代表现实中发生A以及B的概率,实际上取决于我们输入... 查看详情

数学之路(机器学习实践指南)-文本挖掘与nlp

#条件频率,每个词条在不同分类中出现的频率print"------------------"cfd=nltk.ConditionalFreqDist(samplewords)fdist=cfd[u‘财经‘]forwordinfdist:printwordprint"---------流动性出现次数-----------"printcfd[u‘财经‘][u‘流 查看详情

郑捷《机器学习算法原理与编程实践》学习笔记(第六章神经网络初步)6.5boltzmann机算法

6.5Boltzmann机算法6.5.1问题的提出6.5.2模拟退化原理6.5.3Boltzmann分布与退火过程6.5.4Boltzmann机类与退火过程   Boltzmann网络初始时,需要根据参数设置一系列的初始值,主要参数在_init_中  (1)构造方法如下classBoltzmannNet(object... 查看详情

郑捷《机器学习算法原理与编程实践》学习笔记(第四章推荐系统原理)kmeans

(上接第二章)  4.3.1KMeans算法流程  算法的过程如下:  (1)从N个数据文档随机选取K个文档作为质心  (2)对剩余的每个文档测量其到每个质心的距离,并把它归到最近的质心的类  (3)重新计算已经得到的各... 查看详情

郑捷《机器学习算法原理与编程实践》学习笔记(第七章预测技术与哲学)7.3岭回归

7.3岭回归7.3.1验证多重共线性7.3.2岭回归理论7.3.3岭际分析7.3.4k值的判断7.3.5辅助函数 (1)导入多维数据集:加载数据集defloadDataSet(filename):numFeat=len(open(filename).readline().split(‘ ‘))-1#getnumberoffieldsdataMat=[]labelMat=[]fr=ope 查看详情

郑捷《机器学习算法原理与编程实践》学习笔记(第七章预测技术与哲学)7.1线性系统的预测

 7.1.1回归与现代预测 7.1.2最小二乘法 7.1.3代码实现(1)导入数据defloadDataSet(self,filename):#加载数据集X=[];Y=[]fr=open(filename)forlineinfr.readlines():curLine=line.strip().split(‘ ‘)X.append(float(curLine[0]) 查看详情

常见机器学习算法原理+实践系列5(knn分类+keans聚类)

一,KNN分类K-NearestNeighborK临近算法是一种有监督的分类算法,工作原理很简单,存在一个样本集合,也成为训练样本,样本中包含标签,将新数据的每个特征与样本集合的数据对应特征进行比较,然后提取样本最相似的分类标签... 查看详情