使用 jiebaR 进行词频统计

R
数据处理
jiebaR
wordcloud2
Author

Rui

Published

October 24, 2022

参考:jiebaR 官方文档http://qinwenfeng.com/jiebaR/

准备程序包

Code
setwd("F:\\RuiBlog\\posts\\R\\词频统计")

library(jiebaR)
library(jiebaRD)
library(wordcloud2)
library(tidyverse)
library(ggplot2)

建议安装 0.2.0 版本的 wordcloud2,下载地址:https://cran.r-project.org/src/contrib/Archive/wordcloud2/,再手动安装 tar.gz 文件。

获取文本

这里使用二十大报告作为素材进行词频统计,相关文字版素材在网络上很容易就能找到。

Code
news <- readtext::readtext("二十大报告文字版.txt") %>% as.character()

清洗数据

先去除阿拉伯数字、英文字母:

Code
gsub("[0-9, a-z, A-Z]", "", news) -> news

分词

使用中文停用词作为文本分词的依据。中文停用词下载地址:https://github.com/goto456/stopwords. 使用 jiebaR 加载中文停用词并分词:

Code
stop <- worker(user = "cn_stopwords.txt",
               stop_word = "cn_stopwords.txt")
segwords <- segment(news, stop)
segwords %>% head(100)
##   [1] "李克强"         "代表"           "中国共产党"     "第二十次"      
##   [5] "全国代表大会"   "现在"           "开幕"           "请"            
##   [9] "起立"           "奏"             "唱"             "中华人民共和国"
##  [13] "国歌"           "隆重举行"       "中国共产党"     "第二十次"      
##  [17] "全国代表大会"   "庄严"           "时刻"           "怀着"          
##  [21] "十分"           "崇敬"           "心情"           "毛泽东"        
##  [25] "周恩来"         "刘少奇"         "朱德"           "邓小平"        
##  [29] "陈云"           "老一辈"         "无产阶级"       "革命家"        
##  [33] "革命先烈"       "默哀"           "默哀"           "毕"            
##  [37] "请坐下"         "代表"           "中国共产党"     "第二十次"      
##  [41] "全国代表大会"   "应"             "会"             "代表"          
##  [45] "特邀代表"       "共"             "今天"           "事"            
##  [49] "因病请假"       "实"             "会"             "代表"          
##  [53] "特邀代表"       "今天"           "大会"           "党外"          
##  [57] "朋友"           "方面"           "负责同志"       "列席"          
##  [61] "表示"           "热烈"           "欢迎"           "现在"          
##  [65] "请"             "习近平"         "总书记"         "代表"          
##  [69] "十九"           "届"             "中央委员会"     "大会"          
##  [73] "作"             "报告"           "习近平"         "同志"          
##  [77] "现在"           "代表"           "第十九届"       "中央委员会"    
##  [81] "大会"           "作"             "报告"           "中国共产党"    
##  [85] "第二十次"       "全国代表大会"   "全党全国"       "各族人民"      
##  [89] "迈"             "全面"           "建设"           "社会主义"      
##  [93] "现代化"         "国家"           "新"             "征程"          
##  [97] "第二个"         "百年"           "奋斗目标"       "进军"

删除停用词

Code
# 获取停用词
stopwords <- readLines("cn_stopwords.txt", encoding = "UTF-8")

# 删除停用词
removewords <- function(targetword, stopword) {
  targetword <- targetword[targetword %in% stopword == FALSE]
  
  return(targetword)
}

segword2 <- segwords %>% 
  sapply(FUN = removewords, stopwords) %>% 
  as.vector()

segword2 %>% head(100)
##   [1] "李克强"         "代表"           "中国共产党"     "第二十次"      
##   [5] "全国代表大会"   "现在"           "开幕"           "请"            
##   [9] "起立"           "奏"             "唱"             "中华人民共和国"
##  [13] "国歌"           "隆重举行"       "中国共产党"     "第二十次"      
##  [17] "全国代表大会"   "庄严"           "时刻"           "怀着"          
##  [21] "十分"           "崇敬"           "心情"           "毛泽东"        
##  [25] "周恩来"         "刘少奇"         "朱德"           "邓小平"        
##  [29] "陈云"           "老一辈"         "无产阶级"       "革命家"        
##  [33] "革命先烈"       "默哀"           "默哀"           "毕"            
##  [37] "请坐下"         "代表"           "中国共产党"     "第二十次"      
##  [41] "全国代表大会"   "应"             "会"             "代表"          
##  [45] "特邀代表"       "共"             "今天"           "事"            
##  [49] "因病请假"       "实"             "会"             "代表"          
##  [53] "特邀代表"       "今天"           "大会"           "党外"          
##  [57] "朋友"           "方面"           "负责同志"       "列席"          
##  [61] "表示"           "热烈"           "欢迎"           "现在"          
##  [65] "请"             "习近平"         "总书记"         "代表"          
##  [69] "十九"           "届"             "中央委员会"     "大会"          
##  [73] "作"             "报告"           "习近平"         "同志"          
##  [77] "现在"           "代表"           "第十九届"       "中央委员会"    
##  [81] "大会"           "作"             "报告"           "中国共产党"    
##  [85] "第二十次"       "全国代表大会"   "全党全国"       "各族人民"      
##  [89] "迈"             "全面"           "建设"           "社会主义"      
##  [93] "现代化"         "国家"           "新"             "征程"          
##  [97] "第二个"         "百年"           "奋斗目标"       "进军"

词频统计

计算词频

Code
wordfreq <- jiebaR::freq(segword2) # 返回data.frame
wordfreq <- dplyr::arrange(wordfreq, -freq) # 按照词频降序排序
wordfreq %>% head(10) %>% knitr::kable()
char freq
发展 98
坚持 92
社会主义 81
全面 76
人民 76
72
中国 71
建设 63
国家 59
推进 54

词频统计图

Code
ggplot(wordfreq[1:10, ], aes(x=reorder(char, freq), y=freq)) + 
  # 降序排序 
  geom_bar(stat = "identity", fill = "red", width = 0.7) +
  labs(x = "", y = "频数") +
  coord_flip() +
  theme_classic()

词云

Code
# 词云
set.seed(123)
wordcloud2(wordfreq[1:55, ], 
           size = 0.4, 
           color = "red", 
           shape = "star") # 五角星形状

自定义词云形状

关于词云包 wordcloud2 中的同名函数 wordcloud2 使用方法介绍:

参数 说明
data 包含 word 和 freq 的数据框,按照 word 出现的顺序由内向外画图(也可以按照 freq 降序美化词云)
size 字体大小,默认为1
fontFamily 字体
fontWeight 字体粗细,例如:normal, bold or 600
color 文本的颜色,可以使用关键字 random-dark 和 random-light。也支持颜色矢量
minSize 副标题的字符串
backgroundColor 背景颜色
gridSize 用于标记画布可用性的网格大小(以像素为单位)网格大小越大,单词之间的间隙就越大
minRotation 文本能够旋转的最小角度(以rad为单位)
maxRotation 文本能够旋转的最大角度(以rad为单位)
rotateRatio 词旋转的概率。将这一值设置为 1 为始终旋转
shape 词云的形状。‘circle’(圆形,默认值),‘cardioid’(心型,极坐标方程下的苹果、心型曲线),‘diamond’(菱形),‘triangle-forward’(暂不清楚),‘triangle’(三角形),‘pentagon’(五角形),‘star’(五角星)
ellipticity 平坦度
figPath 自定义词云形状时指定的画布路径
Code
wordcloud2(wordfreq[1:120, ], 
           figPath = "F:\\RuiBlog\\posts\\R\\词频统计\\R-C.jpg",
           size = 0.55, 
           color = "red") # 自定义形状,使用党徽
Note

其中 R-C.jpg 是设定的词云形状的图片,这里使用党徽。注意图片可以是 jpg 格式也可以是 png 格式,最好为白底全黑图形。有时词云不一定能显示成功,需要多调试其他参数。