1. 程式人生 > >Hanlp等七種優秀的開源中文分詞庫推薦

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 。

分詞演算法效果評估: