文本挖掘|不得不知的jiebaR包,切词分词?

时间:2022-07-22
本文章向大家介绍文本挖掘|不得不知的jiebaR包,切词分词?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

基于文本分析的场景有词云图、基于距离的文本聚类、基于监督的文本分类、情感分析等等。不管是文档库,文章、段落或句子,针对文本挖掘的基础都集中于词的分析,即针对文档库/段落/句子等的分词(切词)。词是很多中文自然语言处理的基础,分词有助于提取文档的特征,对后续的分类模型构建有很大影响。jiebaR包的切词手段有多种,比如基于最大概率法mp,隐马尔科夫hmm,最大概率法+隐马尔科夫混合法mix,查询法query。jiebaR 包参考链接: http://qinwenfeng.com/jiebaR/。

分词引擎worker

worker()用法

#worker(type = "mix", dict = DICTPATH, hmm = HMMPATH,
  user = USERPATH, idf = IDFPATH, stop_word = STOPPATH, write = T,
  qmax = 20, topn = 5, encoding = "UTF-8", detect = T,
  symbol = F, lines = 1e+05, output = NULL, bylines = F,
  user_weight = "max")
type:切词方法,默认使用混合法返回类型。tag词性标注,keywords关键词抽提。
dict:指定主词典的路径,相当于词库。
hmm:隐马尔科夫模式的路径。
user:自定义字典的路径。
idf:逆文档频次的路径。
stop_word:指定停止词的路径。
write:输出结果的路径。
qmax:在使用查询模式的时候,可指定最大的查询词的长度。
topn:提取文档关键词的个数,默认前5个。
encoding:指定输入文件的编码UTF8。
lines:指定最大的读取行数。
output:指定输出的文件路径。
user_weight:用户自定义字典权重设定,当使用自定义词典时,默认权重为最高。

#segment(code,jiebar,mod=NULL)

code:文本句子。

jiebar:设置分组的引擎worker。

mod:指定返回分词的结果类型,也是相当于切词的手段(mp/hmm/mix/query)。

#例子1

> sentence<-"脱贫攻坚是我们党对全国各族人民的庄严承诺,事关全面小康、家国梦想。扶贫路上最美的风景是群众笑脸,群众满意是最好的“民生答卷”"
> jiebar<-worker()#默认混合模式
> segment(sentence,jiebar)
 [1] "脱贫"     "攻坚"     "是"       "我们"     "党"       "对"       "全国"     "各族人民"
 [9] "的"       "庄严"     "承诺"     "事关"     "全面"     "小康"     "家"       "国"      
[17] "梦想"     "扶贫"     "路上"     "最美"     "的"       "风景"     "是"       "群众"    
[25] "笑脸"     "群众满意" "是"       "最好"     "的"       "民生"     "答卷"   

#例子2

> engine<-worker()
> egvector<-c('群众满意是最好的“民生答卷”','天气真好')
> engine<=egvector
[1] "群众满意" "是"       "最好"     "的"       "民生"     "答卷"     "天气"     "真好" 

词性标注

> cutter=worker(type = "tag")
> cutter_words<-cutter<="我爱厦门"
> cutter_words
     r      v     ns 
  "我"   "爱" "厦门"  

r:表示代词

v:表示动词

ns:表示地名

中文词性标识以及含义表获取方式:

关注公众号

后台回复【中文词性标识】

停止词处理

“的”,“哦”,“哎呦”,“而且”,“了”,“是”等一般被视为停用词。在jiebaR 中,可以通过词性标注去除停用词,也可通过指定停用词词典去除停用词。

1、词性标注法

> stop=c('r','p')。
> sentence=worker(type = "tag") 
> sentence_words<-sentence<="脱贫攻坚是我们党对全国各族人民的庄严承诺,事关全面小康、家国梦想" 
> sentence_words[!(names(sentence_words) %in% stop)]#去除停止词是代词,介词。
         v         vn          v          n          n          l         uj          a          v 
    "脱贫"     "攻坚"       "是"       "党"     "全国" "各族人民"       "的"     "庄严"     "承诺" 
         n          n         nr          q          n          n 
    "事关"     "全面"     "小康"       "家"       "国"     "梦想" 

问题1:如果要把“脱贫攻坚”,“家国梦想”,“民生答卷”,“群众笑脸”这四个词不切开,以固定名词出现,该如何切词??

2、指定停用词词典

假设停用词词典txt文本文件,如下:

注:停用词典txt文件一定要放在R语言的工作目录下才行,而且txt文件的第一行需为空行否则无法导入停用词典,当前工作目录路径采用getwd()得知。

> sentence=worker(stop_word='stop.txt') 
> sentence_words<-sentence<="脱贫攻坚是我们党对全国各族人民的庄严承诺,事关全面小康、家国梦想"
> sentence_words
 [1] "脱贫"     "攻坚"     "党"       "全国"     "各族人民" "庄严"     "承诺"     "事关"    
 [9] "全面"     "小康"     "家"       "国"       "梦想"  

自定义分词词典

jiebaR自定义分词词典格式包含词、词频、词性,如下。

人民群众 12 n

老百姓 23 nz

中国 12 nz

其中“12”表示“人民群众”的词频,n越大被分词的可能性越高。设置自定义分词词典 user.txt 文本文件。

> user_dict=worker(type = "mix",user="user.txt")
> user_dict<="脱贫攻坚是我们党对全国各族人民的庄严承诺,事关全面小康、家国梦想。扶贫路上最美的风景是群众笑脸,群众满意是最好的“民生答卷”"
 [1] "脱贫攻坚" "是"       "我们"     "党"       "对"       "全国"     "各族人民" "的"      
 [9] "庄严"     "承诺"     "事关"     "全面"     "小康"     "家国梦想" "扶贫"     "路上"    
[17] "最美"     "的"       "风景"     "是"       "群众笑脸" "群众满意" "是"       "最好"    
[25] "的"       "民生答卷"

以上自定义词典很方便的解决了问题1,特别适合量大文档库处理。针对问题1,还可用新增词函数解决:

new_user_word(worker,tags=rep("n",length(words)))

worker:已经指定的分词引擎

words:自定义词

tags:默认为名词词性

> sentence<-"脱贫攻坚是我们党对全国各族人民的庄严承诺,事关全面小康、家国梦想。扶贫路上最美的风景是群众笑脸,群众满意是最好的“民生答卷”"
> jiebar<-worker()#默认混合模式  
> new_user_word(jiebar,c('民生答卷','群众笑脸','家国梦想','脱贫攻坚'))
[1] TRUE
> segment(sentence,jiebar)

修改前后对比如下: