使用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’)
- 檔案的路徑
- 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的狀況,非常感謝!