R | 教程 jiebaR中文分词
Posted 社会科学中的机器学习
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R | 教程 jiebaR中文分词相关的知识,希望对你有一定的参考价值。
导言
jiebaR
是"结巴"中文分词的R语言版本,支持最大概率法(Maximum Probability),隐式马尔科夫模型(Hidden Markov Model),索引模型(QuerySegment),混合模型(MixSegment),共四种分词模式。本次推送将介绍
R
中
jiebaR
程序包关于中文分词的具体方法。
安装软件包
install.packages("jiebaR")
默认引擎分词
jiebaR
默认使用混合模型(MixSegment)进行分词,可对语句(变量)和文档(路径)分词。
对语句进行分词
library(jiebaR)
engine1 = worker()
words="我希望未来会很好"
engine1[words] #方法1
engine1<=words #方法2
segment(words",engine1) #方法3
[1] "我" "希望" "未来" "会" "很" "好"
对文本文件进行分词
like.txt
like.txt
人物的新旧交替,和大二课业的丰富与繁重,2015级电摄班大二的同窗故事更加精彩。这时的他们褪去了大一的青涩,迎来大学中成长速度最快的一年。九个人开启了各自的梦想,并在跌跌撞撞中实现自己的梦想。又是一年大学时光的流逝,九位同窗好友之间的情谊越来越浓。
library(jiebaR)
engine1 = worker()
segment['like.txt',engine1]
[1] "C:/Users/Li/Documents/RData/like.segment.2020-08-12_22_09_29.txt"
更多分词引擎
worker()
函数时,我们实际是在加载
jiebaR
库的分词引擎。
jiebaR
库中提供了8种分词引擎。
-
混合模型(MixSegment):默认引擎。四个分词引擎里面分词效果较好,结合使用最大概率法和隐式马尔科夫模型。 -
最大概率法(MPSegment) :负责根据Trie树构建有向无环图和进行动态规划算法,是分词算法的核心。 -
全分词模型(FullSegment):将枚举字典中所有可能的单词 -
隐式马尔科夫模型(HMMSegment):是根据基于人民日报等语料库构建的HMM模型来进行分词,主要算法思路是根据(B,E,M,S)四个状态来代表每个字的隐藏状态。HMM模型由dict/hmm_model.utf8提供。分词算法即viterbi算法。 -
索引模型(QuerySegment):先使用混合模型进行切词,再对于切出来的较长的词,枚举句子中所有可能成词的情况,找出词库里存在。 -
标记模型(tag):先使用混合模型进行切词,并在切分后使用与ictclas兼容的标签对词进行词性标注。 -
Simhash模型(simhash):使用关键字提取worker查找关键字,并使用Simhash算法计算Simhash值。 -
关键词模型(keywords):可抽取关键词
参数解释
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")
worker()
函数各参数含义:
-
type, 引擎类型,包括 mix
,mp
,hmm
,full
,query
,tag
,simhash
, 和keywords
. -
dict, 系统词典,默认DICTPATH -
hmm, HMM模型路径 -
user, 用户词典 -
idf, IDF词典 -
stop_word, 关键词用停止词库 -
write, 是将输出写入文件,还是在对象中返回结果。仅在输入为文件路径使用。默认TRUE。 -
qmax, 最大成词的字符数,默认20个字符 -
topn, 关键词数,默认5个 -
encoding, 输入文件的编码,默认UTF-8 -
detect, 是否编码检查,默认TRUE -
symbol, 是否保留符号,默认FALSE -
lines, 每次读取文件的最大行数,用于控制读取文件的长度。大文件则会分次读取。 -
output, 输出路径 -
bylines, 按行输出 -
user_weight, 用户权重
更改分词引擎配置项
WorkerName$symbol = T
的形式来进行设置以下为帮助手册中的例子:
engine2 = worker("hmm") #创建时更改配置项
segment("./temp.txt", engine2)
engine2$write = T #通过$更改配置项
segment("./temp.txt", engine2)
engine3 = worker(type = "mix", dict = "dict_path",symbol = T) #指定系统词典,并保留符号
segment("./temp.txt", engine3)
#关键词模式,筛选1个关键词
engine = worker("keywords", topn = 1) #关键词模式,筛选1个关键词
keywords(words, engine)
#标记模式,对分好后的每个词标记词性
tagger = worker("tag")
tagging("我爱厦门", tagger)
# r v ns
# "我" "爱" "厦门"
# r:代词 v:动词 ns:地名
### Simhash模型,筛选一个关键词
simhasher = worker("simhash", topn = 1)
simhash(words, simhasher) #计算关键词和原文的simhash值
distance("hello world" , "hello world!" , simhasher) #该函数使用Simhash引擎进行关键字提取,从两个输入中找到关键字,然后计算它们之间的Hamming距离。
自定义用户词典
mydict.utf8
包括:一学年 大一 钟白 任逸帆 肖海洋
engine=worker(user="mydict.utf8")
segment['like.txt',engine]
停止词处理
词性标注法:
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
"事关" "全面" "小康" "家" "国" "梦想"
指定停止词词典
是 我们 对 的
注:停止词词典txt文件一定要放在R语言的工作目录下才行,而且txt文件的第一行需为空行否则无法导入停用词典,当前工作目录路径采用getwd()得知。
sentence=worker(stop_word='stop.txt')
sentence_words<-sentence<="脱贫攻坚是我们党对全国各族人民的庄严承诺,事关全面小康、家国梦想"
sentence_words
[1] "脱贫" "攻坚" "党" "全国" "各族人民" "庄严" "承诺" "事关" "全面"
[10] "小康" "家" "国" "梦想"
以上是关于R | 教程 jiebaR中文分词的主要内容,如果未能解决你的问题,请参考以下文章