批次從 PDF 轉檔出文字來
全自動家庭手工代工業開張啦 (?)
目錄
之前寫信去財政部調了我電子發票載具所有的歷史發票資料,之後要倒進我自己寫的記帳系統裡。可惜經過一輪死纏爛打,他們就是不肯提供 PDF 以外的檔案格式,再加上資料量又很大 (大約 185 頁 A2),所以要自己想辦法 parse 這些資料。
Step 1 - ✅ 確認 #
先用一般的 PDF Reader 打開,用滑鼠選取看看,確定裡面的文字是用文字的方式儲存。如果是影像 (比方說掃描) 的話就不適用這個方法,請左轉 Google 「OCR PDF」這個關鍵字。
Step 2 - 📑 分頁 #
我猜等一下一口氣把文字撈出來的時候格式應該是亂到不行,所以如果我可以一頁一頁處理,那至少可以確定在校對資料的時候,錯誤的最大範圍只會限縮在那一頁。
簡單 Google 一下找到了 StackExchange 上有人推薦的 CLI 叫 pdfseparate
:
在 macOS 上可以用 Homebrew 安裝 poppler
這個 formulae,pdfseparate
會包在這個裡面
brew install poppler
然後就可以把 PDF 拆成一頁一個檔案
pdfseparate document.pdf export/%d.pdf
Step 3 - 🖨️ 讀取文字 #
接下來要使用 pdfminer
這個 Python CLI 來把文字從 PDF 轉成純文字
先安裝
pipx install pdfminer # You can use pip if you want
通常一般的用法是 pdf2txt.py 1.pdf > 1.txt
。可是因為有太多檔案了,所以接下來有三種選項:
- 白痴一點:手動修改數字,頁數少的話可以省事一點
- 裝逼一點:寫一個 Bash for loop,可是我真的好討厭 shell script
- 想不到吧:用 modern editor 產生 commands
聽起來是不是有點抽象,請看影片:
🎉 完成 #
根據頁數的多寡可能會跑很久,反正產生出來的資料就是按頁數編碼的 .txt
檔案了。後面詳細的 parsing 反正不同檔案內容方法也不一樣就不寫啦。