jiebaR中文分词,从入门到喜欢

  • A+
所属分类:R语言

今天,我主要想谈谈自己对jiebaR这个包。现在我也比较推荐使用jiebaR这个包,原因也大概总结了一下几点。

JiebaRRwordseg
函数数量51个9个
更新速度快,cran最新版更新于2016-09-28慢,R-Forge最新版更新于2013-12-15
安装难度容易难,需要安装Java。
分词引擎只有一种(隐马尔科夫模型)

(个人观点,还望大家在留言区补充)

一、分词

首先,我们来看一下jiebaR里面最重要的一个函数worker函数,通过它,我们可以设置一些分词类型,用户词典,停用词等等。函数原型为:

  1. worker(type = "mix", dict = DICTPATH, hmm = HMMPATH, user = USERPATH,
  2.   idf = IDFPATH, stop_word = STOPPATH, write = T, qmax = 20, topn = 5,
  3.   encoding = "UTF-8", detect = T, symbol = F, lines = 1e+05,
  4.   output = NULL, bylines = F, user_weight = "max")

现在来说说每个参数的作用。

参数

作用

type指分词引擎类型,这个包包括mix, mp, hmm, full, query, tag, simhash, keyword,分别指混合模型,支持最大概率,隐马尔科夫模型,全模式,索引模型,词性标注,文本Simhash相似度比较,关键字提取。
dict词库路径,默认为DICTPATH.
hmm用来指定隐马尔可夫模型的路径,默认值为DICTPATH,当然也可以指定其他分词引擎
user用户自定义的词库
idf用来指定逆文本频率指数路径,默认为DICTPATH,也可以用于simhash和keyword分词引擎
stop_word用来指定停用词的路径
qmax词的最大查询长度,默认为20,可用于query分词类型。
topn关键词的个数,默认为5,可以用于simhash和keyword分词类型
symbol输出是否保留符号,默认为F
Lines从文件中最大一次读取的行数。默认为1e+05
output输出文件,文件名一般时候系统时间。
bylines返回输入的文件有多少行
user_weight用户词典的词权重,有"min" "max" or "median"三个选项。

另外一个函数就是segment,它就好比老板,它有三个参数,code就好比任务,jiebar就是一个worker,但是担心worker对工作的方法不懂,那就用mod参数再告诉worker怎么做,也就是用什么分词引擎分词。作用分别如下。它要用这个工人worker去分词。

参数

作用

code中文句子或者文件
jiebar设置分词的引擎,也就是worker函数
mod改变默认的分词引擎类型,其中包括以下几个:"mix", "hmm","query","full","level",  "mp"

了解完这些参数之后,我们现在就来简单的做一个小分词。

  1. library(jiebaR)
  2. engine<-worker()
  3. words<-"想学R语言,那就赶紧拿起手机,打开微信,关注公众号《跟着菜鸟一起学R语言》,跟着菜鸟一块飞。"
  4. segment(words,engine)

结果如下:
jiebaR中文分词,从入门到喜欢

在这里,我们除了使用segment之外,还可以使用下面代码分词,效果是一样的。

  1. engine<=words

二、添加用户自定义词或词库

那刚才那个例子来说,“公众号”本来就是一个词,结果被分成两个词,因此我需要添加这个词。另外,我也想要“R语言”也被分成一个词。接下来我们就分别使用这两种方法来实现。

1.使用new_user_word函数;2.使用worker函数中通过user参数添加词库。

(1)new_user_word函数

  1. engine_new_word<-worker()
  2. new_user_word(engine_new_word, c("公众号","R语言"))
  3. segment(words,engine_new_word)

结果如下:

jiebaR中文分词,从入门到喜欢

▷ 使用user参数添加词库

看完使用new_user_word函数添加词之后,你是不是心里就在想,如果我有几十个,甚至几百几千个词的话,如果这样输的话那估计得累死。因此我们可以自定义一个词库,然后从词库里面直接读。我建的词库截图如下:

jiebaR中文分词,从入门到喜欢

  1. engine_user<-worker(user='dictionary.txt')
  2. segment(words,engine_user)

为了便于比较,我把这两次分词结果图截到一起,如下

jiebaR中文分词,从入门到喜欢

需要说明的是,在使用词库的话也可以使用new_user_word函数。第二种方法用也可以用new_user_word写成下面这样,结果是一样的。

  1. new_user_word(engine_new_word, scan("dictionary.txt",what="",sep="\n"))
  2. segment(words,engine_new_word)

三、删除停用词

就拿我们刚才使用的例子,分词之后的“那”,“就”就是停用词,因此我们需要删掉。这里我们需要使用worker函数的stop_word参数。

  1. engine_s<-worker(stop_word = "stopwords.txt")
  2. segment(words,engine_s)

jiebaR中文分词,从入门到喜欢

通过对比,我们发些,“那”,“就”已经被删掉了。

四、计算词频

这个jiebaR这个包的功能很全,它已经提供了一个函数——freq,来自动计算获取词频。

这个函数就自动计算了words分词之后的词频,这下我们就很容易使用wordcloud2包绘制词云。

  1. freq(segment(words,engine_s))

jiebaR中文分词,从入门到喜欢

五、词性标注

jiebaR包,提供了一个qseg函数,它在分词的时候也会加上词性,它有两种使用方法。

  1. qseg[words]
  2. qseg<=words

jiebaR中文分词,从入门到喜欢

其中词性标注也可以使用worker函数的type参数,type默认为mix,仅需将它设置为tag即可。

  1. tagger<-worker(type="tag")
  2. tagger<=words

jiebaR中文分词,从入门到喜欢

我自己也找网上找了一些汉语文本词性标注的资料,整理到如下表格。

标注词性标注词性
ag形容素a形容词
ad副形词an名形词
b区别词c连词
Dg副语素d副词
e叹词f方位词
g语素h前接成分
i成语j简称略语
k后接成分l习用语
m数词ng名词素
n名词nr人名
nr1汉语姓氏nr2日语姓氏
nrj日语人名nrf音译人名
ns地名nt机构团体
nz其他专名nl名词性惯用语
vf取向动词vx形式动词
p介词q量词
r代词s处所词
tg时间词性语素(时语素)t时间词
u助词vg动词素
v动词vd副动词
vn名动词w标点符号
y语气词x非语素词
z状态词o拟声词

六,提取关键字

  1. #type=keywords
  2. keys<-worker(type="keywords",topn=2)
  3. keys<=words
  4. #type=simhash
  5. keys2<-worker(type="simhash",topn=2)
  6. keys2<=words

jiebaR中文分词,从入门到喜欢

​七、总结

这个jiebaR这个包的功能很全,从分词,到添加词库,到删除停用词,再到统计词频,甚至词性标注和提取关键字,它已经提供了对应得函数,可以说一个包就提供了我们对文本分析所需要的所有基本功能。再统计完词频之后,我们可以很方便的使用Wordcloud2包来绘制词云。

精选各名校数学专业考研初试试卷
数学建模教材(包括十大算法、matlab、lingo、spss、exce以及多种实例模型)
2016年度中国软件开发者白皮书下载(PDF)
R语言神经网络模型银行客户信用评估数据

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: