7個優秀的開源中文分詞庫推薦,實用性強!

縱觀整個開源領域,陸陸續續做中文分詞的也有不少,不過目前仍在維護的且質量較高的並不多。下面整理了一些個人認爲比較優秀的中文分詞庫,以供大家參考使用。

1、jieba —— Python 中文分詞組件

“結巴”中文分詞,做最好的 Python 中文分詞組件。

特性

  • 支持三種分詞模式:
    • 精確模式,試圖將句子最精確地切開,適合文本分析;
    • 全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義;
    • 搜索引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜索引擎分詞。
  • 支持繁體分詞
  • 支持自定義詞典

算法

  • 基於前綴詞典實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖 (DAG)
  • 採用了動態規劃查找最大概率路徑, 找出基於詞頻的最大切分組合
  • 對於未登錄詞,採用了基於漢字成詞能力的 HMM 模型,使用了 Viterbi 算法

代碼示例

# encoding=utf-8 import jieba

seg_list = jieba.cut("我來到北京清華大學", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式 seg_list = jieba.cut("我來到北京清華大學", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list)) # 精確模式 seg_list = jieba.cut("他來到了網易杭研大廈") # 默認是精確模式 print(", ".join(seg_list))

seg_list = jieba.cut_for_search("小明碩士畢業於中國科學院計算所,後在日本京都大學深造") # 搜索引擎模式 print(", ".join(seg_list))

輸出:

【全模式】: 我/ 來到/ 北京/ 清華/ 清華大學/ 華大/ 大學

【精確模式】: 我/ 來到/ 北京/ 清華大學

【新詞識別】:他, 來到, 了, 網易, 杭研, 大廈    (此處,“杭研”並沒有在詞典中,但是也被Viterbi算法識別出來了)

【搜索引擎模式】: 小明, 碩士, 畢業, 於, 中國, 科學, 學院, 科學院, 中國科學院, 計算, 計算所, 後, 在, 日本, 京都, 大學, 日本京都大學, 深造

2、HanLP —— 漢語言處理包

HanLP是一系列模型與算法組成的NLP工具包,由大快搜索主導並完全開源,目標是普及自然語言處理在生產環境中的應用。HanLP具備功能完善、性能高效、架構清晰、語料時新、可自定義的特點。

HanLP提供下列功能:

  • 中文分詞
    • HMM-Bigram(速度與精度最佳平衡;一百兆內存)
      • 最短路分詞、N-最短路分詞
    • 由字構詞(側重精度,可識別新詞;適合NLP任務)
      • 感知機分詞、CRF分詞
    • 詞典分詞(側重速度,每秒數千萬字符;省內存)
      • 極速詞典分詞
    • 所有分詞器都支持:
      • 索引全切分模式
      • 用戶自定義詞典
      • 兼容繁體中文
      • 訓練用戶自己的領域模型
  • 詞性標註
    • HMM詞性標註(速度快)
    • 感知機詞性標註、CRF詞性標註(精度高)
  • 命名實體識別
    • 基於HMM角色標註的命名實體識別 (速度快)
      • 中國人名識別、音譯人名識別、日本人名識別、地名識別、實體機構名識別
    • 基於線性模型的命名實體識別(精度高)
      • 感知機命名實體識別、CRF命名實體識別
  • 關鍵詞提取
    • TextRank關鍵詞提取
  • 自動摘要
    • TextRank自動摘要
  • 短語提取
    • 基於互信息和左右信息熵的短語提取
  • 拼音轉換
    • 多音字、聲母、韻母、聲調
  • 簡繁轉換
    • 簡繁分歧詞(簡體、繁體、臺灣正體、香港繁體)
  • 文本推薦
    • 語義推薦、拼音推薦、字詞推薦
  • 依存句法分析
    • 基於神經網絡的高性能依存句法分析器
    • MaxEnt依存句法分析
  • 文本分類
    • 情感分析
  • word2vec
    • 詞向量訓練、加載、詞語相似度計算、語義運算、查詢、KMeans聚類
    • 文檔語義相似度計算
  • 語料庫工具
    • 默認模型訓練自小型語料庫,鼓勵用戶自行訓練。所有模塊提供訓練接口,語料可參考OpenCorpus

在提供豐富功能的同時,HanLP內部模塊堅持低耦合、模型堅持惰性加載、服務堅持靜態提供、詞典堅持明文發佈,使用非常方便,同時自帶一些語料處理工具,幫助用戶訓練自己的模型。

2、HanLP —— 漢語言處理包

HanLP是一系列模型與算法組成的NLP工具包,由大快搜索主導並完全開源,目標是普及自然語言處理在生產環境中的應用。HanLP具備功能完善、性能高效、架構清晰、語料時新、可自定義的特點。

HanLP提供下列功能:

  • 中文分詞
    • HMM-Bigram(速度與精度最佳平衡;一百兆內存)
      • 最短路分詞、N-最短路分詞
    • 由字構詞(側重精度,可識別新詞;適合NLP任務)
      • 感知機分詞、CRF分詞
    • 詞典分詞(側重速度,每秒數千萬字符;省內存)
      • 極速詞典分詞
    • 所有分詞器都支持:
      • 索引全切分模式
      • 用戶自定義詞典
      • 兼容繁體中文
      • 訓練用戶自己的領域模型
  • 詞性標註
    • HMM詞性標註(速度快)
    • 感知機詞性標註、CRF詞性標註(精度高)
  • 命名實體識別
    • 基於HMM角色標註的命名實體識別 (速度快)
      • 中國人名識別、音譯人名識別、日本人名識別、地名識別、實體機構名識別
    • 基於線性模型的命名實體識別(精度高)
      • 感知機命名實體識別、CRF命名實體識別
  • 關鍵詞提取
    • TextRank關鍵詞提取
  • 自動摘要
    • TextRank自動摘要
  • 短語提取
    • 基於互信息和左右信息熵的短語提取
  • 拼音轉換
    • 多音字、聲母、韻母、聲調
  • 簡繁轉換
    • 簡繁分歧詞(簡體、繁體、臺灣正體、香港繁體)
  • 文本推薦
    • 語義推薦、拼音推薦、字詞推薦
  • 依存句法分析
    • 基於神經網絡的高性能依存句法分析器
    • MaxEnt依存句法分析
  • 文本分類
    • 情感分析
  • word2vec
    • 詞向量訓練、加載、詞語相似度計算、語義運算、查詢、KMeans聚類
    • 文檔語義相似度計算
  • 語料庫工具
    • 默認模型訓練自小型語料庫,鼓勵用戶自行訓練。所有模塊提供訓練接口,語料可參考OpenCorpus

在提供豐富功能的同時,HanLP內部模塊堅持低耦合、模型堅持惰性加載、服務堅持靜態提供、詞典堅持明文發佈,使用非常方便,同時自帶一些語料處理工具,幫助用戶訓練自己的模型。

3、Jcseg —— 輕量級 Java 中文分詞器

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 模式:繼承自複雜模式,更改了數字,單位等詞條的組合方式,增加電子郵件,大陸手機號碼,網址,人名,地名,貨幣等以及無限種自定義實體的識別與返回。

4、sego —— Go 中文分詞

sego 是一個 Go 中文分詞庫,詞典用雙數組 trie(Double-Array Trie)實現, 分詞器算法爲基於詞頻的最短路徑加動態規劃。

支持普通和搜索引擎兩種分詞模式,支持用戶詞典、詞性標註,可運行 JSON RPC 服務

分詞速度單線程 9MB/s,goroutines 併發 42MB/s(8核 Macbook Pro)。

示例代碼:

package main import ( "fmt" "github.com/huichen/sego" ) func main() { // 載入詞典 var segmenter sego.Segmenter
    segmenter.LoadDictionary("github.com/huichen/sego/data/dictionary.txt") // 分詞 text := []byte("中華人民共和國中央人民政府")
    segments := segmenter.Segment(text) // 處理分詞結果 // 支持普通模式和搜索模式兩種分詞,見代碼中SegmentsToString函數的註釋。 fmt.Println(sego.SegmentsToString(segments, false)) 
}

5、 FoolNLTK —— 可能是最準的開源中文分詞

中文處理工具包

特點

  • 可能不是最快的開源中文分詞,但很可能是最準的開源中文分詞
  • 基於 BiLSTM 模型訓練而成
  • 包含分詞,詞性標註,實體識別, 都有比較高的準確率
  • 用戶自定義詞典
  • 可訓練自己的模型
  • 批量處理

定製自己的模型

get clone https://github.com/rockyzhengwu/FoolNLTK.git cd FoolNLTK/train

分詞

import fool

text = "一個傻子在北京" print(fool.cut(text)) # ['一個', '傻子', '在', '北京']

6、Ansj 中文分詞 —— 基於 n-Gram+CRF+HMM 的中文分詞的 Java 實現

Ansj 中文分詞是一個基於 n-Gram+CRF+HMM 的中文分詞的 java 實現。分詞速度達到每秒鐘大約200萬字左右(mac air下測試),準確率能達到96%以上。目前實現了中文分詞、中文姓名識別、用戶自定義詞典、關鍵字提取、自動摘要、關鍵字標記等功能,可以應用到自然語言處理等方面,適用於對分詞效果要求高的各種項目。

下面是一個簡單的分詞效果,僅做參考:

[腳下/f, 的/uj, 一大/j, 塊/q, 方磚/n, 地面/n]
[長春/ns, 市長/n, 春節/t, 講話/n]
[結婚/v, 的/uj, 和/c, 尚未/d, 結婚/v, 的/uj]
[結合/v, 成/v, 分子/n, 時/ng]
[旅遊/vn, 和/c, 服務/vn, 是/v, 最/d, 好/a, 的/uj]
[鄧穎/nr, 超生/v, 前/f, 最/d, 喜歡/v, 的/uj, 一個/m, 東西/n]
[中國/ns, 航天/n, 官員/n, 應邀/v, 到/v, 美國/ns, 與/p, 太空/s, 總署/n, 官員/n, 開會/v]
[上海/ns, 大學城/n, 書店/n]
[北京/ns, 大/a, 學生/n, 前來/v, 應聘/v]
[中外/j, 科學/n, 名著/n]
[爲/p, 人民/n, 服務/vn]
[獨立自主/i, 和/c, 平等互利/l, 的/uj, 原則/n]
[爲/p, 人民/n, 辦/v, 公益/n]
[這/r, 事/n, 的/uj, 確定/v, 不/d, 下來/v]
[費孝/nr, 通向/v, 人大常委會/nt, 提交/v, 書面/b, 報告/n]
[aaa/en, 分/q, 事實上/l, 發貨/v, 丨/null, 和/c, 無/v, 哦/e, 喝/vg, 完/v, 酒/n]
[不好意思/a, 清清爽爽/z]
[長春市/ns, 春節/t, 講話/n]
[中華人民共和國/ns, 萬歲/n, 萬歲/n, 萬萬歲/n]
[檢察院/n, 鮑紹/nr, 檢察長/n, 就是/d, 在/p, 世/ng, 諸葛/nr, ./m, 像/v, 諸葛亮/nr, 一樣/u, 聰明/a]
[長春市/ns, 長春/ns, 藥店/n]
[乒乓球拍/n, 賣/v, 完/v, 了/ul]
[計算機/n, 網絡管理員/n, 用/p, 虛擬機/userDefine, 實現/v, 了/ul, 手機/n, 遊戲/n, 下載/v, 和/c, 開源/v, 項目/n, 的/uj, 管理/vn, 金山/nz, 毒霸/nz]
[長春市/ns, 長春/ns, 藥店/n]
[胡錦濤/nr, 與/p, 神/n, 九/m, 航天員/n, 首次/m, 實現/v, 天地/n, 雙向/d, 視頻/n, 通話/v]
[mysql/en, 不/d, 支持/v,  /null, 同臺/v, 機器/n, 兩個/m, mysql/en, 數據庫/n, 之間/f, 做/v, 觸發器/n]
[孫建/nr, 是/v, 一個/m, 好/a, 人/n, ./m, 他/r, 和/c, 蔡晴/nr, 是/v, 夫妻/n, 兩/m,  /null, ,/null, 對於/p, 每/r, 一本/m, 好書/n, 他/r, 都/d, 原意/n, 一一/d, 讀取/v, ../m, 他們/r, 都/d, 很/d, 喜歡/v, 元宵/n, ./m, 康燕/nr, 和/c, 他們/r, 住/v, 在/p, 一起/s, ./m, 我/r, 和/c, 馬春亮/nr, ,/null, 韓鵬飛/nr, 都/d, 是/v, 好/a, 朋友/n, ,/null, 不/d, 知道/v, 什麼/r, 原因/n]
[一年/m, 有/v, 三百六十五個/m, 日出/v,  /null, 我/r, 送/v, 你/r, 三百六十五個/m, 祝福/vn,  /null, 時鐘/n, 每天/r, 轉/v, 了/ul, 一千四百四十圈/m, 我/r, 的/uj, 心/n, 每天/r, 都/d, 藏/v, 着/uz,  /null, 一千四百四十多個/m, 思念/v,  /null, 每/r, 一天/m, 都/d, 要/v, 祝/v, 你/r, 快快樂樂/z,  /null,  /null, 每/r, 一分鐘/m, 都/d, 盼望/v, 你/r, 平平安安/z,  /null, 吉祥/n, 的/uj, 光/n, 永遠/d, 環繞/v, 着/uz, 你/r,  /null, 像/v, 那/r, 旭日東昇/l, 燦爛/a, 無比/z,  /null]
[學校/n, 學費/n, 要/v, 一次性/d, 交/v, 一千元/m]
[發展/vn, 中國/ns, 家庭/n, 養豬/v, 事業/n]
[安徽省/ns, 是/v, 一個/m, 發展/vn, 中/f, 的/uj, 省/n]
[北京理工大學/nt, 辦事處/n]

7、word 分詞 —— Java 分佈式中文分詞組件

word 分詞是一個 Java 實現的分佈式的中文分詞組件,提供了多種基於詞典的分詞算法,並利用 ngram 模型來消除歧義。能準確識別英文、數字,以及日期、時間等數量詞,能識別人名、地名、組織機構名等未登錄詞。能通過自定義配置文件來改變組件行爲,能自定義用戶詞庫、自動檢測詞庫變化、支持大規模分佈式環境,能靈活指定多種分詞算法,能使用refine功能靈活控制分詞結果,還能使用詞頻統計、詞性標註、同義標註、反義標註、拼音標註等功能。提供了10種分詞算法,還提供了10種文本相似度算法,同時還無縫和 Lucene、Solr、ElasticSearch、Luke 集成。注意:word1.3 需要 JDK1.8 。

分詞算法效果評估:

1、word分詞 最大Ngram分值算法:
分詞速度:370.9714 字符/毫秒
行數完美率:66.55%  行數錯誤率:33.44%  總的行數:2533709  完美行數:1686210  錯誤行數:847499
字數完美率:60.94% 字數錯誤率:39.05% 總的字數:28374490 完美字數:17293964 錯誤字數:11080526

2、word分詞 最少詞數算法:
分詞速度:330.1586 字符/毫秒
行數完美率:65.67%  行數錯誤率:34.32%  總的行數:2533709  完美行數:1663958  錯誤行數:869751
字數完美率:60.12% 字數錯誤率:39.87% 總的字數:28374490 完美字數:17059641 錯誤字數:11314849

3、word分詞 全切分算法:
分詞速度:62.960262 字符/毫秒
行數完美率:57.2%  行數錯誤率:42.79%  總的行數:2533709  完美行數:1449288  錯誤行數:1084421
字數完美率:47.95% 字數錯誤率:52.04% 總的字數:28374490 完美字數:13605742 錯誤字數:14768748

4、word分詞 雙向最大最小匹配算法:
分詞速度:462.87158 字符/毫秒
行數完美率:53.06%  行數錯誤率:46.93%  總的行數:2533709  完美行數:1344624  錯誤行數:1189085
字數完美率:43.07% 字數錯誤率:56.92% 總的字數:28374490 完美字數:12221610 錯誤字數:16152880

5、word分詞 雙向最小匹配算法:
分詞速度:967.68604 字符/毫秒
行數完美率:46.34%  行數錯誤率:53.65%  總的行數:2533709  完美行數:1174276  錯誤行數:1359433
字數完美率:36.07% 字數錯誤率:63.92% 總的字數:28374490 完美字數:10236574 錯誤字數:18137916

6、word分詞 雙向最大匹配算法:
分詞速度:661.148 字符/毫秒
行數完美率:46.18%  行數錯誤率:53.81%  總的行數:2533709  完美行數:1170075  錯誤行數:1363634
字數完美率:35.65% 字數錯誤率:64.34% 總的字數:28374490 完美字數:10117122 錯誤字數:18257368

7、word分詞 正向最大匹配算法:
分詞速度:1567.1318 字符/毫秒
行數完美率:41.88%  行數錯誤率:58.11%  總的行數:2533709  完美行數:1061189  錯誤行數:1472520
字數完美率:31.35% 字數錯誤率:68.64% 總的字數:28374490 完美字數:8896173 錯誤字數:19478317

8、word分詞 逆向最大匹配算法:
分詞速度:1232.6017 字符/毫秒
行數完美率:41.69%  行數錯誤率:58.3%  總的行數:2533709  完美行數:1056515  錯誤行數:1477194
字數完美率:30.98% 字數錯誤率:69.01% 總的字數:28374490 完美字數:8792532 錯誤字數:19581958

9、word分詞 逆向最小匹配算法:
分詞速度:1936.9575 字符/毫秒
行數完美率:41.42%  行數錯誤率:58.57%  總的行數:2533709  完美行數:1049673  錯誤行數:1484036
字數完美率:31.34% 字數錯誤率:68.65% 總的字數:28374490 完美字數:8893622 錯誤字數:19480868

10、word分詞 正向最小匹配算法:
分詞速度:2228.9465 字符/毫秒
行數完美率:36.7%  行數錯誤率:63.29%  總的行數:2533709  完美行數:930069  錯誤行數:1603640
字數完美率:26.72% 字數錯誤率:73.27% 總的字數:28374490 完美字數:7583741 錯誤字數:20790749
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章