vlambda博客
学习文章列表

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)