Hanlp等七種優秀的開源中文分詞庫推薦
中文分詞是中文文字處理的基礎步驟,也是中文人機自然語言互動的基礎模組。由於中文句子中沒有詞的界限,因此在進行中文自然語言處理時,通常需要先進行分詞。
縱觀整個開源領域,陸陸續續做中文分詞的也有不少,不過目前仍在維護的且質量較高的並不多。下面整理了一些個人認為比較優秀的中文分詞庫,以供大家參考使用。
HanLP是一系列模型與演算法組成的NLP工具包,由大快搜索主導並完全開源,目標是普及自然語言處理在生產環境中的應用。HanLP具備功能完善、效能高效、架構清晰、語料時新、可自定義的特點。
HanLP提供下列功能:
- 中文分詞
- HMM-Bigram(速度與精度最佳平衡;一百兆記憶體)
- 最短路分詞、N-最短路分詞
- 由字構詞(側重精度,可識別新詞;適合NLP任務)
- 感知機分詞、CRF分詞
- 詞典分詞(側重速度,每秒數千萬字元;省記憶體)
- 極速詞典分詞
- 所有分詞器都支援:
- 索引全切分模式
- 使用者自定義詞典
- 相容繁體中文
- 訓練使用者自己的領域模型
- 詞性標註
- HMM詞性標註(速度快)
- 感知機詞性標註、CRF詞性標註(精度高)
- 命名實體識別
- 基於HMM角色標註的命名實體識別 (速度快)
- 中國人名識別、音譯人名識別、日本人名識別、地名識別、實體機構名識別
- 基於線性模型的命名實體識別(精度高)
- 感知機命名實體識別、CRF命名實體識別
- 關鍵詞提取
- TextRank關鍵詞提取
- 自動摘要
- TextRank自動摘要
- 短語提取
- 基於互資訊和左右資訊熵的短語提取
- 拼音轉換
- 多音字、聲母、韻母、聲調
- 簡繁轉換
- 簡繁分歧詞(簡體、繁體、臺灣正體、香港繁體)
- 文字推薦
- 語義推薦、拼音推薦、字詞推薦
- 依存句法分析
- 基於神經網路的高效能依存句法分析器
- MaxEnt依存句法分析
- 文字分類
- 情感分析
- word2vec
- 詞向量訓練、載入、詞語相似度計算、語義運算、查詢、KMeans聚類
- 文件語義相似度計算
- 語料庫工具
- 預設模型訓練自小型語料庫,鼓勵使用者自行訓練。所有模組提供訓練介面,語料可參考OpenCorpus。
在提供豐富功能的同時,HanLP內部模組堅持低耦合、模型堅持惰性載入、服務堅持靜態提供、詞典堅持明文釋出,使用非常方便,同時自帶一些語料處理工具,幫助使用者訓練自己的模型。
“結巴”中文分詞,做最好的 Python 中文分片語件。
特性
- 支援三種分詞模式:
- 精確模式,試圖將句子最精確地切開,適合文字分析;
- 全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義;
- 搜尋引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜尋引擎分詞。
- 支援繁體分詞
- 支援自定義詞典
演算法
- 基於字首詞典實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖 (DAG)
- 採用了動態規劃查詢最大概率路徑, 找出基於詞頻的最大切分組合
- 對於未登入詞,採用了基於漢字成詞能力的 HMM 模型,使用了 Viterbi 演算法
程式碼示例
Jcseg 是基於 mmseg 演算法的一個輕量級中文分詞器,同時集成了關鍵字提取,關鍵短語提取,關鍵句子提取和文章自動摘要等功能,並且提供了一個基於 Jetty 的 web 伺服器,方便各大語言直接 http 呼叫,同時提供了最新版本的 lucene, solr, elasticsearch 的分詞介面!Jcseg 自帶了一個 jcseg.properties 檔案用於快速配置而得到適合不同場合的分詞應用,例如:最大匹配詞長,是否開啟中文人名識別,是否追加拼音,是否追加同義詞等!
核心功能:
- 中文分詞:mmseg 演算法 + Jcseg 獨創的優化演算法,四種切分模式。
- 關鍵字提取:基於 textRank 演算法。
- 關鍵短語提取:基於 textRank 演算法。
- 關鍵句子提取:基於 textRank 演算法。
- 文章自動摘要:基於 BM25+textRank 演算法。
- 自動詞性標註:基於詞庫+(統計歧義去除計劃),目前效果不是很理想,對詞性標註結果要求較高的應用不建議使用。
- 命名實體標註:基於詞庫+(統計歧義去除計劃),電子郵件,網址,大陸手機號碼,地名,人名,貨幣,datetime 時間,長度,面積,距離單位等。
- Restful api:嵌入 jetty 提供了一個絕對高效能的 server 模組,包含全部功能的http介面,標準化 json 輸出格式,方便各種語言客戶端直接呼叫。
中文分詞模式:
六種切分模式
(1).簡易模式:FMM 演算法,適合速度要求場合。
(2).複雜模式:MMSEG 四種過濾演算法,具有較高的歧義去除,分詞準確率達到了 98.41%。
(3).檢測模式:只返回詞庫中已有的詞條,很適合某些應用場合。
(4).檢索模式:細粒度切分,專為檢索而生,除了中文處理外(不具備中文的人名,數字識別等智慧功能)其他與複雜模式一致(英文,組合詞等)。
(5).分隔符模式:按照給定的字元切分詞條,預設是空格,特定場合的應用。
(6).NLP 模式:繼承自複雜模式,更改了數字,單位等詞條的組合方式,增加電子郵件,大陸手機號碼,網址,人名,地名,貨幣等以及無限種自定義實體的識別與返回。
sego 是一個 Go 中文分詞庫,詞典用雙陣列 trie(Double-Array Trie)實現, 分詞器演算法為基於詞頻的最短路徑加動態規劃。
支援普通和搜尋引擎兩種分詞模式,支援使用者詞典、詞性標註,可執行 JSON RPC 服務。
分詞速度單執行緒 9MB/s,goroutines 併發 42MB/s(8核 Macbook Pro)。
示例程式碼:
中文處理工具包
特點
- 可能不是最快的開源中文分詞,但很可能是最準的開源中文分詞
- 包含分詞,詞性標註,實體識別, 都有比較高的準確率
- 使用者自定義詞典
- 可訓練自己的模型
- 批量處理
定製自己的模型
Ansj 中文分詞是一個基於 n-Gram+CRF+HMM 的中文分詞的 java 實現。分詞速度達到每秒鐘大約200萬字左右(mac air下測試),準確率能達到96%以上。目前實現了中文分詞、中文姓名識別、使用者自定義詞典、關鍵字提取、自動摘要、關鍵字標記等功能,可以應用到自然語言處理等方面,適用於對分詞效果要求高的各種專案。
下面是一個簡單的分詞效果,僅做參考:
word 分詞是一個 Java 實現的分散式的中文分片語件,提供了多種基於詞典的分詞演算法,並利用 ngram 模型來消除歧義。能準確識別英文、數字,以及日期、時間等數量詞,能識別人名、地名、組織機構名等未登入詞。能通過自定義配置檔案來改變元件行為,能自定義使用者詞庫、自動檢測詞庫變化、支援大規模分散式環境,能靈活指定多種分詞演算法,能使用refine功能靈活控制分詞結果,還能使用詞頻統計、詞性標註、同義標註、反義標註、拼音標註等功能。提供了10種分詞演算法,還提供了10種文字相似度演算法,同時還無縫和 Lucene、Solr、ElasticSearch、Luke 整合。注意:word1.3 需要 JDK1.8 。
分詞演算法效果評估: