搜索
查看: 3451|: 0

jiebaR 0.1 发布,R语言中文分词

[复制链接]

142

主题

3

回帖

492

积分

版主

积分
492
发表于 2014-11-7 17:10:10 | 显示全部楼层 |阅读模式
        jiebaR是"结巴"中文分词的R语言版本,支持最大概率法(Maximum Probability),隐式马尔科夫模型(Hidden Markov Model),索引模型(QuerySegment),混合模型(MixSegment),共四种分词模式,同时有词性标注,关键词提取,文本Simhash相似度比较等功能。项目使用了Rcpp和CppJieba进行开发。
特性
  • 支持 Windows , Linux操作系统(Mac 暂未测试)。
  • 通过Rcpp Modules实现同时加载多个分词系统,可以分别使用不同的分词模式和词库。
  • 支持多种分词模式、中文姓名识别、关键词提取、词性标注以及文本Simhash相似度比较等功能。
  • 支持加载自定义用户词库,设置词频、词性。
  • 同时支持简体中文、繁体中文分词。
  • 支持自动判断编码模式。
  • 比原"结巴"中文分词速度快,是其他R分词包的5-20倍。
  • 安装简单,无需复杂设置。
  • 可以通过Rpy2,jvmr等被其他语言调用。
  • 基于MIT协议。

安装
目前该包还没有发布到CRAN,可以通过Github进行安装。Windows系统需要安装 Rtools,或者可以下载二进制包,进行安装:
  1. library(devtools)
  2. install_github("qinwf/jiebaR")
复制代码

使用示例分词
jiebaR提供了四种分词模式,可以通过jiebar()来初始化分词引擎,使用segment()进行分词。
  1. library(jiebaR)
  2. ##  接受默认参数,建立分词引擎
  3. mixseg = worker()
  4. ##  相当于:
  5. ##       jiebar( type = "mix", dict = "inst/dict/jieba.dict.utf8",
  6. ##               hmm  = "inst/dict/hmm_model.utf8",  ### HMM模型数据
  7. ##               user = "inst/dict/user.dict.utf8") ### 用户自定义词库
  8. mixseg <= "江州市长江大桥参加了长江大桥的通车仪式"  ### <= 分词运算符
  9. ## 相当于 segment( "江州市长江大桥参加了长江大桥的通车仪式" , mixseg )

  10. [1] "江州"     "市长"     "江大桥"   "参加"     "了"       "长江大桥"
  11. [7] "的"       "通车"     "仪式"
复制代码
支持对文件进行分词:
  1. mixseg <= "./temp.dat"  ### 自动判断输入文件编码模式,默认文件输出在同目录下。
  2. ## segment( "./temp.dat" , mixseg )
复制代码
在加载分词引擎时,可以自定义词库路径,同时可以启动不同的引擎:
最大概率法(MPSegment),负责根据Trie树构建有向无环图和进行动态规划算法,是分词算法的核心。
隐式马尔科夫模型(HMMSegment)是根据基于人民日报等语料库构建的HMM模型来进行分词,主要算法思路是根据(B,E,M,S)四个状态来代表每个字的隐藏状态。 HMM模型由dict/hmm_model.utf8提供。分词算法即viterbi算法。
混合模型(MixSegment)是四个分词引擎里面分词效果较好的类,结它合使用最大概率法和隐式马尔科夫模型。

索引模型(QuerySegment)先使用混合模型进行切词,再对于切出来的较长的词,枚举句子中所有可能成词的情况,找出词库里存在。
  1. mixseg2 = worker(type  = "mix", dict = "dict/jieba.dict.utf8",
  2.                  hmm   = "dict/hmm_model.utf8",  
  3.                  user  = "dict/test.dict.utf8",
  4.                  detect=T,      symbol = F,
  5.                  lines = 1e+05, output = NULL
  6.                  )
  7. mixseg2   ### 输出worker的设置

  8. Worker Type:  Mix Segment
  9. Detect Encoding :  TRUE
  10. Default Encoding:  UTF-8
  11. Keep Symbols    :  FALSE
  12. Output Path     :  
  13. Write File      :  TRUE
  14. Max Read Lines  :  1e+05
  15. Fixed Model Components:  
  16. $dict
  17. [1] "dict/jieba.dict.utf8"
  18. $hmm
  19. [1] "dict/hmm_model.utf8"
  20. $user
  21. [1] "dict/test.dict.utf8"
  22. $detect $encoding $symbol $output $write $lines can be reset.
复制代码
可以通过R语言常用的$符号重设一些worker的参数设置 , 如WorkerName$symbol = T,在输出中保留标点符号。一些参数在初始化的时候已经确定,无法修改, 可以通过WorkerName$PrivateVarible来获得这些信息。
  1. mixseg$encoding
  2. mixseg$detect = F
复制代码
可以自定义用户词库,推荐使用深蓝词库转换构建分词词库,它可以快速地将搜狗细胞词库等输入法词库转换为jiebaR的词库格式。
  1. ShowDictPath()  ### 显示词典路径
  2. EditDict()      ### 编辑用户词典
  3. ?EditDict()     ### 打开帮助系统
复制代码
词性标注
可以使用<=.tagger或者tag来进行分词和词性标注, 词性标注使用混合模型模型分词,标注采用和 ictclas 兼容的标记法。
  1. words = "我爱北京天安门"
  2. tagger = worker("tag")
  3. tagger <= words


  4.    r      v      ns        ns
  5.     "我"     "爱"   "北京" "天安门"
复制代码
关键词提取
关键词提取所使用逆向文件频率(IDF)文本语料库可以切换成自定义语料库的路径,使用方法与分词类似。topn参数为关键词的个数。
  1. keys = worker("keywords", topn = 1)
  2. keys <= "我爱北京天安门"
  3. keys <= "一个文件路径.txt"
复制代码
  1.   8.9954
  2. "天安门"
复制代码

Simhash 与海明距离
对中文文档计算出对应的simhash值。simhash是谷歌用来进行文本去重的算法,现在广泛应用在文本处理中。Simhash引擎先进行分词和关键词提取,后计算Simhash值和海明距离。
  1. words = "hello world!"
  2. simhasher = worker("simhash",topn=2)
  3. simhasher <= "江州市长江大桥参加了长江大桥的通车仪式"


  4. $simhash
  5. [1] "12882166450308878002"
  6. $keyword
  7.    22.3853    8.69667
  8. "长江大桥"     "江州"


  9. $distance
  10. [1] "23"
  11. $lhs
  12.    22.3853    8.69667
  13. "长江大桥"     "江州"
  14. $rhs
  15. 11.7392 11.7392
  16. "hello" "world"
复制代码
计划支持
  • 支持 Windows , Linux , Mac 操作系统并行分词。
  • 简单的自然语言统计分析功能。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

大数据中国微信

QQ   

版权所有: Discuz! © 2001-2013 大数据.

GMT+8, 2024-12-21 21:49 , Processed in 0.065690 second(s), 24 queries .

快速回复 返回顶部 返回列表