7個優秀的開源中文分詞庫推薦,實用性強!
縱觀整個開源領域,陸陸續續做中文分詞的也有不少,不過目前仍在維護的且質量較高的並不多。下面整理了一些個人認為比較優秀的中文分詞庫,以供大家參考使用。
ofollow,noindex">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依存句法分析
-
-
文字分類
-
-
詞向量訓練、載入、詞語相似度計算、語義運算、查詢、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 —— 可能是最準的開源中文分詞
中文處理工具包
特點
定製自己的模型
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
最後,如果有想一起學習python,爬蟲開發,可以來一下我的python群【 784758214 】,內有安裝包和學習視訊資料免費分享,好友都會在裡面交流,分享一些學習的方法和需要注意的小細節,每天也會準時的講一些專案實戰案例。找工作什麼最重要?看中的還是你的實戰經驗