"结巴"中文分词的R语言版本,支持最大几率法(Maximum Probability),隐式马尔科夫模型(Hidden Markov Model),索引模型(QuerySegment),混合模型(MixSegment),共四种分词模式,同时有词性标注,关键词提取,文本Simhash类似度比较等功能。项目使用了Rcpp和CppJieba进行开发。
特性html
支持 Windows , Linux操做系统(Mac 暂未测试)。git
经过Rcpp Modules实现同时加载多个分词系统,能够分别使用不一样的分词模式和词库。github
支持多种分词模式、中文姓名识别、关键词提取、词性标注以及文本Simhash类似度比较等功能。算法
支持加载自定义用户词库,设置词频、词性。windows
同时支持简体中文、繁体中文分词。jvm
支持自动判断编码模式。测试
比原"结巴"中文分词速度快,是其余R分词包的5-20倍。编码
安装简单,无需复杂设置。spa
能够经过Rpy2,jvmr等被其余语言调用。操作系统
基于MIT协议。
目前该包尚未发布到CRAN,能够经过Github进行安装。Windows系统须要安装 Rtools,或者能够下载二进制包,进行安装:
1
2
|
library(devtools)
install_github(
"qinwf/jiebaR"
)
|
jiebaR提供了四种分词模式,能够经过jiebar()
来初始化分词引擎,使用segment()
进行分词。
1
2
3
4
5
6
7
8
9
|
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
2
|
[1]
"江州"
"市长"
"江大桥"
"参加"
"了"
"长江大桥"
[7]
"的"
"通车"
"仪式"
|
支持对文件进行分词:
1
2
|
mixseg <=
"./temp.dat"
### 自动判断输入文件编码模式,默认文件输出在同目录下。
## segment( "./temp.dat" , mixseg )
|
在加载分词引擎时,能够自定义词库路径,同时能够启动不一样的引擎:
最大几率法(MPSegment),负责根据Trie树构建有向无环图和进行动态规划算法,是分词算法的核心。
隐式马尔科夫模型(HMMSegment)是根据基于人民日报等语料库构建的HMM模型来进行分词,主要算法思路是根据(B,E,M,S)四个状态来表明每一个字的隐藏状态。 HMM模型由dict/hmm_model.utf8提供。分词算法即viterbi算法。
混合模型(MixSegment)是四个分词引擎里面分词效果较好的类,结它合使用最大几率法和隐式马尔科夫模型。
索引模型(QuerySegment)先使用混合模型进行切词,再对于切出来的较长的词,枚举句子中全部可能成词的状况,找出词库里存在。
1
2
3
4
5
6
7
|
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的设置
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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
来得到这些信息。
1
2
|
mixseg$encoding
mixseg$detect = F
|
能够自定义用户词库,推荐使用深蓝词库转换构建分词词库,它能够快速地将搜狗细胞词库等输入法词库转换为jiebaR的词库格式。
1
2
3
|
ShowDictPath()
### 显示词典路径
EditDict()
### 编辑用户词典
?EditDict()
### 打开帮助系统
|
可使用 <=.tagger
或者 tag
来进行分词和词性标注, 词性标注使用混合模型模型分词,标注采用和 ictclas 兼容的标记法。
1
2
3
|
words =
"我爱北京天安门"
tagger = worker(
"tag"
)
tagger <= words
|
1
2
|
r
v
ns ns
"我"
"爱"
"北京"
"天安门"
|
关键词提取所使用逆向文件频率(IDF)文本语料库能够切换成自定义语料库的路径,使用方法与分词相似。topn
参数为关键词的个数。
1
2
3
|
keys = worker(
"keywords"
, topn = 1)
keys <=
"我爱北京天安门"
keys <=
"一个文件路径.txt"
|
1
2
|
8.9954
"天安门"
|
对中文文档计算出对应的simhash值。simhash是谷歌用来进行文本去重的算法,如今普遍应用在文本处理中。Simhash引擎先进行分词和关键词提取,后计算Simhash值和海明距离。
1
2
3
|
words =
"hello world!"
simhasher = worker(
"simhash"
,topn=2)
simhasher <=
"江州市长江大桥参加了长江大桥的通车仪式"
|
1
2
3
4
5
|
$simhash
[1]
"12882166450308878002"
$keyword
22.3853 8.69667
"长江大桥"
"江州"
|
1
2
3
4
5
6
7
8
|
$distance
[1]
"23"
$lhs
22.3853 8.69667
"长江大桥"
"江州"
$rhs
11.7392 11.7392
"hello"
"world"
|
支持 Windows , Linux , Mac 操做系统并行分词。
简单的天然语言统计分析功能。