基于R语言的文本挖掘-分类
文本挖掘流程图:
1)读取数据库或本地外部文本文件;
2)文本分词;
3)构建文档-条目矩阵,即文本的特征提取;
4)对矩阵建立统计模型;
5)将结果反馈至用户端
首先介绍一下文本分词阶段需要做的一些工作,包括人名识别设置、添加和卸载自定义字典、添加和删除自定义词汇和停止词的使用等。
1)人名识别
默认情况下,Rwordseg包是无法识别一些人名的。可以通过getOption()函数和segment.options()函数查看人名识别功能的状态和设置人名识别功能的状态:
在人名识别功能状态设置前无法识别姓名,通过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
图中显示,默认情况下Rwordseg包中不存在自定义的词典,此时对于“雷克萨斯品牌”就不能准确的分词,通过安装Sogou词典后,该字符串就能够准确的被分词。
如果不需要已经建立的自定义词典时,可以使用uninstallDict函数卸载指定的词典。
uninstallDict(removedict = listDict()$Name,
remove = TRUE)
removedict指定要卸载的词典名称;
remove表示是否立即清除词典中词语,默认为TRUE。
3)添加和删除自定义词汇
有时已安装的自定义词典仍然不能够准确的实现分词,还可以通过在内存中临时添加和删除词汇实现更进一步的准确分词。例如“不要错过美好时光”该如何分词?
R中提供insertWords()函数和deleteWords()函数实现自定义词汇的添加和删除。
4)创建停止词
在文本分词中,有一些无意义的语气词,如啊、哦、哈等,或是转折词,如即使、而且、但是等。对于这类词在分析时需要去掉。如何去掉?首先需要指定哪些词为停止词,然后在分词时将这些停止词删掉即可。
tmcn包中自带一个包含504个中文停止词的对象。下文的应用分析中字就是用该停止词对象。
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)首先看一下数据情况:
2)数据读取
3)分词操作
4)构建文档-条目矩阵
5)knn分类算法的应用
6)分类效果
上述流程应该属于文本挖掘的一个基本过程,其中最为核心的部位我认为是文本的准确分词和构建文档-词条矩阵,在有了准确的矩阵基础上才可以进一步的实现各种统计模型的使用。
参考资料:
李舰的《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()