今天來稍微聊一下自然語言處理(Natural Language Processing - NLP)跟 Python 的應用。
所謂的自然語言,就是我們人類一般使用的語言。不論是英文、中文、日文,都屬於自然語言。為什麼這裡要特別提到自然語言呢?因爲它對電腦而言是不容易消化的資料!
一般而言,電腦擅長處理有規律,或是固定格式的結構化資料(Structured Data)。舉個例子來說,你把一個CSV的檔案給電腦,配合內建(或外加)的軟體它知道怎麼去看 columns 或 rows; 你給它一個JSON的檔案,它知道哪些是 key 以及 values。因為這些資料都有固定的格式,只要循著事先決定好的步驟就可以拿到需要的內容。
但是今天給電腦隨意一篇文章(一堆文字),然後叫它提供你要的資料,就沒這麼簡單了。因為文章這類的資料呈現的型態太過自由,屬於所謂的非結構化資料(Unstructured Data)的一種。
面對這種 Unstructured Data,根據我們的需求,往往要花更多的力氣處理。其實,今天我們看到的許多科技都需要運用自然語言處理, 譬如說 Google 用關鍵字做類似語搜尋,對話機器人(像是網頁上跟你對話的客服機器人)或是 Google 翻譯等,在在都是要求電腦可以某種程度理解自然語言。那是怎麼做到的呢?
當然 NLP 本身是一個又廣又深的領域,涵蓋許多的理論跟實作,所以我們今天就只是稍微介紹一下基本的概念,以及相關的一些 Python 操作。
話不多說,我們跟大家介紹一個處理自然語言的第三方 Library:NLTK
安裝如下:
pip install nltk==3.6.2
坊間有不少處理自然語言的 Python Library,但是 NLTK 絕對是相當具有代表性的一個。
那麼,NLTK 到底是什麼東西呢?或者說目的是什麼呢?
簡單來說最主要的目的,就是它提供一些前置文字處理功能(text preprocessing)讓我們可以把像文章(一長串字)這樣的 Unstructured data 盡量轉換成 Structured data!(當然還有很多其他的功能,像是搭配機器學習的模型,但是不在今天的討論範圍。)
OK,假設有一小篇文章像這樣👇:
我們該怎麼讓電腦處理(想辦法把它轉成 Structured )進而分析這個文章內容呢?
Tokenization
通常第一步,是將文章拆解開來。我們可以以句子為單位,或是單字為單位把文章做分解🛠。
這個動作稱之為 Tokenization。
首先,我們利用 nltk.download 來下載一些所需的資料:
這裡下載的"punkt"資料可以讓 nltk 知道如何區隔標點符號。
接下來就可以去tokenize我們的文字串了.....