【Python】解析PDF文本和表格的四大方法介紹

2021-03-02 516數據工作室

帶你玩轉四大PDF文檔解析大法

                                                                          ——侃爺

很多文件為了安全都會存成PDF格式,比如有的論文、技術文檔、書籍等等,這給程序讀取這些文檔內容帶來了很多麻煩。Python目前解析PDF的擴展包有很多,本文將對比介紹PyPDF2、pdfplumber、pdfminer3k以及Camelot,告訴你哪個是好用的PDF解析工具。

本文使用的案例PDF文檔下載連結:
連結:https://pan.baidu.com/s/1zH7vY47AqBYKM0XbdABbUA
提取碼:xhem

另外,獲取PDF文檔之後,會發現PDF文檔中的換行符是以行的位置相同的,而不是跟段落相同。

1.PyPDF2解析PDF文檔

這裡主要參考了2019-03-07,Usman Malik寫的一篇文章:Python for NLP: Working with Text and PDF Files
使用Python或者Anaconda安裝PyPDF2擴展包:

pip install PyPDF2
#----OR
conda install -c conda-forge pypdf2

讀取PDF文件

import PyPDF2
path = r"****.pdf"
#使用open的『rb』方法打開pdf文件(這裡必須得使用二進位rb的讀取方式)
mypdf = open(path,mode='rb')
#調用PdfFileReader函數
pdf_document = PyPDF2.PdfFileReader(mypdf)
#使用pdf_document變量,獲取各個信息
#或者PDF文檔的頁數
pdf_document.numPages
#輸出PDF文檔的第一頁內容
first_page = pdf_document.getPage(0)
print(first_page.extractText())

輸出文檔第一頁內容之後會發現,PyPDF2方法對中文的支持不好,而對英文的支持會很好,所以如果處理中文文檔的話,可以使用下面這個方法。

2.pdfplumber解析PDF文檔

安裝的話直接使用下面語句即可:

pip install pdfplumber

(1)解析文本內容
pdfplumber中的extract_text函數是可以直接識別PDF中的文本內容。
首先讀取整個PDF文檔文本內容

import pdfplumber
import pandas as pd
with pdfplumber.open(path) as pdf: 
content = ''
#len(pdf.pages)為PDF文檔頁數
    for i in range(len(pdf.pages)):
#pdf.pages[i] 是讀取PDF文檔第i+1頁
page = pdf.pages[i]
#page.extract_text()函數即讀取文本內容,下面這步是去掉文檔最下面的頁碼
        page_content = '\n'.join(page.extract_text().split('\n')[:-1])
content = content + page_content
print(content)

解析文本內容,取出PDF的售後解決方案中的故障代碼內容,可以看到故障代碼內容,如下圖所示,故障代碼在兩頁裡面。
根據這類文檔的規律可以知道,故障代碼內容都是在文本故障代碼列舉如下:和2. 之間,因此解析PDF之後取出這部分內容還是比較容易的:

print(content.split('故障代碼列舉如下:')[1].split('2.')[0])

運行結果如下,可以看出來很好的取出來這部分內容了。

(2)解析表格內容
上面介紹了pdfplumber解析文本內容的方法,這裡介紹一下解析表格內容的方法,和上面十分類似,pdfplumber中的extract_tables函數是可以直接識別PDF中的表格的。
這裡展示解析PDF文檔中第一頁表格的方法,可以看出案例PDF中第一頁的開頭就是一個表格:
由於使用extract_tables函數得到的是Table一個嵌套的List類型,轉化成DataFrame會更方便查看和分析。

import pdfplumber
import pandas as pd

with pdfplumber.open(path) as pdf:      
first_page = pdf.pages[0]
    for table in first_page.extract_tables(): 
df = pd.DataFrame(table)
df

可以看出這個函數非常容易的將PDF文檔中的表格提取出來了。

看完上面的可以知道pdfplumber擴展包可以非常好的解析PDF的文本內容和表格內容,並且對中文有很好的支持,十分推薦使用該方法。

3.pdfminer3k解析PDF文檔

pdfminer3k 是 pdfminer 的 python3 版本,主要用於讀取 pdf 中的文本。如果直接搜索pdfminer3k的話會發現網上有非常多的教程,但是看了之後,你可能就想吐槽這些教程太繁瑣了,看著頭疼。
下面這個是pdfminer 解析PDF文檔的流向圖。

pdfminer 方法解析PDF可以很好的提取文本內容,但是對於表格數據,能提取出文字,但是沒有格式,會很不友好。因此你如果只需要提取文本內容的話,可以使用pdfminer 擴展包,這個包也能很好的支持中文。

4.Camelot解析PDF文檔

安裝
Camelot先使用pip install camelot-py語句安裝,如果報錯,參考安裝Camelot教程。
另外,使用camelot需要安裝cv2包,上面這個安裝教程中也有。

import camelot
import pandas as pd
tables = camelot.read_pdf(filepath=path,pages='1',flavor='stream')
df = pd.DataFrame(tables[0].data)

Camelot讀取PDF文件中的表格數據很好用,並且能夠很好的支持中文,但是Camelot有很多局限性。
首先,使用stream時,表格無法被自動偵測到,stream把整個頁面當成一個table。
其次,camelot只用使用基於文本的PDF文件而不能使用掃描文檔。

綜上所述,建議使用pdfplumber擴展包來解析PDF文檔的文本和表格,如果只解析文本內容,也可以使用pdfminer ,而解析英文文檔內容,可以使用PyPDF2。

我們下次再見,如果還有下次的話!!!
歡迎關注微信公眾號:516數據工作室

相關焦點

  • PDF轉EXCEL,python的這個技能知道嗎?
    當在pdf上看到自己想用的表格,卻無法將其複製下來的時候,只能默默地打開excel對照著pdf表格的形式敲打出來,既費時又費力!這裡介紹如何用python程序將pdf上的表格自動轉化為excel表!1.使用的庫簡單介紹一下要使用的庫:pdfplumber 和xlwt1.pdfplumberpdfplumber使用來解析pdf的文字與表格。
  • 【Python基礎】python使用PyPDF2和pdfplumber操作pdf
    1、PyPDF2和pdfplumber庫介紹PyPDF2官網:PyPDF2官網 ,可以更好的讀取、寫入、分割、合併PDF文件;pdfplumber官網:pdfplumber官網,可以更好地讀取PDF文件內容和提取PDF中的表格;這兩個庫不屬於python標準庫,都需要單獨安裝;2、python提取PDF文字內容1)利用pdfplumber提取文字
  • 批量提取pdf文件信息(圖片、表格、文本等)
    日常辦公場合中,除了常規的Excel、Word、PPT等文檔外,還有一個不可忽略的文件格式是pdf格式,而對於想從pdf文件中獲取信息時,常規方法將變得非常痛苦和麻煩。此篇給大家送一pdf文件提取信息大集合,幾乎可涵蓋日常pdf文件提取信息的所有場景。
  • 神經網絡提取PDF表格工具來了,支持圖片,還能白嫖谷歌GPU資源
    賈浩楠 發自 凹非寺量子位 報導 | 公眾號 QbitAI「表哥表姐」們還在為大量PDF文件中的表格發愁嗎?百度一下,網上有大量提取PDF表格的工具,但是,它們都只支持文本格式PDF。但掃描生成的圖片表格怎麼辦?
  • Python | 看得到,取得到,才是數據(二):幾行代碼搞定PDF文件中表格數據讀取
    中分析過,在做招標情況分析和檢查時,有些招標結果公示文件是PDF格式的文件。相關的信息在這些PDF文件中通過表格展示。如下圖:( 來源:https://www.eco-city.gov.cn/u/cms/www/202006/24150649m8h0.pdf )PDF文件的中的表格數據雖然是可讀的,但如何轉化為標準的二維電子表格進行下一步分析呢?
  • 手把手教學:提取PDF各種表格文本數據(附代碼)
    今天,公眾號為大家介紹一款神器:PDFPlumbe輕鬆玩轉PDF,痛快抓數據!助你一臂之力!它是在pdfminer和pdfmine.six基礎上設計的。適用版本: Python2.7、3.1、3.4、3.5和3.6。要使用pdfplumber的可視化調試工具,還需要在計算機上安裝ImageMagick(https://imagemagick.org/index.php),說明如下:
  • Pdf轉Excel收費?Python幾行幫你搞定!
    如何挑選Python包我們經常在網上看到一些python包,雖然功能都是一樣的,但是包名卻各不同。例如解析pdf的包就有好幾種,那麼我們該如何挑選呢?愛尚實訓小編在這裡告訴大家一個小方法,利用python官方文檔來決定,看看用哪個比較好呢。
  • PDF文件解析&拆分在SAP憑證列印場景中的運用(二)
    這篇文章,緊接著上一篇,重點談談如何用python來做到高效的PDF文件解析&拆分。  小爬使用了python第三方庫PyPDF2,它可以輕鬆的處理pdf文件,它提供了讀、寫、分割、合併、文件轉換等多種操作。小爬試了下,PyPDF2分割和合併的工作能輕鬆搞定,但是提取文本這塊,它只擅長英文。如果PDF內容涉及大量中文,則PYPDF2提取到的文本是大量的亂碼。
  • pdf文檔解析之pdfbox
    PDFBox是Apache項目,也是使用Java對pdf文件解析時常用的包,而且解析轉換效果也非常不錯。
  • Python 操作 PDF,這兩個庫必須會!
    .pdf") as pdf:    page01 = pdf.pages[0] #指定頁碼    text = page01.extract_text()#提取文本    print(text)("D:\\pdffiles\\Python編碼規範中文版.pdf") as pdf:    for page in pdf.pages:        text = page.extract_text()#提取文本        print(text)「提取所有pdf文字並寫入文本中」
  • Python操作PDF全總結|處理PDF文檔不得不知道的兩個庫
    官方文檔:https://pythonhosted.org/PyPDF2安裝:pip install pypdf2pip install pdfplumberpdfplumber提取PDF文字("D:\\pdffiles\\Python編碼規範中文版.pdf") as pdf:    for page in pdf.pages:        text = page.extract_text()#提取文本        print(text)「提取所有pdf文字並寫入文本中」
  • excel轉pdf詳細方法介紹:excel表格要怎麼轉換成pdf文件?
    excel轉pdf詳細方法介紹:自高中畢業以後,我便沒上大學了,在社會上打拼已超過10年。在2018年的時候,我辭掉了廠工,決定出廠尋求別的出路。後來,從大城市回到了老家,在家附近開了一家餐飲小店。後來小店有投資人了,更得把店裡的經營報表、帳本流程等自己做的excel表格轉pdf文件後,發給他們參考。迅捷PDF轉換器是我一直在用的,有手機、電腦以及網站這3個版本,我一般用它來轉換文件格式。如果你也有這方面需要,可以往下看看excel轉pdf方法步驟。
  • Python實戰009:讀取Word文檔中的表格數據及表格合併問題解決
    我現在要解析的word文檔中主要是表格、字符串、圖片等信息,我們主要是要拿到表格中的數據。     處理這類文檔數據當然優先考慮Python啦,python解析word文件可以使用包docx。 python-docx   Python-docx是一個用於創建和更新Microsoft Word(.docx)文件的python庫,可以很好的處理Word文檔中的數據,但是要注意的是該庫
  • python必備書籍pdf下載
    7013Python庫參考手冊.pdf"7014Python精要參考(第二版)_翻譯.pdf"7015Python技術手冊(第2版).pdf"連結: 7016python基礎教程(第二版).pdf"7017 "python核心筆記.pdf"7018 "Python高級編程.pdf"
  • 【2020新書】Python文本分析,104頁pdf
    人工智慧的整個子領域與文本分析(自然語言處理)有關。開發的許多基本分析方法現在都可以作為Python實現使用。這本書將告訴您何時使用哪個方法、它如何工作的數學背景以及實現它的Python代碼。概述:今天,文本是我們生活中不可或缺的一部分,也是最豐富的信息來源之一。
  • python 實用程序 | PDF 轉 Word
    閱讀文本大概需要 6 分鐘。因為 pdf 文檔裡面的內容有很多,如果全部列印的話,費用還是挺高的。所以她想把裡面的內容格式修改下,比如行間距,字間距等等。通過這樣的修改,可以把文檔的頁數減少很多,這樣就省下不少的錢。於是乎我就想到了利用 python 來寫個程序,把 pdf 轉成 word 文檔。秉承著不要重複造輪子的想法,我首先在網上搜索了下。果然已經有人寫好了,我們直接拿來用就行。
  • 我50行Python代碼讓小姐姐給你讀Pdf
    對於PDF文檔中文字的提取,這裡我們採用的是pdfplumber庫進行提取,pdfplumber可以處理PDF中,包括文本、表格、格式在內的各種信息,小巧但是功能十分的強大。但是需要注意版本的使用,這裡我們使用的python3.5環境下的版本號為0.5.25的pdfplumber。
  • Python實操!速收藏!學習使用Python創建文本編輯器應用程式!
    朋友們,大家好,這次再次與大家見面,這一次將發表一篇文章,介紹如何使用Python Tkinter創建文本編輯器。Tkinter是一個Python庫,在你想要創建應用程式時非常有用。如何製作此文本編輯器應用程式呢?
  • Python自動化辦公(內容)
    python自動化辦公(python操作Excel、Word、PDF、PPT)python使用openpyxl操作excel;python使用PyPDF2和pdfplumber操作excel1、openpyxl庫介紹2、python怎麼打開及讀取表格內容?
  • python辦公自動化——PDF轉Word
    這一特點使它成為在Internet上進行電子文檔發行和數位化信息傳播的理想文檔格式。那pdf有這麼多優點為啥還要轉Word? 答:pdf不易編輯,不易排版,不易粘貼複製,在工作中要是在pdf裡面提取你想要的文字或者圖片,那可費事兒,對於文字要不就一個字一個字地比著打,要麼就充值某個軟體會員,開啟開掛模式。