Python使用Tabula提取PDF表格數據


今天遇到一個批量讀取pdf文件中表格數據的需求,樣式大體是以下這樣:

python讀取PDF無非就是三種方式(我所了解的),pdfminerpdf2htmlEXTabula。綜合考慮后,選擇了最后一種。下面對三種方式分別介紹:

pdfminer

該方式從網上搜索的結果是,可以提取pdf文本數據,但是提取后表格信息就亂了。所以本人沒有親自實驗,就果斷放棄了實驗該方法。如果只是提取pdf里面的文本內容,該方式可能是比較合適的。

pdf2htmlEX

該方式是通過把pdf格式轉換成html格式,然后再提取信息的方法。
Github: https://github.com/coolwanglu/pdf2htmlEX
需先下載pdf2htmlEX可執行程序,下載地址:https://github.com/coolwanglu/pdf2htmlEX/wiki/Download。

#-*- conding: utf-8 -*-

import subprocess

subprocess.call('"D:\Program Files (x86)\pdf2htmlEX-win32-0.14.6-upx-with-poppler-data\pdf2htmlEX.exe"  --dest-dir E:\\test\extract\\2017gq\\out E:\\test\extract\\2017gq\\a53277ce525547088780c4b94accb7b5.pdf', shell=True)

執行以上代碼,會在指定目錄 E:\test\extract\2017gq\out 下生成對應html文件,瀏覽器中查看效果:

可以看到整體轉換的效果非常不錯,但是轉換后的標簽沒有特點,使數據的提取變得非常困難。多番嘗試后,感覺該方法不夠通用,沒法解決我的需求。也許對於單純的pdf轉html,該方式可能是最好的選擇。

Tabula

Tabula是專門用來提取PDF表格數據的,同時支持PDF導出為CSV、Excel格式。
官網: http://tabula.technology/
Github: https://github.com/chezou/tabula-py
首先安裝tabula-py: pip install tabula-py
tabula-py依賴庫包括java、pandas、numpy,所以需保證運行環境中安裝了這些庫。

#-*- conding: utf-8 -*-

import tabula

df = tabula.read_pdf("E:\\test\\extract\\2017gq\\a53277ce525547088780c4b94accb7b5.pdf", encoding='gbk', pages='all')
print(df)
for indexs in df.index:
    # 遍歷打印企業名稱
    print(df.loc[indexs].values[1].strip())

執行以上代碼,成功打印出表格中的所有企業名稱,查看打印的 df 的結構,如下圖:

總結

以上三種方式中,最后一種方式完美的解決了我的從PDF表格中提取數據的需求,希望能拋磚引玉,大家在使用時選擇最適合自己的方法,如有介紹不當之處,望留言中指正,謝過。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM