R语言文本处理中文分词并制作文字云
本文主要介绍R语言在进行文本处理中常用的一些包,包括tm,tmcn处理语料库的套件,中文分词套件jieba和文字云套件wordcloud2。
点击以下链接查看其它R语言文本挖掘系列文章
早日毕业:R语言文本挖掘套件系列2-网络爬虫基础rvest
早日毕业:R语言文本挖掘套件系列2-网络爬虫RSelenium套件
早日毕业:R语言文本挖掘套件系列3-网络新闻与文本探勘(爬虫结合jieba,tm,wordcloud2)
tm套件-文本挖掘
tm套件主要用于数据清理和语料库导出。可以清除空白字符、数字、英文标点符号及与号、英文停用词、中文标点符号、中文停用词。
准备工作
#现在D:\R\tm 建立Corpus和Corpus_OUT两个文件夹
#在Corpus建立记事本(存档时选择ANSI编码)
#记事本1 tm_A.txt 今天是西元2020年3月4日.早上出门是暴雨,因此,全身湿哒哒的,连鞋 子也湿了!
#记事本2 tm_B.txt 今天是西元2020年3月5日. It's raining today outside, I'm going to the office.
#记事本3 tm_C.txt 今天是西元2020年3月6日. I'm so busy today.
#安装tm套件
install.packages("tm",destdir = "E:\\runtime\\Rlibrary")
library(tm)
### 载入资料 ###
#把文件夹内的记事本文件输入资料库
Corpus_A<-Corpus(DirSource("D:\\R\\tm\\Corpus"))
#检视资料库
inspect(Corpus_A)
数据清理
#转化函数tm_map
#清除/n
Corpus_B<-tm_map(Corpus_A,stripWhitespace)
inspect(Corpus_B)
#清除数字
Corpus_C<-tm_map(Corpus_B,removeNumbers)
inspect(Corpus_C)
#清除英文标点符号
Corpus_D<-tm_map(Corpus_B,removePunctuation)
inspect(Corpus_D)
#英文停用词(出现频率非常高,但对文章没有实际意义,如“to","the","of"
Corpus_E<-tm_map(Corpus_B,removeWords,stopwords("english"))
inspect(Corpus_E)
#清除中文标点符号(函数gsub的取代功能)
Corpus_F<-tm_map(Corpus_B,function(word){gsub("!","",word)})
inspect(Corpus_F)
#使用正则表达式
Corpus_G<-tm_map(Corpus_B,function(word){gsub("[.!0-9A-Za-z]","",word)})
inspect(Corpus_G)
#清除中文停用词(gsub函数的限制:一次只能一个)
Corpus_H<-tm_map(Corpus_B,function(word){gsub("是","",word)})
inspect(Corpus_H)
#利用gsub函数清除多规格字词,使用for循环
my_stopword<-c("是","因此","连","了")
for(i in my_stopword)
{
Corpus_B<-tm_map(Corpus_B,function(word){gsub(i,"",word)})
}
inspect(Corpus_B)
#处理结束后,将资料输出到文件
writeCorpus(Corpus_B,path="D:\\R\\tm\\Corpus_OUT")
tmcn套件-文本挖掘中文辅助
#install.packages("tmcn",destdir = "E:\\runtime\\Rlibrary")
library(tmcn)
#繁简体转换
word_A<-c("我們將學習R語言,把繁體轉換成簡體")
word_B<-c("我们将学习R语言,把简体转换成繁体")
#查看转换前编码
Encoding(word_A)
#方法一 iconv函数转换编码
word_A<-iconv(word_A,"","UTF-8")
Encoding(word_A)
#方法二 enc2utf8函数转换编码
word_A<-enc2utf8(word_A)
Encoding(word_A)
#统一utf-8编码后,使用函数toTrad函数繁简体转换
toTrad(word_A,rev=T)
toTrad(word_B,rev=F)
##---stopwordsCN函数----##
#现在D:\R中,建立tmcn文件夹
#函数stopwordsCN是常用的处理资料库中中文停用词
stop<-stopwordsCN()
Encoding(stop)
stop_TW<-toTrad(stop,rev=T)
#资料导出
#将停用词处理成繁体保存,供后续使用
#函数write.csv,存成csv文件
#先转换成数据框格式
stop_data<-data.frame(stop_TW)
write.csv(stop_data,file="D:\\R\\tmcn\\stop_data.csv",row.names = FALSE)
#存成txt文档
#参数col.names=FALSE 删除行列名称
#参数quote=FALSE 字符串不用引号表示
write.table(stop_TW,file="D:\\R\\tmcn\\stop_data.txt",row.names=FALSE,col.names=F ALSE,quote=FALSE,fileEncoding = "UTF-8")
jiebaR套件-中文分词
#先把资料存成记事本(通常为ANSI或UTF-8格式)D:\R\jieba\pig_UTF8.txt
#从前,有一只胖胖的猪妈妈,她生了三只小猪。
#最大的小猪:猪大哥很贪睡,很懒惰,一天到晚都在打瞌睡。
#第二个小猪:猪二哥很爱吃,他也很懒惰。
#幸好最小的小猪:猪小弟是个勤劳的好孩子,常常努力的工作。
#使用readr包read.lines读取txt
library(readr)
#文字编码为utf-8或者ANSI的输入
readLines("D:\\R\\jieba\\pig_ANSI.txt")
pig<-readLines("D:\\R\\jieba\\pig_UTF8.txt",encoding = "UTF-8")
#中文断词
library(jiebaR)
#建立分词引擎 名为cutword
cutword<-worker()
cutword
#初步断词
cutword[pig]
#增加停用词 减少赘词
#使用tmcn套件中的stopwordsCN的停用词
cutword<-worker(stop_word ="D:/R/tmcn/stop_data.txt" )
cutword
#查看断词结果
cutword[pig]
#增加字词:如:名字、专有名词、形容词...
add<-c("猪妈妈","三只小猪","猪大哥","猪二哥","猪小弟")
new_user_word(cutword,add)
#查看断词结果
pig_A<-cutword[pig]
#删除字符数为1的无用词
#套件stringr,函数str_count()计算字符数
pig_B<-pig_A[str_count(pig_A)>1]
Wordcloud2套件-制作文字云
#完成断词后,制作文字云的准备工作
#table函数,计算名词出现次数
table_A<-table(pig_B)
#sort函数,排序次数
table_B<-sort(table_A,decreasing = T)
#转换为数据框
table_C<-data.frame(table_B)
#载入wordcloud2套件
library(wordcloud2)
wordcloud2(table_C)