"結巴"中文分詞的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 操做系統並行分詞。
簡單的天然語言統計分析功能。