R语言分词包——jiebaR

  1. 包的安装与载入
##普通版本
install.packages("jiebaR")
##开发版本
library(devtools)
install_github("qinwf/jiebaRD")
#安装之前电脑需要先安装command line tools
install_github("qinwf/jiebaR")
library("jiebaR")
  1. 主要函数
一、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.
  1. segment函数和worker函数之间的关系
    segment(code, jiebar, mod = null)
    segment就像老板,他有三个参数,
    code就好比任务,
    jiebar就是一个worker,
    mod参数再告诉worker怎么做这个任务

  2. 案例一:对句子直接分词

mixseg <- worker()#worker()函数是用来初始化分词引擎的,默认为混合模型。
text <- "中国缺什么 日本缺什么"

#segment分词的三种写法
#写法一
segment(code = text, jiebar =  mixseg)
#写法二
mixseg[text] 
#写法三
mixseg <= text 

#输出结果
[1] "中国"   "缺什么" "日本"   "缺什么"
  1. 案例二:对文本文件进行分词
    文本来自习近平主席2019年3月20日在对意大利共和国进行国事访问前夕,在意大利《晚邮报》发表的题为《东西交往传佳话 中意友谊续新篇》的署名文章,将文章内容复制到一个文本文件里,并放到R当前的工作目录中,命名为example1.txt
#文本文件在当前工作目录中,直接调用文件名
segment(code = 'example1.txt', jiebar = mixseg)

#函数会在同目录下生成分好词的文本文件
[1] "example1.segment.2019-03-21_16_41_43.txt"

R语言分词包——jiebaR_第1张图片
6. 添加自定义词库
上图是分词后的文本文件内容,我们看到一带一路本来是一个词,结果被分成了两个词,因此我们需要添加这个词到我们的自定义词库中。
添加用户自定义词库,有两种办法
第一种:用worker函数中的user参数添加词库
第二种:new_user_word函数
新建名为user_dic的自定义用户词典,内容为:
R语言分词包——jiebaR_第2张图片
添加好自定义词库之后,重新分词

segment(code = 'example1.txt', jiebar = worker(user = 'user_dic.txt'))

R语言分词包——jiebaR_第3张图片
这时候我们看到一带一路等词语连在一起了,自定义用户词典就是帮助我们把默认词典里没有的词语添加到分词里面。如果需要添加搜狗的词库,可以安装cidian包帮我们把搜狗的词库转换为jiebaR可以使用的词库
此外,如果需要连在一起的词语不多的情况下,我们也可以使用new_user_word函数来添加词库。

engine_new_word <- worker()
new_user_word(engine_new_word, c(‘一带一路', '命运共同体'))
segment('example1.txt', engine_new_word)
  1. 删除停用词
    就像刚才的例子,的,和,了,这些就是停用词,我们需要删掉,新建一个停用此文本文件,命名为stop_word,把停用此放进去,注意首行要空着
    在这里插入图片描述
    添加好停用词文件之后,就可以用worker的stop_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')

效果如下:
R语言分词包——jiebaR_第4张图片
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 
     "愿"       "方"     "合作"     "友谊" "一带一路" 
 
  1. 标注词性
    使用worker函数的type参数,默认为mix,设置为tag
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

你可能感兴趣的:(R)