中文文本分类

本文介绍文本挖掘与文本分类的一些基本概念和流程,为后续学习分类算法做好铺垫。

一. 文本挖掘的概念

  文本挖掘(Text Mining)是从非结构化文本信息中获取用户感兴趣或者有用的模式 的过程。其中被普遍认可的文本挖掘定义如下:文本挖掘是指从大量文本数据中抽取事先未知的、可理解的、最终可用的知识的过程,同时运用这些知识更好地组织信息以便将来参考。

  简言之,文本挖掘就是从非结构化的文本中寻找知识的过程。 文本挖掘的七个主要领域:

  (1)搜索和信息检索(IR):存储和文本文档的检索,包括搜索引擎和关键字搜 索。

  (2) 文本聚类:使用聚类方法,对词汇,片段,段落或文件进行分组和归类。

  (3) 文本分类:对片段,段落或文件进行分组和归类,使用数据挖掘分类方法的 基础上,经过训练的标记示例模型。

  (4)Web 挖掘:在互联网上进行数据和文本挖掘,并特别关注在网络的规模和相 互联系。

  (5)信息抽取(IE):从非结构化文本中识别与提取有关的事实和关系;从非结构 化和半结构化文本制作的结构化数据的过程。

  (6)自然语言处理(NLP):将语言作为一种有意义、有规则的符号系统,在底 层解析和理解语言的任务(例如,词性标注);目前的技术主要从语法、语义 的角度发现语言最本质的结构和所表达的意义。

  (7)概念提取:把单词和短语按语义分组成意义相似的组。

  在分析机器学习的数据源中最常见的知识发现主题是把数据对象或事件转 换为预定的类别,再根据类别进行专门的处理,这是分类系统的基本任务。文本分类 也如此:其实就是为用户给出的每个文档找到所属的正确类别(主题或概念)。想要实现这个任务,首先需要给出一组类别,然后根据这些类别收集相应的文本 集合,构成训练数据集,训练集既包括分好类的文本文件也包括类别信息。今天,在 互联网的背景下自动化的文本分类被广泛的应用于,包括文本检索,垃圾邮件过滤, 网页分层目录,自动生成元数据,题材检测,以及许多其他的应用领域,是文本挖掘 最基础也是应用最广范的核心技术。

  目前,有两种主要的文本分类方法,一是基于模式系统(通过运用知识工程技术), 二是分类模型(通过使用统计和/或机器学习技术)。专家系统的方法是将专家的知识 以规则表达式的形式编码成分类系统。机器学习的方法是一个广义归纳过程,采用由 一组预分类的例子,通过训练建立分类。由于文件数量以指数速度的增加和知识专家 的可用性变得越来越小,潮流趋势正在转向机器学习 -  基于自动分类技术。

二. 中文文本分类技术和流程

  不同语言的文 本处理所用到的技术还是有差别的。中文语言的文本分类技术和流程,主要包括以下几个步骤:

  1. 预处理:去除文本的噪声信息,例如 HTML 标签,文本格式转换,检测句 子边界等等;

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

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

    (2)建立分类文本语料库。文本分类中所说的文本语料一般分为两大类:训练集语料和测试集语料。

    (3)文本格式转换。不同格式的文本不论何种处理形式都要统一转换为纯文本文件,例如,网页文本,

    word 或 pdf 文件都要转换为纯文本格式。

    (4)检测句子边界:标记句子的结束。

  2. 中文分词:使用中文分词器为文本分词,并去除停用词;

    中文分词 (Chinese Word Segmentation) 指的是将一个汉字序列(句子)切分成一 个一个单独的词。中文比之英文要复杂的多、困难的多。中文分词,不仅是中文文本分类的一大问题,也是中文自然语言处理的核心问题 之一。

    分词是自然语言处理中最基本、最底层的模块,分 词精度对后续应用模块影响很大,纵观整个自然语言处理领域,文本或句子的结构化 表示是语言处理最核心的任务。目前,文本的结构化表示简单分为四大类:词向量空 间模型、主题模型、依存句法的树表示、RDF 的图表示。以上这四种文本表示都以分 词为基础的。

     jieba 分词,它是专门使用 Python 语言开发的分词系统,占用资源 较小,常识类文档的分词精度较高。对于非专业文档绰绰有余。

  Jieba 分词已经作为 Python 的官方外部库,上传到 pypi 上,可以通过 pip 直接下载使用,简单样例代码如下:

  

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

import sys import os import jieba

# 设置 utf-8 unicode 环境
reload(sys)
sys.setdefaultencoding(‘utf-8‘)

seg_list = jieba.cut("小明 1995 年毕业于北京清华大学", cut_all=False) print "Default Mode:", " ".join(seg_list)   # 默认切分

seg_list = jieba.cut("小明 1995 年毕业于北京清华大学") print "   ".join(seg_list)

seg_list = jieba.cut("小明 1995 年毕业于北京清华大学", cut_all=True) print "Full Mode:", "/ ".join(seg_list)   # 全切分

seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")    #  搜 索引擎模式
print "/   ".join(seg_list)

输出结果如下:

Default Mode:  小明 1995 年 毕业 于 北京 清华大学
小明  1995   年  毕业  于  北京  清华大学
Full Mode:  小/ 明/ 1995/ 年/ 毕业/  于/ 北京/  清华/ 清华大学/ 华大/     大学
小明/   硕士/    毕业/    于/    中国/   科学/   学院/    科学院/   中国科学院/   计算/   计算所/   ,/     后/
在/   日本/    京都/   大学/   日本京都大学/     深造

  3. 构建词向量空间:统计文本词频,生成文本的词向量空间;

文本分类的结构化方法就是向量空间模型,虽然越来越多的实践已经证明,这种 模型存在着的局限,但是迄今为止,它仍是在文本分类中应用最广泛、最为流行的数 据结构,也是很多相关技术的基础,例如:推荐系统、搜索引擎等。

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

  计算文本的权重向量,应该选择一个有效的权重方案。最流行的方案是对 TF-IDF 权重的方法。TF-IDF 的含义是词频--逆文档频率,其含义是如果某个词或短语在一篇 文章中出现的频率 TF 高,并且在其他文章中很少出现,则认为此词或者短语具有很好 的类别区分能力,适合用来分类。逆文档频率就是使用词条的文档频率来抵消该词的词频对权重的影 响,而得到一个较低的权重。某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率, TFIDFij=TFijI×IDFij 可以产生出高权重的 TF-IDF。因此,TF-IDF 倾向于过滤掉常见 的词语,保留重要的词语。使用Scikit-Learn实现的代码示例如下:

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

import sys
import os
#引入Bunch类
from sklearn.datasets.base import Bunch
#引入持久化类
import cPickle as pickle
from sklearn import feature_extraction
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import TfidfVectorizer  

# 配置utf-8输出环境
reload(sys)
sys.setdefaultencoding(‘utf-8‘)

# 读取文件
def readfile(path):
    fp = open(path,"rb")
    content = fp.read()
    fp.close()
    return content

#计算训练语料的tfidf权值并持久化为词袋

#读取bunch对象
def readbunchobj(path):
    file_obj = open(path, "rb")
    bunch = pickle.load(file_obj)
    file_obj.close()
    return bunch
#写入bunch对象
def writebunchobj(path,bunchobj):
    file_obj = open(path, "wb")
    pickle.dump(bunchobj,file_obj)
    file_obj.close()    

# 1. 读取停用词表
stopword_path = "train_word_bag/hlt_stop_words.txt"
stpwrdlst = readfile(stopword_path).splitlines()

# 2. 导入分词后的词向量bunch对象
path = "train_word_bag/train_set.dat"        # 词向量空间保存路径
bunch    = readbunchobj(path)

# 3. 构建tf-idf词向量空间对象
tfidfspace = Bunch(target_name=bunch.target_name,label=bunch.label,filenames=bunch.filenames,tdm=[],vocabulary={})

# 4. 使用TfidfVectorizer初始化向量空间模型
vectorizer = TfidfVectorizer(stop_words=stpwrdlst,sublinear_tf = True,max_df = 0.5)
transformer=TfidfTransformer() # 该类会统计每个词语的tf-idf权值
# 文本转为词频矩阵,单独保存字典文件
tfidfspace.tdm = vectorizer.fit_transform(bunch.contents)
tfidfspace.vocabulary = vectorizer.vocabulary_

# 创建词袋的持久化
space_path = "train_word_bag/tfdifspace.dat"        # 词向量空间保存路径
writebunchobj(space_path,tfidfspace)

print "if-idf词向量空间创建成功!!!"

  5. 分类器:使用算法训练分类器(未完待续);

  6. 评价分类结果:分类器的测试结果分析(未完待续)。

参考资料:

《机器学习算法原理与编程实践》(郑捷 著)

   

时间: 2024-10-25 12:45:40

中文文本分类的相关文章

2.中文文本分类

这这一篇博客中,将系统介绍中文文本分类的流程和相关算法.先从文本挖掘的大背景开始,以文本分类算法为中心,介绍中文文本分类项目的流程以及相关知识,知识点设计中文分词,向量空间模型,TF-IDF方法,几个典型的文本分类算法和评价指标等. 本篇主要有: 朴素的贝叶斯算法 KNN最近邻算法. 2.1 文本挖掘与文本分类的概念 简单来说,文本挖掘就是从已知的大量文本数据中提取一些未知的最终可能用过的知识的过程,也就是从非结构化的文本中寻找知识的过程.文本挖掘主要领域有: 搜索和信息检索:存储和文本文档的检

中文文本分类1

文本挖掘(Text Mining)是从非结构化文本信息中获取用户感兴趣或者有用的模式的过程. 文本挖掘是指从大量文本数据中抽取事先未知的.可理解的.最终可用的知识的过程,同时运用这些知识更好地组织信息以便将来参考. 文本预处理 文本处理的核心任务是把非结构化和半结构化的文本转换为结构化的形式,即向量空间模型. 具体步骤: 1. 选择处理的文本范围 选择恰当的范围取决于文本挖掘任务的目标: 对于分类或聚类的任务,往往把整个文档作为处理单位: 对于情感分析.文档自动摘要或信息检索,段落或章节可能更合

中文文本分类大概的步骤

文本分类问题:给定文档p(可能含有标题t),将文档分类为n个类别中的一个或多个 文本分类应用:常见的有垃圾邮件识别,情感分析 文本分类方向:主要有二分类,多分类,多标签分类 文本分类方法:传统机器学习方法(贝叶斯,svm等),深度学习方法(fastText,TextCNN等) 文本分类的处理大致分为文本预处理.文本特征提取.分类模型构建等.和英文文本处理分类相比,中文文本的预处理是关键技术. 一.中文分词:针对中文文本分类时,很关键的一个技术就是中文分词.特征粒度为词粒度远远好于字粒度,其大部分

中文文本分类之TextRNN

RNN模型由于具有短期记忆功能,因此天然就比较适合处理自然语言等序列问题,尤其是引入门控机制后,能够解决长期依赖问题,捕获输入样本之间的长距离联系.本文的模型是堆叠两层的LSTM和GRU模型,模型的结构为:LSTM(GRU)—dropout—LSTM(GRU)—dropout—全连接层—输出层,比较简单.关于TensorFlow搭建RNN模型有关的内容,在这篇<TensorFlow之RNN:堆叠RNN.LSTM.GRU及双向LSTM>博客里阐述得比较清楚了,这里不赘述. 尽管RNN模型天然比较

fastext 中文文本分类

1. 输入文本预处理, 通过jieba分词, 空格" "拼接文本串.  每行一个样本, 最后一个单词为双下划线表明label,  __label__'xxx' . eg: 邱县 继刚 家庭 农场 小麦 . 玉米 . 棉花 . 大豆 . 蔬菜 . 苗木 种植 . 销售 ( 依法 须 经 批准 的 项目 , 经 相关 部门 批准 后方 可 开展 经营 活动 ) __label__A 江苏 嘉利欣 农业 科技 有限公司 农业 科技 研发 . 转让 . 咨询服务 展览 展示 服务 现代农业 休

基于朴素贝叶斯分类器的文本分类算法

源代码下载:NaviveBayesClassify.rar Preface 文本的分类和聚类是一个比较有意思的话题,我以前也写过一篇blog<基于K-Means的文本聚类算法>,加上最近读了几本数据挖掘和机器学习的书籍,因此很想写点东西来记录下学习的所得. 在本文的上半部分<基于朴素贝叶斯分类器的文本分类算法(上)>一文中简单介绍了贝叶斯学习的基本理论,这一篇将展示如何将该理论运用到中文文本分类中来,具体的文本分类原理就不再介绍了,在上半部分有,也可以参见代码的注释. 文本特征向量

机器学习经典算法详解及Python实现---朴素贝叶斯分类及其在文本分类、垃圾邮件检测中的应用

摘要: 朴素贝叶斯分类是贝叶斯分类器的一种,贝叶斯分类算法是统计学的一种分类方法,利用概率统计知识进行分类,其分类原理就是利用贝叶斯公式根据某对象的先验概率计算出其后验概率(即该对象属于某一类的概率),然后选择具有最大后验概率的类作为该对象所属的类.总的来说:当样本特征个数较多或者特征之间相关性较大时,朴素贝叶斯分类效率比不上决策树模型:当各特征相关性较小时,朴素贝叶斯分类性能最为良好.另外朴素贝叶斯的计算过程类条件概率等计算彼此是独立的,因此特别适于分布式计算.本文详述了朴素贝叶斯分类的统计学

中文文本分类器训练集

sougou还真地道.中文文本分类器训练集下载 http://www.sogou.com/labs/dl/c.html mini版(tar.gz格式) 136Kmini版(zip格式) 167K精简版(tar.gz格式) 24M精简版(zip格式) 30M完整版 107M(由于文件较大,需要注册后获取ftp地址下载)分类编码对照表(txt格式) 138字节

多种贝叶斯模型构建文本分类

多种贝叶斯模型构建及文本分类的实现 作者:白宁超 2015年9月29日11:10:02 摘要:当前数据挖掘技术使用最为广泛的莫过于文本挖掘领域,包括领域本体构建.短文本实体抽取以及代码的语义级构件方法研究.常用的数据挖掘功能包括分类.聚类.预测和关联四大模型.本文针对四大模型之一的分类进行讨论.分类算法包括回归.决策树.支持向量机.贝叶斯等,显然,不少涉及机器学习的知识(随后会写些机器学习专题).本文重点介绍贝叶斯分类,涉及朴素贝叶斯模型.二项独立模型.多项模型.混合模型等知识.在本人研究贝叶斯