R语言数据挖掘实践——Rwordseg文本挖掘包简介

文本挖掘定义

文本挖掘指的是从文本数据中获取有价值的信息和知识,它是数据挖掘中的一种方法。文本挖掘中最重要最基本的应用是实现文本的分类和聚类,前者是有监督的挖掘算法,后者是无监督的挖掘算法。

R语言数据挖掘实践——Rwordseg文本挖掘包简介

文本挖掘步骤

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

  2. 文本分词:文本分词包括自定义字典、自定义停止词、分词、文字云检索;

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

  4. 对矩阵建立统计、挖掘模型;

  5. 将结果反馈至用户端。

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

人名识别

默认情况下,Rwordseg包是无法识别一些人名的。可以通过

getOption()函数和segment.options()函数查看人名识别功能的状态和设置人名识别功能的状态。

> library(Rwordseg)

> getOption("isNameRecognition")

[1] FALSE

> str1

> segmentCN(str1)

[1] "我" "的" "名字" "叫" "张" "三" "丰"

> segment.options(isNameRecognition=TRUE)

> getOption("isNameRecognition")

[1] TRUE

> segmentCN(str1)

[1] "我" "的" "名字" "叫" "张三丰"

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

添加和卸载自定义字典

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

> str2

> segmentCN(str2)

[1] "雷克萨" "斯" "品牌"

> installDict(dictpath = "./qiche.scel", dictname = "qiche")

2388 words were loaded! ... New dictionary 'qiche' was installed!

> listDict()

Name Type Des

1 qiche 汽车 官方推荐,词库来源于网友上传!

Path

1 C:/R-3.3.2/library/Rwordseg/dict/qiche.dic

> segmentCN(str2)

[1] "雷克萨斯" "品牌"

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

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

uninstallDict(removedict = listDict()$Name,remove = TRUE)

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

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

> listDict()

Name Type Des

1 qiche 汽车 官方推荐,词库来源于网友上传!

Path

1 C:/R-3.3.2/library/Rwordseg/dict/qiche.dic

> uninstallDict(removedict = 'qiche')

2388 words were removed! ... The dictionary 'qiche' was uninstalled!

> listDict()

[1] Name Type Des Path

<0 行> (或0-长度的row.names)

添加和删除自定义词汇

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

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

> str3

> segmentCN(str3)

[1] "不要" "错" "过" "美好" "时光"

> insertWords('错过')

> segmentCN(str3)

[1] "不要" "错过" "美好" "时光"

创建停止词

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

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

> library(tmcn)

> stopwords

> length(stopwords)

[1] 503

> head(stopwords,20)

[1] "第二" "一番" "一直" "一个" "一些" "许多"

[7] "种" "有的是" "也就是说" "末" "啊" "阿"

[13] "哎" "哎呀" "哎哟" "唉" "俺" "俺们"

[19] "按" "按照"

分词函数segmentCN()

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行。


分享到:


相關文章: