##普通版本
install.packages("jiebaR")
##开发版本
library(devtools)
install_github("qinwf/jiebaRD")
#安装之前电脑需要先安装command line tools
install_github("qinwf/jiebaR")
library("jiebaR")
一、segment函数
segment(code, jiebar, mod = NULL)
二、worker函数
worker(type = "mix", #引擎类型
dict = DICTPATH, #系统词典
hmm = HMMPATH, #HMM模型路径
user = USERPATH, #用户词典路径
idf = IDFPATH, #IDF词典
stop_word = STOPPATH, #停止词词库
write = T, #是否将文件分词结果写进文件,默认TRUE
qmax = 20, #最大成词的字符数,默认20个字符
topn = 5, #关键词数
encoding = "UTF-8", #输入文件的编码,默认UTF-8
detect = T, #是否编码检查,默认TRUE
symbol = F, #是否保留符号,默认FALSE
lines = 1e+05, #每次读取文件的最大行数
output = NULL, #输出路径
bylines = F, #按行输出
user_weight = "max") #用户权重
注意:
调用worker()函数时,我们实际是在加载jiebaR库的分词引擎。jiebaR库提供了7种分词引擎。
包括
mix(混合模型),默认模型
mp(最大概率法),
hmm(隐式马尔可夫模型),
full(),
query(索引模型),
tag(标记模型),
simhash,
keywords(关键词模型)
三、new_user_word函数:添加用户自定义词
new_user_word(worker, words, tags = rep("n", length(words)))
四、关键词提取函数
keywords(code, jiebar)
vector_keywords(code, jiebar)
注意:这里的两个code含义不同
For keywords, a Chinese sentence or the path of a text file.
For vector_keywords, a character vector of segmented words.
segment函数和worker函数之间的关系
segment(code, jiebar, mod = null)
segment就像老板,他有三个参数,
code就好比任务,
jiebar就是一个worker,
mod参数再告诉worker怎么做这个任务
案例一:对句子直接分词
mixseg <- worker()#worker()函数是用来初始化分词引擎的,默认为混合模型。
text <- "中国缺什么 日本缺什么"
#segment分词的三种写法
#写法一
segment(code = text, jiebar = mixseg)
#写法二
mixseg[text]
#写法三
mixseg <= text
#输出结果
[1] "中国" "缺什么" "日本" "缺什么"
#文本文件在当前工作目录中,直接调用文件名
segment(code = 'example1.txt', jiebar = mixseg)
#函数会在同目录下生成分好词的文本文件
[1] "example1.segment.2019-03-21_16_41_43.txt"
6. 添加自定义词库
上图是分词后的文本文件内容,我们看到一带一路本来是一个词,结果被分成了两个词,因此我们需要添加这个词到我们的自定义词库中。
添加用户自定义词库,有两种办法
第一种:用worker函数中的user参数添加词库
第二种:new_user_word函数
新建名为user_dic的自定义用户词典,内容为:
添加好自定义词库之后,重新分词
segment(code = 'example1.txt', jiebar = worker(user = 'user_dic.txt'))
这时候我们看到一带一路等词语连在一起了,自定义用户词典就是帮助我们把默认词典里没有的词语添加到分词里面。如果需要添加搜狗的词库,可以安装cidian包帮我们把搜狗的词库转换为jiebaR可以使用的词库
此外,如果需要连在一起的词语不多的情况下,我们也可以使用new_user_word函数来添加词库。
engine_new_word <- worker()
new_user_word(engine_new_word, c(‘一带一路', '命运共同体'))
segment('example1.txt', engine_new_word)
segment(code = 'example1.txt',
jiebar = worker(user = 'user_dic.txt',
stop_word = 'stop_word.txt'))
这样的分词就会将那些停用词排除在外
8. 统计词频
用freq函数来统计词频,并将结果保存到result2中
result2 <- freq(segment(code = 'example1.txt',
jiebar = worker(user = 'user_dic.txt',
stop_word = 'stop_word.txt',
write = FALSE)))
函数返回两个字段,一个是char、一个是freq,分别为词语和对应出现的频次,结构如下
head(result2)
char freq
1 生机 1
2 花朵 1
3 艳丽 1
4 努力 1
5 携手 1
6 着 1
用order函数对result2结果按词语出现的频次降序排列
result2_order <- result2[order(result2$freq, decreasing = TRUE), ]
head(result2_order, 20)
char freq
72 中意 18
478 意大利 16
411 两国 14
74 中国 12
175 合作 10
326 关系 9
471 发展 7
77 方 6
80 我们 6
85 世界 6
106 年 6
147 愿 6
267 同意 6
319 交往 6
366 友谊 6
426 历史 6
69 同 5
127 文化 5
153 加强 5
357 为 5
有了这个数据结构之后,可以用wordcloud2对分析结果话文字云
9. 生成文字云
wordcloud2(result2[result2$freq >= 2, ],
color = 'random-light',
fontFamily = '华文-宋体',
backgroundColor = 'black')
效果如下:
10. 统计关键词
提取关键词,将worker里的参数typer设置为keyword或simhash
以type = 'keyword’为例,type = 'simhash’同理
keys <- worker(type = 'keywords',
topn = 10,
stop = 'stop_word.txt',
user = 'user_dic.txt')
#方法一:
keys <= 'example1.txt'
#方法二:
keywords('example1.txt', keys)
#方法三:
vector_keywords(result2, keys) #注意vector_keywords的code为已经分好词的结果
#输出结果
2547.41 170.244 99.8415 95.823 70.4352
" " "中意" "意大利" "两国" "新"
70.4352 70.4352 55.0973 47.5156 46.9568
"愿" "方" "合作" "友谊" "一带一路"
segment(code = 'example1.txt',
jiebar = worker(user = 'user_dic.txt',
stop_word = 'stop_word.txt',
type = 'tag'))
参考来源:
jiebaR,从入门到喜欢 - 云渡的文章 - 知乎
https://zhuanlan.zhihu.com/p/30708886
5分钟上手R语言中文分词包jiebaR - 李晓文的文章 - 知乎
https://zhuanlan.zhihu.com/p/25681782
【文本分析】利用jiebaR进行中文分词 - 文兄的文章 - 知乎
https://zhuanlan.zhihu.com/p/24882048