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

标签: 软件更新新闻 | 发表时间:2014-11-04 06:06 | 作者:
出处:http://www.oschina.net/?from=rss

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,或者可以下载 二进制包,进行安装:

library(devtools)
install_github("qinwf/jiebaR")

使用示例

分词

jiebaR提供了四种分词模式,可以通过jiebar()来初始化分词引擎,使用segment()进行分词。

library(jiebaR)
##  接受默认参数,建立分词引擎 
mixseg = worker()
##  相当于:
##       jiebar( type = "mix", dict = "inst/dict/jieba.dict.utf8",
##               hmm  = "inst/dict/hmm_model.utf8",  ### HMM模型数据
##               user = "inst/dict/user.dict.utf8") ### 用户自定义词库
mixseg <= "江州市长江大桥参加了长江大桥的通车仪式"  ### <= 分词运算符
## 相当于 segment( "江州市长江大桥参加了长江大桥的通车仪式" , mixseg )
[1] "江州"     "市长"     "江大桥"   "参加"     "了"       "长江大桥"
[7] "的"       "通车"     "仪式"

支持对文件进行分词:

mixseg <= "./temp.dat"  ### 自动判断输入文件编码模式,默认文件输出在同目录下。
## segment( "./temp.dat" , mixseg )

在加载分词引擎时,可以自定义词库路径,同时可以启动不同的引擎:

最大概率法(MPSegment),负责根据Trie树构建有向无环图和进行动态规划算法,是分词算法的核心。

隐式马尔科夫模型(HMMSegment)是根据基于人民日报等语料库构建的HMM模型来进行分词,主要算法思路是根据(B,E,M,S)四个状态来代表每个字的隐藏状态。 HMM模型由dict/hmm_model.utf8提供。分词算法即viterbi算法。

混合模型(MixSegment)是四个分词引擎里面分词效果较好的类,结它合使用最大概率法和隐式马尔科夫模型。

索引模型(QuerySegment)先使用混合模型进行切词,再对于切出来的较长的词,枚举句子中所有可能成词的情况,找出词库里存在。

mixseg2 = worker(type  = "mix", dict = "dict/jieba.dict.utf8",
                 hmm   = "dict/hmm_model.utf8",  
                 user  = "dict/test.dict.utf8",
                 detect=T,      symbol = F,
                 lines = 1e+05, output = NULL
                 ) 
mixseg2   ### 输出worker的设置
Worker Type:  Mix Segment
Detect Encoding :  TRUE
Default Encoding:  UTF-8
Keep Symbols    :  FALSE
Output Path     :  
Write File      :  TRUE
Max Read Lines  :  1e+05
Fixed Model Components:  
$dict
[1] "dict/jieba.dict.utf8"
$hmm
[1] "dict/hmm_model.utf8"
$user
[1] "dict/test.dict.utf8"
$detect $encoding $symbol $output $write $lines can be reset.

可以通过R语言常用的$符号重设一些worker的参数设置 , 如WorkerName$symbol = T,在输出中保留标点符号。一些参数在初始化的时候已经确定,无法修改, 可以通过WorkerName$PrivateVarible来获得这些信息。

mixseg$encoding
mixseg$detect = F

可以自定义用户词库,推荐使用 深蓝词库转换构建分词词库,它可以快速地将搜狗细胞词库等输入法词库转换为jiebaR的词库格式。

ShowDictPath()  ### 显示词典路径
EditDict()      ### 编辑用户词典
?EditDict()     ### 打开帮助系统

词性标注

可以使用<=.tagger或者tag来进行分词和词性标注, 词性标注使用混合模型模型分词,标注采用和 ictclas 兼容的标记法。

words = "我爱北京天安门"
tagger = worker("tag")
tagger <= words
     r        v       ns       ns 
    "我"     "爱"   "北京" "天安门"

关键词提取

关键词提取所使用逆向文件频率(IDF)文本语料库可以切换成自定义语料库的路径,使用方法与分词类似。topn参数为关键词的个数。

keys = worker("keywords", topn = 1)
keys <= "我爱北京天安门"
keys <= "一个文件路径.txt"
  8.9954 
"天安门"

Simhash 与海明距离

对中文文档计算出对应的simhash值。simhash是谷歌用来进行文本去重的算法,现在广泛应用在文本处理中。Simhash引擎先进行分词和关键词提取,后计算Simhash值和海明距离。

 words = "hello world!"
 simhasher = worker("simhash",topn=2)
 simhasher <= "江州市长江大桥参加了长江大桥的通车仪式"
$simhash
[1] "12882166450308878002"
$keyword
   22.3853    8.69667 
"长江大桥"     "江州"
$distance
[1] "23"
$lhs
   22.3853    8.69667 
"长江大桥"     "江州" 
$rhs
11.7392 11.7392 
"hello" "world"

计划支持

  • 支持 Windows , Linux , Mac 操作系统并行分词。

  • 简单的自然语言统计分析功能。


相关 [jiebar 0.1 语言] 推荐:

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

- - 开源中国社区最新新闻
jiebaR是"结巴"中文分词的R语言版本,支持最大概率法(Maximum Probability),隐式马尔科夫模型(Hidden Markov Model),索引模型(QuerySegment),混合模型(MixSegment),共四种分词模式,同时有词性标注,关键词提取,文本Simhash相似度比较等功能.

语言壁垒

- kylexlau - Chun Tian (binghe)
虽然经常更新微博,但确实又有些日子没写常规博客了. 10 月开始前有必要再写一篇,整理一下近期的各种思路,以良好的精神面貌迎接今年的最后一个季度. 首先发布一个已经不太新的消息:Practical Common Lisp 的中文版《实用 Common Lisp 编程》几经周折终于付印了,下月即可正式出版;读者们甚至已经可以在当当网上预订了.

Go 语言初步

- wei - 云风的 BLOG
所谓认真玩,就是拿 Go 写点程序,前后大约两千行吧. 据说 Go 的最佳开发平台是 Mac OS ,我没有. Windows 版还没全部搞定,但是也可以用了. 如果你用 google 搜索,很容易去到一个叫 go-windows 的开源项目上. 如果你用这个,很多库都没有,而且语法也是老的. 我在 Windows 下甚至不能正确链接自己写的多个 package.

C语言之父

- Dylen - 子说
同事说c语言之父去世了,另一个同事大吃一惊,问:谭浩强死了. 不知丹尼斯·里奇(Dennis Ritchie)情何以堪.

UnQL:NoSQL查询语言

- 卡飞菲 - Solidot
CouchDB作者Damien Katz与SQLite作者Richard Hipp正在为NoSQL文档数据库开发一种高级查询语言UnQL(发音同Uncle,是UNstructured Query Language的缩写). Katz表示,他们坚信为了推广NoSQL需要一种通用的查询语言,类似当年推广关系型数据库应运而生的SQL语言.

如何学好C语言

- 夕角 - 酷壳 - CoolShell.cn
有人在酷壳的留言版上询问下面的问题. 我也遇到了和提问的老外一样的问题. 能给像遇到这样烦恼的程序员一点建议嘛. 我相信,这可能是很多朋友的问题,我以前也有这样的感觉,编程编到一定的时候,发现能力到了瓶颈,既不深,也不扎实,半吊子. 比如:你长期地使用Java和.NET ,这些有虚拟机的语言对于开发便利是便利,但是对于程序员来说可能并不太好,原因有两个:.

笨办法学C语言

- Hexi - Solidot
继《笨办法学Python》之后,Zed Shaw开始动手写《笨办法学C语言》. 和《笨办法学Python》一样,这本C语言入门书也将采用习题方式引导读者学习. 在序言中,他引用了笛卡尔《第一哲学沉思录》中的一段话去描述C语言:“直到现在,凡是我当作最真实、最可靠而接受过来的东西,我都是从感官或通过感官得来的.

C语言编译器 Cilk

- Le - 开源中国社区最新软件
Cilk多线程编程技术最早由MIT开 发,是一个基于Gcc编译器的开源项目. 后来开发者创建了一个创业公司,推出改进的私有版本,整合到Windows下的多种编译器中. 之后它被英特尔公司 收购,整合进英特尔的编译器中. 现在,它再次成为一个开源项目,成为Gcc 4.7下的一个分支. Cilk Plus允许C和C++程序员能高效利用多核处理器的并行处理能力.

Java7新语言特性

- zffl - Import
Java7发布有一段时间了,这几天升级了一下JDK,结果发现Eclipse3.7还没有支持JDK7. 这个需要稍微解释一下,可能有人不知道,Eclipse使用自己的Java编译器而不是JDK自带的javac. Eclipse自己的编译器就是ecj(Eclipse Compiler for Java),一般的Linux发行版都有eclipse-ecj这样的包.

C语言的现状

- pipitu - Tony Bai
Dobb's Journal 官网上的一篇由Brian W. Kernighan和Dennis M. Ritchie共同撰写的名为"The State of C "的文章. 这里谨将此篇译文献给不久前刚刚离我们而去的C语言之父 - Dennis M. Ritchie ,愿一代计算机科学巨匠一路走好.