"結巴"中文分詞的R語言版本:jiebaR

"結巴"中文分詞的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引擎先進行分詞和關鍵詞提取,後計算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 操做系統並行分詞。

  • 簡單的天然語言統計分析功能。

項目主頁:http://www.open-open.com/lib/view/home/1415086153728

相關文章
相關標籤/搜索