文本挖掘|不得不知的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)
修改前后对比如下:
前
后
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Spring中眼见为虚的 @Configuration 配置类
- 微信6.6.7版本后图文分享无标题的分析
- GEO 数据挖掘-数据获得
- POI和EasyExcel-你还在为导入导出数据苦恼吗?
- geo数据挖掘-2
- 基于ssm的客户管理系统
- 牛逼哄哄的Spring是怎么被MyBatis给征服了?
- Flutter如何和Native通信-Android视角
- 面试问倒无数人的Spring事务问题,就被你这样说完了?
- GEO数据挖掘3
- 史上最全Docker初学者命令大全
- 想要学会Spring源码,你必知必会的BeanDefinition原理!
- 你知道Spring中BeanFactoryPostProcessors是如何执行的吗?
- 记一次向Spring官方提交PR的失败经历
- GEO数据挖掘4