Kevin Tseng
3 min readMay 20, 2017

使用Python tabula-py 解析 PDF 表格

PDF一直是資料清理(Data Cleansing)令人頭痛的問題,尤其是那些不整齊的表格、格式特別的政府公開資料,甚至本身是圖檔,無法搜尋文字,但也是這些痛點,有許多轉檔的付費服務。Python一直是字串處理的好幫手,不過對這種半結構甚至非結構化的資料,以我的經驗來說,還是無法完整解析,但還是可以幫大家節省一些時間。

首先這部分是針對表格而來,因為如果只是單純解析文字,其實比較容易,線上有很多免費轉檔服務,很多套件也可以解決,而表格我是使用tabula-py的套件,由chezou所開發,背後是用 tabula-java所執行。

一開始pip install tabula-py 請不要裝tabula,那是不一樣的套件。然後就import

from tabula import read_pdf 或是from tabula import read_pdf_table

由於是解析表格,用哪個都一樣,最後都是轉成pandas的DataFrame,所以如果沒裝pandas 記得 pip install pandas,接下來是設定參數

df = read_pdf(‘your_file.pdf’, encoding = ‘big5’, spreadsheet = True, pages = ‘all’)

  1. 檔案的路徑
  2. encoding:如果是中文可以試試big5或是big5hkscs,預設是utf8

ps. 有些有難字的中文會需要這個big5擴充的編碼,避免難字變成問號

3. spreadsheet:就是說你的檔案是不是像excel一樣一格一格的,如果是的話請用True,但如果是有合併的儲存格,或是多層的row or column index,就會跑版,但還是會比沒用這個參數全部跑掉的好,後續再用手動調整…

4. pages:代表頁數,預設是1,也可以一次讀全部,就是設成all,但要注意all就代表每一頁DataFrame append下去,那就是依照header接下去,或是沒有header的狀況也行,所以如果是不一樣的分頁就分開讀吧~

請注意:以上這些選填的參數(option),打錯了並不會報錯(error)!所以如果有時候結果怪怪的請先到作者的github確認有沒有打錯參數名稱!

再次感謝有chezou貢獻出這個套件,以前被pdf搞得不要不要的,雖然現在也沒多好,但已經省了很多工!如果只是純文字非表格有很多解法,程式可參考Automate the Boring Stuff with Python

如果有更好的套件或解法也請告知小弟,尤其是像那種不是一格一格,有合併儲存格或是多層次row index or column index的狀況,非常感謝!

Kevin Tseng
Kevin Tseng

Written by Kevin Tseng

Area about fake news, information operation, data visualization, and data science

No responses yet