基于R语言的文本挖掘-分类

文本挖掘流程图:

0?wx_fmt=png
从图中可知,文本挖掘主要包含以下几个步骤:

1)读取数据库或本地外部文本文件;

2)文本分词;

3)构建文档-条目矩阵,即文本的特征提取;

4)对矩阵建立统计模型;

5)将结果反馈至用户端


首先介绍一下文本分词阶段需要做的一些工作,包括人名识别设置、添加和卸载自定义字典、添加和删除自定义词汇和停止词的使用等。


1)人名识别

默认情况下,Rwordseg包是无法识别一些人名的。可以通过getOption()函数和segment.options()函数查看人名识别功能的状态和设置人名识别功能的状态:

0?wx_fmt=png
在人名识别功能状态设置前无法识别姓名,通过segment.options()函数设置后,可以很好的将人的姓名识别出来。


2)添加和卸载自定义字典

Rwordseg包中提供installDict()函数和uninstallDict()函数,用以添加和卸载用户自定义的字典。

有些文档的句子或词会出现歧义,例如“雷克萨斯品牌”是分割为“雷克萨斯”和“品牌”两个部分还是分割为“雷克萨”、“斯”和“品牌”三个部分,这对于segmentCN函数来说是困难的。为了能够正确地分词,可以添加自定义字典。


看一下installDict()函数的语法:


installDict(dictpath, dictname,

dicttype = c("text", "scel"), load = TRUE)


dictpath表示需要安装词典的路径;

dictname为自定义的词典名称;

dicttype表示安装的词典类型,'text'为普通文本格式,'scel'为Sogou细胞词典(可在Sogou官网下载);

load表示安装后是否自动加载到内存,默认为TRUE。


个人强烈建议使用Sogou官网中的细胞词典,因为该词典包含的量比较大,且最新流行的词也会包含在词典中。以下例子将下载汽车名称词典,并安装到R中。这个词典的链接:

http://pinyin.sogou.com/dict/detail/index/15153

0?wx_fmt=png
图中显示,默认情况下Rwordseg包中不存在自定义的词典,此时对于“雷克萨斯品牌”就不能准确的分词,通过安装Sogou词典后,该字符串就能够准确的被分词。


如果不需要已经建立的自定义词典时,可以使用uninstallDict函数卸载指定的词典。


uninstallDict(removedict = listDict()$Name,

remove = TRUE)


removedict指定要卸载的词典名称;

remove表示是否立即清除词典中词语,默认为TRUE。

0?wx_fmt=png

3)添加和删除自定义词汇

有时已安装的自定义词典仍然不能够准确的实现分词,还可以通过在内存中临时添加和删除词汇实现更进一步的准确分词。例如“不要错过美好时光”该如何分词?

R中提供insertWords()函数和deleteWords()函数实现自定义词汇的添加和删除。

0?wx_fmt=png

4)创建停止词

在文本分词中,有一些无意义的语气词,如啊、哦、哈等,或是转折词,如即使、而且、但是等。对于这类词在分析时需要去掉。如何去掉?首先需要指定哪些词为停止词,然后在分词时将这些停止词删掉即可。

tmcn包中自带一个包含504个中文停止词的对象。下文的应用分析中字就是用该停止词对象。

0?wx_fmt=png


5)分词函数:segmentCN

segmentCN(strwords,

analyzer = get("Analyzer", envir = .RwordsegEnv),

nature = FALSE, nosymbol = TRUE,

returnType = c("vector", "tm"), isfast = FALSE,

outfile = "", blocklines = 1000)


strwords可以是需要分词的字符向量,也可以是某个文本文件的路径;

nature用于词性识别,默认不输出,如果设为TRUE将同时返回分词对应的词性识别;

nosymbol表示是否只输出汉字、英文和数字,默认为TRUE,否则将还会输出标点符号;

returnType表示分词后的返回类型,如果为'tm',返回时无法输出词性;

isfast参数可设置直接调用JAVA包进行最基础的分词,速度比较快,只能返回'tm'格式的文本,且无法输出繁体字,也不能进行词性识别。如果对分词效率要求比较高可以设置该参数为TRUE;

outfile用于指定输出文件的名称,如果strwords为指定的路径,需要为该参数指定文件名称,默认产生原文件名加“segment”;

blocklines表示每次读入的行数,默认为1000行。


应用:

从这里开始将进入文本挖掘的实例操作,文本的数据对象使用的是某些主题下的新闻,本次文本挖掘的目的是对测试文本进行分类。

1)首先看一下数据情况:

0?wx_fmt=png

2)数据读取

0?wx_fmt=png

3)分词操作

0?wx_fmt=png


4)构建文档-条目矩阵

0?wx_fmt=png
图中显示,仅有5%的词不是稀疏的。


5)knn分类算法的应用

0?wx_fmt=png

6)分类效果

0?wx_fmt=png
最后呈现出80%的分类准确率。


上述流程应该属于文本挖掘的一个基本过程,其中最为核心的部位我认为是文本的准确分词和构建文档-词条矩阵,在有了准确的矩阵基础上才可以进一步的实现各种统计模型的使用。


参考资料:

李舰的《Rwordseg使用说明》

R语言做文本挖掘part1:http://www.bubuko.com/infodetail-656985.html

R语言做文本挖掘part2:http://blog.csdn.net/cl1143015961/article/details/44108143

R语言做文本挖掘part3:http://www.verydemo.com/demo_c128_i154124.html

R语言做文本挖掘part4:http://www.mamicode.com/info-detail-1033641.html

R语言做文本挖掘part5:http://www.thebigdata.cn/JiShuBoKe/14215.html


总结:文章涉及到的R包和函数

xlsx包

read.xlsx()

tm包

Corpus()

removeWords()

DocumentTermMatrix()

Rwordseg包

segmentCN()

installDict()

uninstallDict()

insertWords()

delectWords()

segment.options()

stats包

lapply()

table()

dim()

as.matrix()

class包

knn()

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值