文本分词,就是对文本进行合理的分割,从而可以比较快捷地获取关键信息。例如,电商平台要想了解更多消费者的心声,就需要对消费者的文本评论数据进行内在信息的数据挖掘分析,而文本分词是文本挖掘的重要步骤。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语言情感分析词云 r语言中文文本分析_词云

参考文献

(R语言:jiebaR 包实现中文分词、统计词频及绘制词云图)[https://zhuanlan.zhihu.com/p/499935064]