jiebaR 0.1 發布,R語言中文分詞

jopen 10年前發布 | 16K 次閱讀 jiebaR

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 操作系統并行分詞。

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

 來自:http://www.oschina.net/news/56729/jiebar-0-1

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!