"結巴"中文分詞的R語言版本: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 操作系統并行分詞。
-
簡單的自然語言統計分析功能。