亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

【Python】解析PDF文檔文本和表格內(nèi)容的四大方法介紹

系統(tǒng) 2289 0

很多文件為了安全都會(huì)存成PDF格式,比如有的論文、技術(shù)文檔、書籍等等,這給程序讀取這些文檔內(nèi)容帶來了很多麻煩。Python目前解析PDF的擴(kuò)展包有很多,本文將對(duì)比介紹PyPDF2、pdfplumber、pdfminer3k以及Camelot,告訴你哪個(gè)是好用的PDF解析工具。 碼字不易,喜歡請(qǐng)點(diǎn)贊!!!

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

另外,獲取PDF文檔之后,會(huì)發(fā)現(xiàn)PDF文檔中的換行符是以行的位置相同的,而不是跟段落相同。

1.PyPDF2解析PDF文檔

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

            
              pip install PyPDF2

OR

conda install -c conda-forge pypdf2

            
          

讀取PDF文件

            
              import PyPDF2
path = r"****.pdf"
#使用open的‘rb’方法打開pdf文件(這里必須得使用二進(jìn)制rb的讀取方式)
mypdf = open(path,mode='rb')
#調(diào)用PdfFileReader函數(shù)
pdf_document = PyPDF2.PdfFileReader(mypdf)
#使用pdf_document變量,獲取各個(gè)信息
#或者PDF文檔的頁數(shù)
pdf_document.numPages  
#輸出PDF文檔的第一頁內(nèi)容
first_page = pdf_document.getPage(0)
print(first_page.extractText()) 

            
          

輸出文檔第一頁內(nèi)容之后會(huì)發(fā)現(xiàn),PyPDF2方法對(duì)中文的支持不好,而對(duì)英文的支持會(huì)很好,所以如果處理中文文檔的話,可以使用下面這個(gè)方法。

2.pdfplumber解析PDF文檔

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

            
              pip install pdfplumber

            
          

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

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

            
          

解析文本內(nèi)容,取出PDF的 售后解決方案 中的故障代碼內(nèi)容,可以看到故障代碼內(nèi)容,如下圖所示,故障代碼在兩頁里面。
【Python】解析PDF文檔文本和表格內(nèi)容的四大方法介紹_第1張圖片 根據(jù)這類文檔的規(guī)律可以知道,故障代碼內(nèi)容都是在文本 故障代碼列舉如下: 2. 之間,因此解析PDF之后取出這部分內(nèi)容還是比較容易的:

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

            
          

運(yùn)行結(jié)果如下,可以看出來很好的取出來這部分內(nèi)容了。
【Python】解析PDF文檔文本和表格內(nèi)容的四大方法介紹_第2張圖片
(2)解析表格內(nèi)容
上面介紹了pdfplumber解析文本內(nèi)容的方法,這里介紹一下解析表格內(nèi)容的方法,和上面十分類似,pdfplumber中的extract_tables函數(shù)是可以直接識(shí)別PDF中的表格的。
這里展示解析PDF文檔中第一頁表格的方法,可以看出案例PDF中第一頁的開頭就是一個(gè)表格:
【Python】解析PDF文檔文本和表格內(nèi)容的四大方法介紹_第3張圖片 由于使用extract_tables函數(shù)得到的是Table一個(gè)嵌套的List類型,轉(zhuǎn)化成DataFrame會(huì)更方便查看和分析。

            
              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) 
        #第一列當(dāng)成表頭: df = pd.DataFrame(table[1:],columns=table[0]) 
df

            
          

可以看出這個(gè)函數(shù)非常容易的將PDF文檔中的表格提取出來了。
【Python】解析PDF文檔文本和表格內(nèi)容的四大方法介紹_第4張圖片
看完上面的可以知道pdfplumber擴(kuò)展包可以非常好的解析PDF的文本內(nèi)容和表格內(nèi)容,并且對(duì)中文有很好的支持,十分推薦使用該方法。

3.pdfminer3k解析PDF文檔

pdfminer3k 是 pdfminer 的 python3 版本,主要用于讀取 pdf 中的文本。如果直接搜索pdfminer3k的話會(huì)發(fā)現(xiàn)網(wǎng)上有非常多的教程,但是看了之后,你可能就想吐槽這些教程太繁瑣了,看著頭疼。
下面這個(gè)是pdfminer 解析PDF文檔的流向圖。
【Python】解析PDF文檔文本和表格內(nèi)容的四大方法介紹_第5張圖片
pdfminer 方法解析PDF可以很好的提取文本內(nèi)容,但是對(duì)于表格數(shù)據(jù),能提取出文字,但是沒有格式,會(huì)很不友好。因此你如果只需要提取文本內(nèi)容的話,可以使用pdfminer 擴(kuò)展包,這個(gè)包也能很好的支持中文。

4.Camelot解析PDF文檔

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

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

            
          

Camelot讀取PDF文件中的表格數(shù)據(jù)很好用,并且能夠很好的支持中文,但是Camelot有很多局限性。
首先,使用stream時(shí),表格無法被自動(dòng)偵測(cè)到,stream把整個(gè)頁面當(dāng)成一個(gè)table。
其次,camelot只用使用基于文本的PDF文件而不能使用掃描文檔。

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

參考文獻(xiàn):
https://blog.csdn.net/Asher117/article/details/83627701


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 一本色道久久88加勒比—综合 | 久久www免费人成_看片高清 | 四虎网站在线播放 | 亚洲欧美中日韩 | 国产精品99久久免费观看 | 久草在线中文最新视频 | 亚洲精品欧洲精品 | 99re国产精品视频首页 | 欧美激情免费观看 | 久久影院中文字幕 | 男人天堂欧美 | 中文字幕第66页永久乱码 | 欧美色交| 久久国产精品伦理 | 鸥美毛片 | 日韩国产欧美精品综合二区 | 精品久久久久久蜜臂a∨ | 国产精品成人免费视频 | 精品美女视频在线观看2023 | 97久久人人| 中文字幕亚洲精品日韩精品 | 一级欧美视频 | 免费播放欧美毛片欧美a | 亚洲成人视 | 欧美成人亚洲欧美成人 | 国产欧美一区二区 | 欧美国产精品亚洲精品第一区 | 日本黄页网站在线观看 | 自拍第二页 | 久久国产精品久久久久久 | 国产农村妇女毛片精品久久 | 国产夜色视频 | 天天曰曰 | 亚洲精品国产成人7777 | 亚洲国产观看 | 尹人成人| 久久国产精品亚洲77777 | 欧美日韩亚洲区久久综合 | 国产精品国产 | 精品国产成人三级在线观看 | 免费久久 |