文本分词,就是对文本进行合理的分割,从而可以比较快捷地获取关键信息。例如,电商平台要想了解更多消费者的心声,就需要对消费者的文本评论数据进行内在信息的数据挖掘分析,而文本分词是文本挖掘的重要步骤。R语言中,对中文分词支持较好的包有RWordseg包和jiebaR包,这里学习jiebaR包。
一、jiebaR中文分词
加载中文分词包
library(jiebaR)
library(wordcloud2)
library(dplyr)
以《笑傲江湖》这篇小说做示例。读取文本文件,注意编码格式,不然会出错。这篇文本的编码为 ANSI。
words <- readLines('XiaoAoJiangHu.txt',encoding = 'ANSI')
mixseg <- worker()
dic <- c('令狐冲', '任盈盈', '岳灵珊', '林平之', '岳不群',
'左冷禅', '任我行', '辟邪剑谱', '葵花宝典',
'日月神教', '华山派')
new_user_word(mixseg, dic)
seg <- segment(words, mixseg)
初始化分词引擎,并建立专业词词库。专业词词库中,我放了一些人物的姓名、武功秘籍和帮派名称。
停用词词库是我从网上搜到,直接导入进去!注意文本编码。
#停用词词库
stopwords <- readLines('stopwords.txt',encoding = 'UTF-8')
seg <- filter_segment(seg, stopwords)
#至此,分词这一步就做好了。
二、jiebaR词频统计
统计词频,并将其出现次数由高到低排列,让我们看看前二十个词语是什么。
wordfreqs <- jiebaR::freq(seg) # 统计词频
wordfreqs <- dplyr::arrange(wordfreqs, -freq) # 将词频由高到低展示
head(wordfreqs,20) # 看看前20个词频是什么!
head(wordfreqs,20)
char freq
1 林平之 264 2 田伯光 218 3 林震南 206
4 师父 167 5 说道 165 6 令狐大哥 161
7 青城派 148 8 师哥 147 9 定逸 138
10 余沧海 124 11 镖局 124 12 弟子 122
13 笑道 116 14 令狐冲 100 15 劳德诺 98
16 剑法 96 17 众人 82 18 曲非烟 80
19 尼姑 80 20 仪琳 80
可以看到,不愧是主角,“令狐冲”这个名词出现了。
三、词云图
绘制词云图也很简单,我们用到 wordcloud2 包中的函数。
colnames(wordfreqs)[1] <- 'word'
row.names(wordfreqs)<-wordfreqs$word
my_graph <- wordcloud2(
data=wordfreqs,size=0.5
)
my_graph
四、 完整R程序
library(jiebaR)
library(wordcloud2)
library(dplyr)
textfile<- "2021.txt"
# 一行一行地读取文本数据
words <- scan(textfile, character(0), sep='\n',fileEncoding = "UTF-8")
s<-''
for(i in words) {s<-paste0(s,i) }
mixseg <- worker()
seg<- segment(s, mixseg)
stopwords <- readLines('stopwords.txt',encoding='utf8')
seg<- filter_segment(seg, stopwords)
seg=seg[nchar(seg)>1]
wordfreqs <- jiebaR::freq(seg) # 统计词频
wordfreqs <- dplyr::arrange(wordfreqs, -freq) # 将词频由高到低展???
index <- order(-wordfreqs[,2])
order2<-wordfreqs[index, ]
head(order2,20) # 看看???20个词频是什么!
colnames(wordfreqs)[1] <- 'word'
row.names(wordfreqs)<-wordfreqs$word
my_graph <- wordcloud2(
data=wordfreqs,size=0.5
)
my_graph
参考文献
(R语言:jiebaR 包实现中文分词、统计词频及绘制词云图)[https://zhuanlan.zhihu.com/p/499935064]