3 min read

jiebaR包做文本清洗

提纲挈领的说明, 就是把一波文字取出来,找出重要的词,剔除干扰的词。

参考( 【干货】–手把手教你完成文本情感分类 ) R中主要是jiabaR包。 终于开始学这个包,有点小惊喜。

# 加载第三方包
library(jiebaR)
## Warning: 程辑包'jiebaR'是用R版本3.6.3 来建造的
## 载入需要的程辑包:jiebaRD
## Warning: 程辑包'jiebaRD'是用R版本3.6.3 来建造的
# 台词
sentence <- 
'滚出去!我没有时间听一个牢里混出来的人渣,在这里跟我讲该怎么样不该怎么样!你以为西装往身上一套,我就看不到你骨子里的寒酸,剪剪头、吹吹风,就能掩藏住心里的猥琐?你差得还远,你这种人我见得多了,但还没有见到过敢对我指手画脚的。消失,快从我面前消失!'

# 设置动力和引擎
engine <- worker()
# 查看引擎配置
engine
## Worker Type:  Jieba Segment
## 
## Default Method  :  mix
## Detect Encoding :  TRUE
## Default Encoding:  UTF-8
## Keep Symbols    :  FALSE
## Output Path     :  
## Write File      :  TRUE
## By Lines        :  FALSE
## Max Word Length :  20
## Max Read Lines  :  1e+05
## 
## Fixed Model Components:  
## 
## $dict
## [1] "C:\\Users\\LIJIAX~1\\AppData\\Local\\Temp\\RtmpCyzJp4/jiebaR_dict/dict/jieba.dict.utf8"
## 
## $user
## [1] "D:/install/R-3.6.0/library/jiebaRD/dict/user.dict.utf8"
## 
## $hmm
## [1] "C:\\Users\\LIJIAX~1\\AppData\\Local\\Temp\\RtmpCyzJp4/jiebaR_dict/dict/hmm_model.utf8"
## 
## $stop_word
## NULL
## 
## $user_weight
## [1] "max"
## 
## $timestamp
## [1] 1602325145
## 
## $default $detect $encoding $symbol $output $write $lines $bylines can be reset.

worker()为分词提供动力和引擎 Default Method : mix使用混合法分词。

\(\Box\)什么是混合法? 最大概率法和隐马尔科夫方法。 什么是最大概率法和隐马尔科夫方法?

Default Encoding: UTF-8 中文编码为UTF-8Max Word Length : 20 分词最大长度为20个词; Max Read Lines : 1e+05 一次性可以读取最大10W行记录。

# 分词
cuts <- segment(sentence, engine)
cuts
##  [1] "滚出去"   "我"       "没有"     "时间"     "听"       "一个"    
##  [7] "牢里"     "混出来"   "的"       "人渣"     "在"       "这里"    
## [13] "跟"       "我"       "讲"       "该"       "怎么样"   "不该"    
## [19] "怎么样"   "你"       "以为"     "西装"     "往"       "身上"    
## [25] "一套"     "我"       "就"       "看不到"   "你"       "骨子里"  
## [31] "的"       "寒酸"     "剪剪"     "头"       "吹"       "吹风"    
## [37] "就"       "能"       "掩藏"     "住"       "心里"     "的"      
## [43] "猥琐"     "你"       "差"       "得"       "还"       "远"      
## [49] "你"       "这种"     "人"       "我"       "见得多了" "但"      
## [55] "还"       "没有"     "见到"     "过敢"     "对"       "我"      
## [61] "指手画脚" "的"       "消失"     "快"       "从"       "我"      
## [67] "面前"     "消失"

"剪剪" "头" "吹" "吹风" 是分错的。 因此需要自定义,也就是常说的体力活。

# 自定义词库--方法二
new_user_word(engine, c('剪剪头','吹吹风','见到过'))
## [1] TRUE
cuts2 <- segment(sentence, engine)
cuts2
##  [1] "滚出去"   "我"       "没有"     "时间"     "听"       "一个"    
##  [7] "牢里"     "混出来"   "的"       "人渣"     "在"       "这里"    
## [13] "跟"       "我"       "讲"       "该"       "怎么样"   "不该"    
## [19] "怎么样"   "你"       "以为"     "西装"     "往"       "身上"    
## [25] "一套"     "我"       "就"       "看不到"   "你"       "骨子里"  
## [31] "的"       "寒酸"     "剪剪头"   "吹吹风"   "就"       "能"      
## [37] "掩藏"     "住"       "心里"     "的"       "猥琐"     "你"      
## [43] "差"       "得"       "还"       "远"       "你"       "这种"    
## [49] "人"       "我"       "见得多了" "但"       "还"       "没有"    
## [55] "见到过"   "敢"       "对"       "我"       "指手画脚" "的"      
## [61] "消失"     "快"       "从"       "我"       "面前"     "消失"

"剪剪" "头" "吹" "吹风" 就没有了。

剔除你我他。

# 停止词的处理--方法二
cuts3 <- filter_segment(cuts2, filter_words = c('我','的','听','在','你','就','能','还','对',
                                '人','从','但','讲','跟','这种','一个','身上'))
cuts3
##  [1] "滚出去"   "没有"     "时间"     "牢里"     "混出来"   "人渣"    
##  [7] "这里"     "该"       "怎么样"   "不该"     "怎么样"   "以为"    
## [13] "西装"     "往"       "一套"     "看不到"   "骨子里"   "寒酸"    
## [19] "剪剪头"   "吹吹风"   "掩藏"     "住"       "心里"     "猥琐"    
## [25] "差"       "得"       "远"       "见得多了" "没有"     "见到过"  
## [31] "敢"       "指手画脚" "消失"     "快"       "面前"     "消失"

主要使用filter_words中的filter_words参数。 比较好的方式就是把cuts2,选的字符串,长度为1的,肉眼看。 这里使用到stringr包的函数str_length。 RStudio出了cheatsheet,大家可以找找看。

library(tidyverse)
## Warning: 程辑包'tidyverse'是用R版本3.6.3 来建造的
## -- Attaching packages --------------------------------------------------------------------------- tidyverse 1.3.0 --
## √ ggplot2 3.3.2     √ purrr   0.3.4
## √ tibble  3.0.3     √ dplyr   1.0.2
## √ tidyr   1.1.2     √ stringr 1.4.0
## √ readr   1.3.1     √ forcats 0.5.0
## Warning: 程辑包'ggplot2'是用R版本3.6.3 来建造的
## Warning: 程辑包'tibble'是用R版本3.6.3 来建造的
## Warning: 程辑包'tidyr'是用R版本3.6.3 来建造的
## Warning: 程辑包'readr'是用R版本3.6.3 来建造的
## Warning: 程辑包'purrr'是用R版本3.6.3 来建造的
## Warning: 程辑包'dplyr'是用R版本3.6.3 来建造的
## Warning: 程辑包'stringr'是用R版本3.6.3 来建造的
## Warning: 程辑包'forcats'是用R版本3.6.3 来建造的
## -- Conflicts ------------------------------------------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
cuts3_table <- 
  cuts3 %>% as_data_frame() %>% 
  group_by(value) %>% 
  count() %>% 
  set_names('word','freq')
## Warning: `as_data_frame()` is deprecated as of tibble 2.0.0.
## Please use `as_tibble()` instead.
## The signature and semantics have changed, see `?as_tibble`.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_warnings()` to see where this warning was generated.
  # wordcloud2 的输入需要

这里有22个,一般那种介词,代词都可以T了。

后面都是监督学习搞预测的了,不是文本清洗的重点了。

参考WeChat Article

library(wordcloud2)
wordcloud2(cuts3_table)
## Warning in if (class(data) == "table") {: 条件的长度大于一,因此只能用其第一元素