2021年10月19日 星期二

線上語料庫分析服務 Sketch Engine

語料庫是計算語言學的基礎, 除了可在本機使用 NLTK 或 SpaCy 等 Python 套件做語料分析外 (這需要基本的 Python 程式基礎), 現在也可以線上用瀏覽器來做語料庫文本分析, 例如 Sketch Engine, 其操作介面簡單, 完全不需要寫程式 : 

按官網首頁左上角的 "Sign up" 鈕註冊 30 天免費試用帳號 : 




按 "Free 30 Days Trial" 鈕 (右邊的 Individual user account 雖然有教育用途永久免費優惠, 但那只限歐盟區域內的教育機構) : 




填寫帳戶名稱與 e-mail 等資訊, 最底下三項需勾選 : 





按 "Sign Up" 鈕即完成註冊, 然後去收信, 裡面有登入密碼, 要記下來, 因為好像沒有提供更改的功能, 我的 30 天使用密碼是 xxtxXDPB3CWE : 




Sketch Engine 的收費方案如下 :




然後到官網首頁按 Login 鈕登入, 成功後會顯示 Dashboard (儀錶板) : 




可見 Sketch Engine 就是把類似 NLTK 的功能放在雲端, 讓使用者能透過瀏覽器很方便地進行基於語料庫的線上文本分析. 

按右上角的帳戶頭像, 點選 "My Account" 會顯示帳戶資訊 :





此處 Corpus storage used 是指已用掉的語料庫大小比率, Sketch Engine 可讓使用者上傳最多 100 萬字的語料庫.  

網站使用方法參考官網簡介影片 : 





另外 bilibili 也有一個中國人製作的 Sketch Engine 中文使用教學 : 


首先按左邊框第二個按鈕, 這樣右邊就會顯示語言選項, 可以點選語料庫之語言例如 English :




這樣右邊的 "Recently Used Corpus" 欄就會列出所選擇之語料庫 (此處為 EnTenTen 2020) : 




按 "Corpus Info" 鈕會顯示此語料庫的統計資訊, 例如總字數等 :




接下來示範如何做最常用的共詞句分析 (concordance, 即以指定詞為中心排列的例句). 先按左邊框上面第一個按鈕回到 Dashboard, 然後按 "Concordance" 鈕, 然後輸入欲搜尋的字詞, 按 Search 鈕即可 :





可見結果會以所搜尋的 make 為中心列出例句, 這就是共詞句 (concordance). 

除了內建的語料庫外, Sketch Engine 也支援上傳自建的語料庫. 以下示範如何將 NLTK 內建的台灣中央研究院中文語料庫 sinica_treebank 上傳至 Sketch Engine. 

首先要從 NLTK 中把 sinica_treebank 語料庫複製出來, NLTK 的語料庫位置可透過 nltk.data.path 指令查詢, 它會傳回一組可能路徑之串列, 例如 : 

>>> import nltk    
>>> nltk.data.path   
['C:\\Users\\User/nltk_data', 'C:\\Python37\\nltk_data', 'C:\\Python37\\share\\nltk_data', 'C:\\Python37\\lib\\nltk_data', 'C:\\Users\\User\\AppData\\Roaming\\nltk_data', 'C:\\nltk_data', 'D:\\nltk_data', 'E:\\nltk_data']

nltk_data 資料夾的實際位置要一個個去檢視 (因 Python 安裝方式與 Windows 版本而異), 例如我的電腦是在 User 的 AppData 下, 這是預設隱藏路徑, 必須於檢視中開啟顯示隱藏檔案才找得到 : 




找到 nltk_data 資料夾後, 將 parsed 這個語料庫檔案 (約 2.4MB) 複製到文件資料夾下並幫它加上副檔名 .txt, 因為 Sketch Engine 不接受無副檔名的語料庫上傳. 然後到 Sketch Engine 的 Dashboard 頁面按右上角的 "New Corpus" 鈕 : 




填寫名稱, 類型, 語言等欄位後按底下的 "Next" 鍵 : 




按右邊的 "I have my own texts" 鈕後點選複製的 sinica_treebank 語料庫檔 parsed.txt 上傳 : 






上傳完畢後顯示 -397777 表示已占用接近 40% 儲存空間, 按 "Next" 鈕 : 




按 "Compile" 鈕進行編譯 (需要一點時間, 看檔案大小) : 




編譯完按 "Corpus Dashboard" 鈕就可看到右邊多出了一個 sinica_treebank 語料庫了 :




按 "Corpus Info" 顯示此語料庫的統計資訊, 例如有 92 萬多個 token 等訊息 :  




按 "Manage Corpus" 鈕會出現語料庫的管理頁面, 因為是自建的, 故管理功能全部都打開了 : 




回 Dashboard 按 Concordance 來查詢共詞句, 輸入 "我" 按 Search 鈕 : 





因為上傳的是剖析過的語料庫, 所以查詢結果中含有許多語法標注 (例如 POS 等), 如果用 NLTK 查詢會列出原始文本 :

>>> import nltk   
>>> from nltk.corpus import sinica_treebank     
>>> sinica_text=nltk.Text(sinica_treebank.words())     
>>> sinica_text.concordance('我')      

Displaying 25 of 724 matches:
一 友情 嘉珍 和 我 住在 同一條 巷子 我們 是 鄰居 也 是 同班 同學 我們 常常 一起 上
居 也 是 同班 同學 我們 常常 一起 上學 一起 回家 有一天 上學 時 我 到 她 家 等候 按 了 門鈴 卻 沒有 任何 動靜 正當 我 想 離開 時
天 上學 時 我 到 她 家 等候 按 了 門鈴 卻 沒有 任何 動靜 正當 我 想 離開 時 門 內 突然 傳來 急促 的 腳步聲 嘉珍 打開 了 門 大聲
 突然 傳來 急促 的 腳步聲 嘉珍 打開 了 門 大聲 的 叫 著 快 點 我 媽媽 暈倒 了 嘉珍 抓起 我 的 手 急忙 往 屋 裡 跑 進入 房間 看
嘉珍 打開 了 門 大聲 的 叫 著 快 點 我 媽媽 暈倒 了 嘉珍 抓起 我 的 手 急忙 往 屋 裡 跑 進入 房間 看到 她 的 媽媽 趴 在 地 上
 她 的 媽媽 趴 在 地 上 臉色 蒼白 得 像 紙 一樣 這種 情景 把 我 嚇壞 了 怎麼辦 嘉珍 不停 的 哭泣 聲音 有些 顫抖 我 的 腦海 中 
這種 情景 把 我 嚇壞 了 怎麼辦 嘉珍 不停 的 哭泣 聲音 有些 顫抖 我 的 腦海 中 頓時 一片 空白 不 曉得 怎麼辦 才 好 過 了 一會兒 我
我 的 腦海 中 頓時 一片 空白 不 曉得 怎麼辦 才 好 過 了 一會兒 我 才 問 她 你 爸爸 呢 他 出差 了 嘉珍 擦 著 眼淚 我 握住 她 的
 了 一會兒 我 才 問 她 你 爸爸 呢 他 出差 了 嘉珍 擦 著 眼淚 我 握住 她 的 雙手 她 的 手 又 冰 又 冷 這時 有個 念頭 突然 閃過
握住 她 的 雙手 她 的 手 又 冰 又 冷 這時 有個 念頭 突然 閃過 我 的 眼前 我 幫 她 撥 了 一一九 請 救護車 來 而且 拍拍 她 的 背
雙手 她 的 手 又 冰 又 冷 這時 有個 念頭 突然 閃過 我 的 眼前 我 幫 她 撥 了 一一九 請 救護車 來 而且 拍拍 她 的 背 安慰 她 不
撥 了 一一九 請 救護車 來 而且 拍拍 她 的 背 安慰 她 不要 著急 我 會 陪 你 的 不久 救護車 停 在 她 家 門口 醫護 人員 很 快 的 
 醫護 人員 很 快 的 將 她 的 媽媽 抬上 救護車 嘉珍 上車 前 對 我 說 謝謝 你 的 幫忙 我 握 著 她 的 手 說 不用 謝 我 因為 我們
 她 的 媽媽 抬上 救護車 嘉珍 上車 前 對 我 說 謝謝 你 的 幫忙 我 握 著 她 的 手 說 不用 謝 我 因為 我們 是 好朋友 二 無私 的 
車 前 對 我 說 謝謝 你 的 幫忙 我 握 著 她 的 手 說 不用 謝 我 因為 我們 是 好朋友 二 無私 的 愛 愛 像 火紅 的 太陽 散發 光 
正 為了 缺乏 旅費 而 發愁 的 時候 員外 來 找 他 並且 對 他 說 我 看 你 悶悶不樂 是不是 進京 趕考 的 旅費 不 夠 這裡 有 一些 銀子
物 和 銀子 向 員外 道謝 時 員外 握 著 他 的 手 說 你 不用 還 我 了 我 只是 盡 一份 心力 而已 以後 有 機會 希望 你 也 能夠 幫助
銀子 向 員外 道謝 時 員外 握 著 他 的 手 說 你 不用 還 我 了 我 只是 盡 一份 心力 而已 以後 有 機會 希望 你 也 能夠 幫助 別人 
身 趕考 吧 書生 用 顫抖 的 手 接過 銀子 含 著 眼淚 說 謝謝 您 我 不 知道 要 怎麼 來 報答 您 江 巡撫 說 你 不必 謝 我 也 不必 
 謝謝 您 我 不 知道 要 怎麼 來 報答 您 江 巡撫 說 你 不必 謝 我 也 不必 回報 我 四 快樂 的 閱讀課 上 國語課 的 時候 老師 叫 我
知道 要 怎麼 來 報答 您 江 巡撫 說 你 不必 謝 我 也 不必 回報 我 四 快樂 的 閱讀課 上 國語課 的 時候 老師 叫 我們 這一組 做 讀書
 閱讀課 上 國語課 的 時候 老師 叫 我們 這一組 做 讀書 心得 報告 我 第一個 站起來 發言 我們 閱讀 的 好 書 是 小 王子 這 是 法國人 
 小 王子 告訴 他 在 星球 旅行 的 經過 兩 人 成為 知心 的 朋友 我 說完 之後 組長 站起來 補充 說 小 王子 是 一個 可愛 的 人 他 在
星 上 每天 照顧 會 說話 的 玫瑰花 、 清理 火山灰 而且 欣賞 落日 我 喜歡 這種 自由自在 的 生活 明珠 說 這本 書 最 精采 的 部分 遇到
 的 商人 等 小 王子 不 喜歡 自大 的 人 也 不 喜歡 虛偽 的 人 我 覺得 小 王子 很 正直 最後 阿平 說 這本 書 中 有 許多 值得 思考
>>> 

我將 sinica_treebank 語料庫放在 GitHub 方便下載進行測試 :


也可以上傳 sinica_treebank 的原始語料庫, 即 nltk_data 資料夾下的 raw 檔, 將其複製到文件夾後加上 .txt 副檔名, 然後新增一個語料庫取名為 sinica_treebank2, 再將 raw.txt上傳 : 





可見未剖析的原始檔所佔儲存空間少很多, 只有 10MB 左右. 同樣搜尋 "我" 做共詞句分析 (concordance) 結果就不會出現剖析用後的語法標記了 :




參考 : 


沒有留言:

張貼留言