提纲挈领的说明, 就是把一波文字取出来,找出重要的词,剔除干扰的词。
参考(
【干货】–手把手教你完成文本情感分类
)
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-8
;
Max 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了。
后面都是监督学习搞预测的了,不是文本清洗的重点了。
library(wordcloud2)
wordcloud2(cuts3_table)
## Warning in if (class(data) == "table") {: 条件的长度大于一,因此只能用其第一元素