五款中文分詞工具線上PK: Jieba, SnowNLP, PkuSeg, THULAC, HanLP
最近玩公眾號會話停不下來: 玩轉騰訊詞向量:Game of Words(詞語的加減遊戲) ,準備把NLP相關的模組搬到線上,準確的說,搬到AINLP公眾號後臺對話,所以,趁著勞動節假期,給AINLP公眾號後臺聊天機器人添加了一項新技能:中文分詞線上PK,例如在AINLP公眾號後臺對話輸入:中文分詞 我愛自然語言處理,就可以得到五款分詞工具的分詞結果:
現在的開源中文分詞工具或者模組已經很豐富了,並且很多都有一些在封閉測試集上的效果對比資料,不過這僅僅只能展現這些分詞工具在這個封閉測試集上的效果,並不能全面說明問題,個人覺得,選擇一個適合自己業務的分詞器可能更重要,有的時候,還需要加一些私人定製的詞庫。
這次首先選了5款中文分詞工具,嚴格的來說,它們不完全是純粹的中文分詞工具,例如SnowNLP, Thulac, HanLP都是很全面的中文自然語言處理工具,這次,先試水它們的中文分詞模組。安裝這些模組其實很簡單,只要按官方文件的方法安裝即可,以下做個簡單介紹,在Python3.x的環境下測試,Ubuntu16.04 或 MacOS 測試成功。
1) Jieba : https://github.com/fxsjy/jieba
“結巴”中文分詞:做最好的 Python 中文分片語件
"Jieba" (Chinese for "to stutter") Chinese text segmentation: built to be the best Python Chinese word segmentation module.
特點
支援三種分詞模式:
精確模式,試圖將句子最精確地切開,適合文字分析;
全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義;
搜尋引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜尋引擎分詞。
支援繁體分詞
支援自定義詞典
MIT 授權協議
安裝:
程式碼對 Python 2/3 均相容
全自動安裝:easy_install jieba 或者 pip install jieba / pip3 install jieba
半自動安裝:先下載 http://pypi.python.org/pypi/jieba/ ,解壓後執行 python setup.py install
手動安裝:將 jieba 目錄放置於當前目錄或者 site-packages 目錄
中文分詞示例:
In [6]: import jieba In [7]: seg_list = jieba.cut("我愛自然語言處理", cut_all=True) In [8]: print("Full Mode: " + " ".join(seg_list)) # 全模式 Full Mode: 我 愛 自然 自然語言 語言 處理 In [9]: seg_list = jieba.cut("我愛自然語言處理", cut_all=False) In [10]: print("Default Mode: " + " ".join(seg_list)) # 預設模式/精確模式 Default Mode: 我 愛 自然語言 處理 In [11]: seg_list = jieba.cut("我愛自然語言處理") In [12]: print("Default Mode: " + " ".join(seg_list)) # 預設精確模式 Default Mode: 我 愛 自然語言 處理 In [13]: seg_list = jieba.cut_for_search("我愛自然語言處理") # 搜尋引擎模式 In [14]: print("Search Mode: " + " ".join(seg_list)) # 搜尋引擎模式 Search Mode: 我 愛 自然 語言 自然語言 處理
2) SnowNLP : https://github.com/isnowfy/snownlp
SnowNLP是一個python寫的類庫,可以方便的處理中文文字內容,是受到了TextBlob的啟發而寫的,由於現在大部分的自然語言處理庫基本都是針對英文的,於是寫了一個方便處理中文的類庫,並且和TextBlob不同的是,這裡沒有用NLTK,所有的演算法都是自己實現的,並且自帶了一些訓練好的字典。注意本程式都是處理的unicode編碼,所以使用時請自行decode成unicode。 Features中文分詞(Character-Based Generative Model)詞性標註(TnT 3-gram 隱馬)情感分析(現在訓練資料主要是買賣東西時的評價,所以對其他的一些可能效果不是很好,待解決)文字分類(Naive Bayes)轉換成拼音(Trie樹實現的最大匹配)繁體轉簡體(Trie樹實現的最大匹配)提取文字關鍵詞(TextRank演算法)提取文字摘要(TextRank演算法)tf,idfTokenization(分割成句子)文字相似(BM25)支援python3(感謝erning)
安裝:
$ pip install snownlp
中文分詞示例:
In [18]: from snownlp import SnowNLP In [19]: s = SnowNLP("我愛自然語言處理") In [20]: print(' '.join(s.words)) 我 愛 自然 語言 處理
3) PkuSeg : https://github.com/lancopku/pkuseg-python
pkuseg多領域中文分詞工具; The pkuseg toolkit for multi-domain Chinese word segmentation
主要亮點
pkuseg具有如下幾個特點:
多領域分詞。不同於以往的通用中文分詞工具,此工具包同時致力於為不同領域的資料提供個性化的預訓練模型。根據待分詞文字的領域特點,使用者可以自由地選擇不同的模型。 我們目前支援了新聞領域,網路領域,醫藥領域,旅遊領域,以及混合領域的分詞預訓練模型。在使用中,如果使用者明確待分詞的領域,可載入對應的模型進行分詞。如果使用者無法確定具體領域,推薦使用在混合領域上訓練的通用模型。各領域分詞樣例可參考 example.txt。
更高的分詞準確率。相比於其他的分詞工具包,當使用相同的訓練資料和測試資料,pkuseg可以取得更高的分詞準確率。
支援使用者自訓練模型。支援使用者使用全新的標註資料進行訓練。
支援詞性標註。
編譯和安裝
目前僅支援python3
為了獲得好的效果和速度,強烈建議大家通過pip install更新到目前的最新版本
通過PyPI安裝(自帶模型檔案):
pip3 install pkuseg
之後通過import pkuseg來引用
建議更新到最新版本以獲得更好的開箱體驗:
pip3 install -U pkuseg
中文分詞示例:
In [23]: import pkuseg In [24]: pku_seg = pkuseg.pkuseg() In [25]: print(' '.join(pku_seg.cut('我愛自然語言處理'))) 我 愛 自然 語言 處理
4) THULAC : https://github.com/thunlp/THULAC-Python
THULAC:一個高效的中文詞法分析工具包
THULAC(THU Lexical Analyzer for Chinese)由清華大學自然語言處理與社會人文計算實驗室研製推出的一套中文詞法分析工具包,具有中文分詞和詞性標註功能。THULAC具有如下幾個特點:
能力強。利用我們整合的目前世界上規模最大的人工分詞和詞性標註中文語料庫(約含5800萬字)訓練而成,模型標註能力強大。
準確率高。該工具包在標準資料集Chinese Treebank(CTB5)上分詞的F1值可達97.3%,詞性標註的F1值可達到92.9%,與該資料集上最好方法效果相當。
速度較快。同時進行分詞和詞性標註速度為300KB/s,每秒可處理約15萬字。只進行分詞速度可達到1.3MB/s。
編譯和安裝
python版(相容python2.x版和python3.x版)
從github下載(需下載模型檔案,見獲取模型)
將thulac檔案放到目錄下,通過 import thulac 來引用
thulac需要模型的支援,需要將下載的模型放到thulac目錄下。
pip下載(自帶模型檔案)
pip install thulac
通過 import thulac 來引用
中文分詞示例:
In [31]: import thulac In [32]: thu_lac = thulac.thulac(seg_only=True) Model loaded succeed In [33]: thu_result = thu_lac.cut("我愛自然語言處理", text=True) In [34]: print(thu_result) 我 愛 自然 語言 處理
5) pyhanlp : https://github.com/hankcs/pyhanlp
pyhanlp: Python interfaces for HanLP
自然語言處理工具包HanLP的Python介面, 支援自動下載與升級HanLP,相容py2、py3。
安裝
pip install pyhanlp
注意pyhanlp安裝之後使用的時候還會自動下載相關的資料檔案,zip壓縮檔案600多M,速度有點慢,時間有點長
中文分詞示例:
In [36]: from pyhanlp import HanLP In [37]: han_word_seg = HanLP.segment('我愛自然語言處理') In [38]: print(' '.join([term.word for term in han_word_seg])) 我 愛 自然語言處理
現在,可以拿起你的手機,對著AINLP公眾號後臺輸入:中文分詞 需要分詞的內容,或者可以用語音輸入: 來,試試語音(識別)聊天(機器人)
注:原創文章,轉載請註明出處及保留連結“我愛自然語言處理”: http://www.52nlp.cn
本文連結地址: 五款中文分詞工具線上PK: Jieba, SnowNLP, PkuSeg, THULAC, HanLP http://www.52nlp.cn/?p=11747