NLTK與jieba概述
自然語言處理(NLP)領域是計算機科學領域與人工智能領域中的一個重要方向,主要研究方向是實現人與計算機之間用自然語言進行有效通信的各種理論和方法。
在自然語言處理領域中,文本類型的數據占據著很大的市場,由于其自身具有半結構的特點,且自然語言的分類繁多,所以針對不同的語言Python分別提供了相應的庫來處理,最常見的是處理英文的NLTK庫,它自帶的語料庫都是英文的,由于中文要比英文的結構復雜得多,不適合用NLTK進行處理,所以提供了jieba庫來更好地處理中文。
NLTK全稱為Natural Language Toolkit,它是一套基于Python的自然語言處理工具包,可以方便地完成自然語言處理的任務,包括分詞、詞性標注、命名實體識別(NER)及句法分析等。
NLTK是一個免費的、開源的、社區驅動的項目,它為超過50個語料庫和詞匯資源(如WordNet)提供了易于使用的接口,以及一套用于分類、標記化、詞干化、解析和語義推理的文本處理庫。接下來,通過一張表來列舉NLTK中用于語言處理任務的一些常用模塊,具體如表1所示。
表1 NLTK中的常用模塊
語言處理任務 | nltk模塊 | 功能描述 |
---|---|---|
獲取和處理語料庫 | nltk.corpus | 語料庫和詞典的標準化接口 |
字符串處理 | nltk.tokenize,nltk.stem | 分詞,句子分解提取主干 |
搭配發現 | nltk.collocations | 用于識別搭配工具,查找單詞之間的關聯關系 |
詞性標識符 | nltk.tag | 包含用于詞性標注的類和接口 |
分類 | nltk.classify,nltk.cluster | nltk.classify用類別標簽標記的接口;nltk.cluster包含了許多聚類算法如貝葉斯、EM、k-means |
分塊 | nltk.chunk | 在不受限制的文本識別非重疊語言組的類和接口 |
解析 | nltk.parse | 對圖表、概率等解析的接口 |
語義解釋 | nltk.sem,nltk.inference | 一階邏輯,模型檢驗 |
指標評測 | nltk.metrics | 精度,召回率,協議系數 |
概率與估計 | nltk.probability | 計算頻率分布、平滑概率分布的接口 |
應用 | nltk.app,nltk.chat | 圖形化的關鍵詞排序,分析器,WordNet查看器,聊天機器人 |
語言學領域的工作 | nltk.toolbox | 處理SIL工具箱格式的數據 |
GitHub上有一段描述Jieba的句子:
"Jieba" (Chinese for "to stutter") Chinese text segmentation: built to be the best Python Chinese word segmentation module.
翻譯:“Jieba”中文分詞:最好的 Python 中文分詞組件。
由此可見,jieba最適合做中文分詞,這離不開它擁有的一些特點:
(1) 支持三種分詞模式:
-
精確模式:試圖將句子最精確地切開,適合文本分析。
-
全模式:把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義。
-
搜索引擎模式:在精確模式的基礎上,對長詞再次切分,提高召回率,適合用于搜索引擎分詞。
(2) 支持繁體分詞。
(3) 支持自定義詞典。
(4) MIT 授權協議。
jieba庫中主要的功能包括分詞、添加自定義詞典、關鍵詞提取、詞性標注、并行分詞等等。
安裝NLTK和下載語料庫
要想使用NLTK庫處理自然語言,前提是需要先安裝。這里,我們既可以在終端使用pip命令直接安裝,也可以在Jupyter Notebook中直接使用。以前者為例,打開終端鍵入如下命令安裝NLTK庫:
>>> pip install -U nltk
安裝完以后,在終端中啟動Python,然后鍵入如下命令測試是否安裝成功:
>>> import nltk
按下回車鍵,如果程序中沒有提示任何錯誤的信息,則表示成功安裝,否則表示安裝失敗。值得一提的是,Anaconda中默認已經安裝了NLTK庫(但是沒有安裝語料庫),可以用import導入使用,無需再另行安裝。
NLTK庫中附帶了許多語料庫(指經科學取樣和加工的大規模電子文本庫)、玩具語法、訓練模型等,完整的信息發布在http://nltk.org/nltk_data/
網上。如果希望在計算機上安裝單獨的數據包,或者是下載全部的數據包,則需要在Jupyter Notebook(或者管理員賬戶)中執行以下操作:
In [1]: import nltknltk.download() # 打開NLTK下載器
Out[1]: True
此時,打開了一個NLTK Downloader窗口,如圖1所示。
圖1 打開NLTK Downloader窗口
圖1的窗口中包含以下選項:
(1) Collections:集合。
(2) Corpora:語料庫。
(3) Models:模型。
(4) All Packages:所有包。
如果希望集中安裝所有的選項,則需要單擊【File】->【Change Download Directory】選擇更新下載目錄,這時圖1中 “Download Directory”對應的文本框處于可編輯狀態,將其設置為C:\nltk_data(Windows),然后單擊【File】->【Download】開始下載,直至所有選項安裝完成,這個過程需要等待的時間稍微有點長。
注意:
如果沒有將數據包安裝到上述位置,則需要設置NLTK_DATA環境變量以指定數據的位置。
如果只是想單獨安裝某個庫或模型等,比如brown語料庫,則可以單擊圖1中的【Corpora】選項,從列表中選中“brown”,然后單擊左下方的【Download】按鈕進行下載。
下載完以后,可以測試語料庫是否下載成功,可以按照如下方式進行檢測(假設下載了布朗語料庫):
In [2]: from nltk.corpus import brown # 導入brown語料庫brown.words() # 查看brown庫中所有的單詞
Out[2]: ['The', 'Fulton', 'County', 'Grand', 'Jury', 'said', ...]
上述示例中輸出了brown語料庫中所有的單詞,表明下載成功。
還可以通過categories()函數查看brown中包含的類別,示例代碼如下。
In [3]: brown.categories()
Out[3]: ['adventure', 'belles_lettres', 'editorial', 'fiction',
? 'government', 'hobbies', 'humor', 'learned', 'lore','mystery', 'news', 'religion', 'reviews',
? 'romance', 'science_fiction']
此外,還可以查看brown語料庫中包含的單詞或句子的總個數,示例代碼如下。
In [4]: 'brown中一共有{}個句子'.format(len(brown.sents()))
Out[4]: 'brown中一共有57340個句子'
In [5]: 'brown中一共有{}個單詞'.format(len(brown.words()))
Out[5]: 'brown中一共有1161192個單詞'
jieba庫的安裝
如果希望對中文進行分詞操作,則需要借助jieba分詞工具。安裝jieba庫的方式比較簡單,可以直接使用如下pip命令進行安裝:
pip install jieba
安裝完成出現如圖1所示的提示信息。
圖1 提示jieba安裝完成
為了驗證jieba庫是否成功安裝,我們可以在Jupyter Notebook中通過 import jieba 來引用,如果沒有提示錯誤信息,則表示安裝成功。