文本挖掘
若要机器对文本进行理解,就需要对文本进行分词,进而变成机器可以理解的单个词语。在处理大量文档的是否,还需要进行词语向量化,进而进行后面的文本挖掘计算。
Rwordseg包
如果想要安装Rwordseg包需要先安装rjava包,rjava包的安装需要jre环境。Rwordseg包中文分词最显著的特点是它会先将标量符号去除,再进行分词,这样处理的结果是可能标点符号前后的文字会连起来影响分词效果。
下面是一个简单分词操作
> text <- "R是用于统计分析、绘图的语言和操作环境"
> words <- segmentCN(text)
> words
[1] "R" "是" "用于" "统计" "分析" "绘图" "的" "语言" "和" "操作" "环境"
有时候我们会发现通过segmentCN
函数分词后的结果并不是很理想,有一些词语本应该被分词结果没有被分词,有些词语本不应该被分词结果被分词。
这个时候我们可以加入我们自定义的词语,就比如上面那一句话,其中操作环境本应该是一个完整的词语,结果被分为两个词语,显然不正确。这样我们可以将“操作环境”加入我们的分词库中,我们需要通过insertWords
函数加入我们自定义的词语。
> insertWords('操作环境')
> segmentCN(text)
[1] "R" "是" "用于" "统计" "分析" "绘图" "的" "语言" "和" "操作环境"
可以发现操作环境已经可以被分词出来了,不过这种加入自定义词语只是保存在内存中,一旦关闭我们的IEDA就失效了。
如果我们想要把之前我们加入的自定义词语删除,可以通过deleteWords
函数删除词语。
> deleteWords('操作环境')
有些时候我们不需要自己手动去添加自定义词语,我们可以直接添加别人写好的词典。那样我们就可以直接使用词典中的词语进行分词。
installDict(dictpath,dicname,dicttype=c("text","scel"),load=TRUE)
- dictname:自定义词典的名称(英文)
- dicttype:默认是txt
- load:表示安装后是否自动加载到内存,默认是TRUE
还可以通过listDict
函数显示安装的词典,通过uninstallDict
函数删除安装的词典。
jieba包
“结巴”中文分词的R语言版本,支持最大概率法,隐式马尔科夫模型,索引模型,混合模型,共四种分词模式,同时有词性标注,关键词提取,文本Simhash相似度比较等功能。项目使用了Rcpp和CppJieba进行开发。
我们需要安装两个包,分别是jiebaED和jiebaR
install.packages("jiebaRD")
install.packages("jiebaR")
- 简单的分词示例
> text <- "与其说R是一种统计软件,还不如说R是一种数学计算的环境"
> seg <- worker()
> segment(text,seg)
[1] "与其说" "R" "是" "一种" "统计" "软件" "还"
[8] "不如说" "R" "是" "一种" "数学计算" "的" "环境"
除此之外,我们还可以使用下面这种方式实现分词,<=
就相当于分词运算符
> seg <= text
[1] "与其说" "R" "是" "一种" "统计" "软件" "还"
[8] "不如说" "R" "是" "一种" "数学计算" "的" "环境"
- 词性标注
> seg <- worker("tag")
> segment(text,seg)
c x v m v n d l
"与其说" "R" "是" "一种" "统计" "软件" "还" "不如说"
x v m n uj n
"R" "是" "一种" "数学计算" "的" "环境"
- 关键词提取
关键词提取所使用逆向文件频率(IDF)文本语料库可以切换成自定义语料库的路径,使用方法与分词类似。
> text <- "我是中国人"
> seg2 <- worker('keywords',topn = 1)
> segment(text,seg2)
3.02732
"中国"
其中topn参数设置的是提取的关键词的个数