实训中的天然语言处理部分,首先就是要分词了,学习一下!正则表达式
使用jiebaR的第一步固然是安装jiabaR包并加载咯算法
安装: install.packages("jiebaR") 加载: library(jiebaR) app
三种分词语句的写法:函数
wk = worker() #方法1 wk["我但愿将来会很好"] #方法2 wk<="我但愿将来会很好" #此处用=的话可不行哟 #方法3 segment("我但愿将来会很好",wk)
结果都是同样的,以下
[1] "我" "但愿" "将来" "会" "很" "好" 学习
固然也可对文本文件进行分词:当前目录下建立文本文件like.txtui
##like.txt 新的一学年开始了,结束了大一的骄傲和浮躁以后,桥川、钟白、任逸帆等人顺利进入了大二。肖海洋也经过了大一的考试,如愿以偿没有留级。大一的同学情谊依旧继续。过了一个假期,大二伊始,旧同窗的离开和新同窗的加入,让他们之间的关系也发生了微妙变化。顾一心随家人去了美国上学, 毕十三把这份牵挂变成了学习上奋进的动力。转学生许连翘新转入电摄班并貌似带着神秘的任务。原班主任的离开,让本来散漫的电摄班开始团结。 人物的新旧交替,和大二课业的丰富与繁重,2015级电摄班大二的同学故事更加精彩。这时的他们褪去了大一的青涩,迎来大学中成长速度最快的一年。九我的开启了各自的梦想,并在跌跌撞撞中实现本身的梦想。又是一年大学时光的流逝,九位同学好友之间的情谊愈来愈浓。
而后,输入 wk['like.txt'] ,此时同等价于 segment('like.txt',wk) , wk<='like.txt' 编码
返回 [1] "like.segment.2018-01-08_16_13_17.txt" ,即在同目录下生成了分好词的文件,以下:spa
##like.segment.2018-01-08_16_13_17.txt 新 的 一 学年 开始 了 结束 了 大 一 的 骄傲 和 浮躁 以后 桥川 钟 白 任 逸 帆 等 人 顺利 进入 了 大二 肖 海洋 也 经过 了 大 一 的 考试 如愿以偿 没有 留级 大一 的 同学 情谊 依旧 继续 过 了 一个 假期 大二 伊始 旧 同窗 的 离开 和 新 同窗 的 加入 让 他们 之间 的 关系 也 发生 了 微妙 变化 顾 一心 随 家人 去 了 美国 上学 毕 十三 把 这份 牵挂 变成 了 学习 上 奋进 的 动力 转 学生 许 连翘 新 转入 电摄 班 并 貌似 带 着 神秘 的 任务 原 班主任 的 离开 让 本来 散漫 的 电 摄班 开始 团结 人物 的 新旧交替 和 大二 课业 的 丰富 与 繁重 2015 级 电 摄班 大二 的 同学 故事 更加 精彩 这时 的 他们 褪去 了 大 一 的 青涩 迎来 大学 中 成长 速度 最快 的 一年 九个 人 开启 了 各自 的 梦想 并 在 跌跌撞撞 中 实现 本身 的 梦想 又 是 一年 大学 时光 的 流逝 九位 同学好友 之间 的 情谊 愈来愈 浓
so easy 吧,如今让咱们看一下刚刚到底发生了些什么.net
在调用worker()函数时,咱们实际是在加载jiebaR库的分词引擎。jiebaR库提供了7种分词引擎。3d
通常状况下,使用默认引擎(混合模型)就足够了。
下面让咱们仔细研究如下work()函数
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")
各参数的含义以下:
work()函数的默认配置:
若是咱们想改变分词引擎的配置项,能够在调用worker()建立分词引擎时,也能够经过wk$XX来进行设置
编写自定义的词典文件,mydict.utf8
而后,在调用worker时设置自定义的用户词典 wk=worker(user="mydict.utf8")
再次对like.txt执行分词,获得的结果以下:
【自定义词典结果】
【默认词典结果】
duang,是否是颇有效果
此外,过滤中止词的本质与自定义词典是同样的啦,只要把中止词的默认文件换成本身的中止词文件就好啦
例如将参数改成: stop_word="stop.txt"
此外此外,还可能须要去除数据字母,可用正则表达式,用stringr包去除空格等
jiabaR包中有自动计算获取词频的函数,freq()
那文件怎么办呢???那就须要读取分词后的文件处理一下,再统计词频了
其实也就是一句代码的事情,啊不,两句。以上面like.txt分词后的文件like_segment.txt为例
out=file("like_segment.txt")
freq(strsplit(readLines(out,encoding="UTF-8")," ")[[1]])
注意:freq的参数是向量。此外,统计词频还能够用table()函数
词性标注可使用worker函数的type参数,type默认为mix,仅需将它设置为tag便可
jiebaR包关于词典词性标记,采用ictclas的标记方法。ICTCLAS 汉语词性标注集。标注及含义:
标注 | 词性 | 标注 | 词性 |
a | 形容词 | Ag | 形容词素 |
n | 名词 | Ng | 名词词素 |
nr | 人名 | m | 数词 |
d | 副词 | Dg | 副词词素 |
c | 连词 | e | 叹词 |
nr | 人名 | ns | 地名 |
t | 时间词 | nt | 机构团体 |
更多的词性标记对应请见:点击
此时,文件操做与此相同。 wk<="like.txt" 便可
依旧能够经过改变worker()的type参数便可
其中,keywords时, wk<=words 等同于 vector_keywords(words,wk) , keywords(words,wk)
simhash与之类似。
此外,文件分词操做与此相似。
此外,jiebaR中还有可能会用到的函数:
一、在默认用户词典的基础上,添加新的用户词 new_user_word ,但仅做用于当前分词引擎
二、停用词过滤函数:filter_segment(分词后的向量,过滤词向量)
三、显示词典路径: show_dictpath()
四、分词的快速模式 qseg (quick segmentation) qseg<=text
五、在线jiebaR分词:https://qinwf.shinyapps.io/jiebaR-shiny/
六、get_tuple() 返回分词结果中 n 个连续的字符串组合的频率状况,能够做为自定义词典的参考