1. 程式人生 > >Java中文NLP工具彙總

Java中文NLP工具彙總

NLP任務都是要用python完成麼?當然不是了。。。畢竟企業級服務還是Java效能好。下面介紹幾個可供選擇的中文NLP任務工具包。

首先宣告,本文介紹的所有工具也可參考下文:

Java開源專案cws_evaluation:中文分詞器分詞效果評估對比

文中比較了10箇中文分詞工具,比較了他們主要效能。

其次,本文提供各個工具github地址及主要特點,具體使用方法及功能、特點,去github瞭解即可。

一、 中文分詞工具

這幾個工具都是隻能完成分詞任務的工具:

1. jieba

使用python的都熟悉結巴分詞,這是java版本的實現。

結巴分詞(java版) 

https://github.com/huaban/jieba-analysis

簡介: 多年沒更新,1000stars, 只實現了結巴基本的Search模式和Index模式的分詞功能,程式碼有待完善;沒有實現詞性標註等,效能不錯,簡單的任務用一下沒問題。

 

2. MMSeg4j 

mmseg4j-solr 

簡介:400stars, 兩年沒更新。用Chih-HaoTsai的MMSeg演算法實現的中文分詞器,MMSeg演算法有兩種分詞方法:Simple和Complex,都是基於正向最大匹配。支援三種模式,simple, complex, max_word;支援自定義詞庫;整合solr。使用方法也可參考:

mmseg4j中文分詞包使用

 

3. ik-analyzer

github程式碼地址,但是貌似專案已遷移至Google Code: ik-analyzer

簡介:也是一個多年不開發的專案,06年-12年開發的,450stars。輕量的java分詞,以開源專案Luence為應用主體,支援細粒度和智慧分詞兩種切分模式,輕量意味著 速度快,記憶體少。

 

4. SmartChineseAnalyzer

SmartChineseAnalyzer

整合Es的介紹 https://www.elastic.co/guide/en/elasticsearch/plugins/current/analysis-smartcn.html

apache/lucene-solr 貌似是github原始碼,org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer

簡介:中文表現不錯,支援中英混合,基於HMM模式和大量語料訓練。

 

二、中文NLP工具

這裡介紹的幾個工具都比較強大,一般用起來比較重的。

1. word

Java分散式中文分片語件 - word分詞

word分詞是一個Java實現的分散式的中文分片語件,提供了多種基於詞典的分詞演算法,並利用ngram模型來消除歧義。能準確識別英文、數字,以及日期、時間等數量詞,能識別人名、地名、組織機構名等未登入詞。能通過自定義配置檔案來改變元件行為,能自定義使用者詞庫、自動檢測詞庫變化、支援大規模分散式環境,能靈活指定多種分詞演算法,能使用refine功能靈活控制分詞結果,還能使用詞頻統計、詞性標註、同義標註、反義標註、拼音標註等功能。提供了10種分詞演算法,還提供了10種文字相似度演算法,同時還無縫和Lucene、Solr、ElasticSearch、Luke整合。

SegmentationAlgorithm的可選型別為:     
正向最大匹配演算法:MaximumMatching
逆向最大匹配演算法:ReverseMaximumMatching
正向最小匹配演算法:MinimumMatching
逆向最小匹配演算法:ReverseMinimumMatching
雙向最大匹配演算法:BidirectionalMaximumMatching
雙向最小匹配演算法:BidirectionalMinimumMatching
雙向最大最小匹配演算法:BidirectionalMaximumMinimumMatching
全切分演算法:FullSegmentation
最少詞數演算法:MinimalWordCount
最大Ngram分值演算法:MaxNgramScore 

 相似度可用的演算法有:
   1、sa=cos,餘弦相似度
   2、sa=edi,編輯距離
   3、sa=euc,歐幾里得距離
   4、sa=sim,簡單共有詞
   5、sa=jac,Jaccard相似性係數
   6、sa=man,曼哈頓距離
   7、sa=shh,SimHash + 漢明距離
   8、sa=ja,Jaro距離
   9、sa=jaw,Jaro–Winkler距離
   10、sa=sd,Sørensen–Dice係數

可以看出該工具十分強大,1000多stars,最近也還在開發中,只是功能基本沒有更新了。

 

2. ansj

ansj分詞

簡介:名不見經傳卻很讚的NLP工具,目前4000多stars,仍然在開發。這是一個基於n-Gram+CRF+HMM的中文分詞的java實現.分詞速度達到每秒鐘大約200萬字左右(mac air下測試),準確率能達到96%以上。目前實現了.中文分詞,中文姓名識別 . 使用者自定義詞典,關鍵字提取,自動摘要,關鍵字標記等功能,可以應用到自然語言處理等方面,適用於對分詞效果要求高的各種專案。

具體介紹看github上的wiki: https://github.com/NLPchina/ansj_seg/wiki,支援的分詞模式(摘自該wiki)有:ToAnalysis 精準分詞, DicAnalysis 使用者自定義詞典優先策略的分詞, NlpAnalysis 帶有新詞發現功能的分詞, IndexAnalysis 面向索引的分詞, BaseAnalysis 最小顆粒度的分詞。

wiki十分詳細,感興趣的可以看,README中介紹的並不詳細,沒有相關使用demo。

 

3. Stanford分詞器

https://nlp.stanford.edu/software/segmenter.shtml  這個貌似是官網
Stanford CoreNLP:核心NLP工具的Java套件  這個是原始碼

簡介: 斯坦福大學NLP group研發的一套基於CRF的開源中文分詞系統,採用CRF(Conditional Random Fields)演算法。其分析為更高級別和特定領域的文字理解應用程式提供了基礎構建塊。Stanford CoreNLP是一套穩定且經過良好測試的自然語言處理工具,廣泛應用於學術界,工業界和政府部門。該專案5500stars,仍然在不斷開發中,本來是不錯的,但是從眾多使用反饋來看,該工具耗記憶體,速度也慢。使用時還需綜合考慮,瞭解其NLP任務表現,如果其他工具可以完成,就不要使用這麼重的工具。

使用方法參考: Stanford Word Segmenter使用

 

4. HanLP: Han Language Processing

官網首頁: http://hanlp.com/

github地址: https://github.com/hankcs/HanLP

簡介: 功能包括中文分詞 詞性標註 命名實體識別 依存句法分析 新詞發現 關鍵詞短語提取 自動摘要 文字分類聚類 拼音簡繁,HanLP是一系列模型與演算法組成的NLP工具包,由大快搜索主導並完全開源,目標是普及自然語言處理在生產環境中的應用。HanLP具備功能完善、效能高效、架構清晰、語料時新、可自定義的特點。

支援的分詞模式也有多種,包括最短路徑分詞,CRF分詞,急速詞典分詞等,文件中有demo。

目前已經1萬+stars,仍然在不斷完善,很多人在開發。綜合來看,該工具是比較推薦的,雖然本人還沒用。

PS: 值得提一句的是,該工具還有個python介面:自然語言處理工具包HanLP的Python介面 http://hanlp.hankcs.com/。用python的盆友不妨瞭解一下,很贊,500多stars。


總結兩句,日常開發中,簡單的分詞任務,使用上述四個分詞工具即可,如果文字長且專業性強,上面的四個表現不好,可嘗試下面四種的多種分詞模式~ 對於其他NLP任務,儘量不要使用斯坦福的小怪獸吧,其他的都可嘗試,歡迎使用後反饋一些使用感受~