-@robfahey


本文由邱郁婷編輯

本文摘自Rob Fahey的個人部落格〈-@robfahey〉,由邱郁婷統整後撰文。


部落格介紹

此網站為Rob Fahey所建立之個人部落格。Rob Fahey是日本早稻田高等研究所(WIAS)的助理教授,其主要的研究領域為當代政治與政治溝通,由於其亦對機器學習與自然語言處理有興趣,因此在部落格中也能看見相關的文章。

Rob Fahey的部落格中除了更新年度進度之外,文章的主題亦十分多元。頁面右側下方可看見「種類(Categories)」欄位,該欄位中共有17個種類標籤,如經濟、政治、程式設計、科技及研究等,使用者可自行點選欲察看之文章主題,點擊後即會顯示所有附有該標籤之文章。

部落格中有一大標籤為「課程資料(Course Material)」,目前(撰寫時間2022/10/23)此標籤中有2016年、2019年、2022年三個年份的資料,主要在分享一些與軟體、程式包(Package)相關的內容,亦有過去Rob Fahey在工作坊中所使用的簡報分享連結可供使用者自行前往閱覽。然而,2022年的部分尚不開放給大眾,需要輸入密碼才能夠閱覽。以下將針對2016年與2019年的資料進行介紹:

一、 2016年-於政治學研究中使用社群媒體數據

此項目中所分享的軟體與程式包(Package)皆是Rob Fahey過去於工作坊中所提及的實用工具,詳細如下:

(一) 核心軟體

  • 程式語言推薦:Python。工作坊的所有範例皆是使用此程式語言所寫。

  • 程式語言相關平台推薦:PyCharm。此平台可供使用者寫或編排自己的Python編碼,且有免費的學習資源可使用。

  • 資料庫推薦:MongoDB、MySQL、PostgreSQL。可視需求或適配性自由選擇;若是執行的計畫/項目規模較大,則可使用Google BigQuery。另,Amazon上亦有一款名為「Athena」的資料庫,其與Google BigQuery十分相似。

(二) Python程式包

Rob Fahey所推薦的Python程式包共有8種,如下:

1. Twython → 用於Twitter API的簡易介面,可透過此於Twitter上下載或儲存數據。

2. Pymongo → 用於MongoDB的簡易介面,可透過此於Twitter上下載或儲存數據。

3. Numpy及Pandas → 此兩者唯一配對程式包,可讓Python擁有與R類似的統計及科學運算(Scientific computing)能力。

4. Matplotlib → 可透過此程式包建立圖表。

5. Bokeh → 可透過此程式包建立互動式圖表,且建立之圖表可於網頁瀏覽器中進行操作。

6. SciKit-Learn → 用於Python的機器學習程式包,包含了優良的文本分析功能,亦能進行大量的分類與分群演算法(Clustering Algorithms)。

7. NLTK → 此為一工具程式包,專門用於文本分析。相較於SciKit-Learn,NLTK擁有更好的功能,以文本標記來說,NKTK能夠藉由歐系語言的「詞幹提取(Stemming)」,即運用基型(Base Form,如Running的基型為Run)來避免語料庫中出現重複的字詞。若搭配SciKit-Learn一起使用,可製作出更完善的機器學習系統。

(三) 日語處理工具(Python)

Rob Fahey在執行政治學研究時,需要透過自然語言處理與機器學習來分析日本新聞及社群媒體的文本,因此於部落格介紹了其運用Python進行日語文本切割的方法。以下方法適用於macOS及Linux/Ubuntu:

在開始執行前,首先要先準備好下列3個項目:

  • 軟體:MeCab

  • 辭典:MeCab-ipadic、MeCab-ipadic-neologd

  • Python Libraries:mecab-python3

上述3個項目並不是絕對,僅是Rob Fahey在執行文本分析時所使用,且其認為品質與功能較佳的工具。

下載好MeCab及MeCab-ipadic後將其啟動。MacOS用戶需事先安裝「Homebrew」程式包。在軟體載入成功之後,可於終端(Terminal)輸入「mecab」進行測試,輸入後會自動跑出一空白行,此時即可試著在其中輸入一句日文文字並按Enter鍵,隨後便會出現分析結果,將各字詞的詞性、動詞變化型與讀音等顯示出來。此時按Ctrl-C鍵返回終端命令行(Terminal command line)並繼續下一步驟。

接下來需安裝最新版本的新詞與俚語辭典──「mecab-ipadic-neologd」,並對其重新編譯以使其安裝至MeCab後能順利使用,此辭典於文本分析來說至關重要。在安裝的過程中,會有特定步驟需要使用者輸入「Yes」以確定覆寫(Overwriting)某些辭典的預設值。安裝完畢後,若要於命令行中使用此辭典,則需事先於命令行中輸入指令以指定該辭典,指令如下:

  • MacOS:mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd/

  • Linux/Ubuntu:mecab -d /usr/ lib/mecab/dic/mecab-ipadic-neologd/

若指令輸入完畢後,能輸入日文文本並將其標記化(Tokenize),則表示安裝成功,可順利執行。

第三步驟是讓MeCab能運行Python,此時需於命令行中輸入「pip3 install mecab-python3」。由於本篇文章中所使用的Python版本為Python3,因此需輸入之指令如同前述,但根據使用之系統與版本的不同,可能需將「pip3」改為「pip」,亦可能需於Ubuntu中對命令行進行Sudo。完成之後,即可開啟Python編輯器(IDE或文本視窗皆可),並輸入以下編碼測試是否能夠使用:

  • import MeCab

test = "今日はいい天気ですね。遊びに行かない?新宿で祭りがある!" mt = MeCab.Tagger("-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd") print(mt.parse(test))

值得注意的是,若使用的是Ubuntu,則需將編碼中「mecab-ipadic-neologd」的位置更改為「-d /usr/ lib/mecab/dic/mecab-ipadic-neologd/」,後續步驟亦同。輸入編碼後,即可看見與此前終端相同的輸出內容,接著再輸入:

  • import MeCab

test = "今日はいい天気ですね。遊びに行かない?新宿で祭りがある!" mt = MeCab.Tagger("-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd")

parsed = mt.parseToNode(test) components = [] while parsed: components.append(parsed.surface) parsed = parsed.next

print(components)

輸入後,即會將「今日はいい天気ですね」一句依照各個單字進行拆分,如「'今日', 'は', 'いい', '天気', 'です', 'ね'」,如此即達成文本分割的目的。上述編碼出現的結果中,標記會以「.surface」的形式呈現,若是想查看詞性或發音,則可改為「.feature」。

由於MeCab較難處理文中的URL、圖像連結及標記(如@name或#主題標籤)等,因此在使用這套系統來分析社群軟體上的文本前可事先進行處理,以避免出現大量不必要的資訊。此外,結果中經常會連同開頭與結尾的空白元素一併顯示,使用者可自行將其移除。在某些特定的情況之下,亦可能會需要把標點符號或詞性等元素刪除,此時則需檢視每個節點的「.feature」以決定是否留存該標記。

二、 2019年-Python中的文本情感分析

(一) 工作坊簡報

2019年於早稻田大學舉辦的「數據科學周(Data Science Week)」工作坊中,Rob Fahey所使用的簡報檔可於Slideshare中查看。

(二) 編碼與數據範例

工作坊中所使用的編碼與數據範例皆來自sentiment_workshop.zip,若要查看或使用,可透過連結將其下載並解壓縮,接著使用Anaconda的「Jupyter Lab」開啟檔案中的編碼即可。

(三) 工作坊使用之程式包

大部分的程式包已安裝於標準版本的Anaconda之中,若是從其他地方安裝Python或於伺服器上使用Python,則可能需要透過「pip install」安裝以下項目:

  • Numpy

  • Pandas

  • Scipy

  • Scikit-learn

  • Nltk

  • Matplotlib(需繪製圖表者才需下載)

  • Quadprog(需使用iSA聚合計算者才需下載)

若想查看iSA聚合計算(iSA aggregate algorithm)中的Python版本,可至Rob Fahey的Github查閱。

(四) 非歐系語言之文字分割

在進行非歐系語言的文字分割時,需要用到額外的軟體來輔助,詳細如下:

1. 日文:Mecab、Rob Fahey所寫的腳本(用於推特上的數據)

2. 中文/阿拉伯語:Stanford Word Segmenter

3. 韓文:open-korean-text

4. 泰文:PyThaiNLP、cutkum