python解析并读取PDF文件:函数总结
目錄
1.PyPDF2
2.?pdfminer & pdfminer3k
3. pdfplumber
4.?Camelot
雖然PDF文件對文本布局非常好,容易打印并閱讀,但軟件要將它們解析為純文本并不容易,Python目前解析PDF的擴展包有很多,本文將分別介紹PyPDF2、pdfplumber、pdfminer3k以及Camelot(若發(fā)現(xiàn)還有其他函數(shù),繼續(xù)補充),并分析優(yōu)缺點,告訴你哪個是好用的PDF解析工具。
1.PyPDF2
PyPDF2 沒有辦法從 PDF 文檔中提取圖像、圖表或其他媒體,但它可以提取文 本,并將文本返回為 Python 字符串。
缺點:PyPDF2從PDF提取文本時可能會出錯,甚至根本打不開某些PDF文件。
基本實現(xiàn)代碼如下:
import PyPDF2# 使用open的‘rb’方法打開pdf文件,使用二進制模式 mypdf = open('pdfexample.pdf',mode='rb')# 調用PdfFileReader函數(shù) pdf_document = PyPDF2.PdfFileReader(mypdf)# 使用PdfFileReader對象的變量,獲取各個信息,如numPages屬性獲取PDF文檔的頁數(shù) pdf_document.numPages # 調用PdfFileReader對象的getPage()方法,傳入頁碼,取得Page對象:輸出PDF文檔的第一頁內容 first_page = pdf_document.getPage(0)# 調用Page對象的extractText()方法,返回該頁文本的字符串 text = first_page.extractText())2.?pdfminer & pdfminer3k
PDFMiner是一個從PDF文檔中提取信息的工具。與其他pdf相關的工具不同,它完全專注于獲取和分析文本數(shù)據(jù)。PDFMiner允許獲取頁面中文本的確切位置,以及其他信息,比如字體或行。它包括一個PDF轉換器,可以將PDF文件轉換成其他文本格式(如HTML)。它有一個可擴展的PDF解析器,可以用于其他目的而不是文本分析。
pdfminer3k 是 pdfminer 的 python3 版本,主要用于讀取 pdf 中的文本,下面是pdfminer 解析PDF文檔的流向圖。
? ? ? ? ? ? ? ? ??
pdfminer方法解析PDF可以很好的提取文本內容,但是對于表格數(shù)據(jù),能提取出文字,但是沒有格式,會很不友好。因此你如果只需要提取文本內容的話,可以使用pdfminer擴展包,這個包也能很好的支持中文。
參考:https://www.cnblogs.com/wj-1314/p/9429816.html
3. pdfplumber
Pdfplumber是一個可以處理pdf格式信息的庫,可以很好地解析PDF的文本和表格內容??梢圆檎谊P于每個文本字符、矩陣、和行的詳細信息,也可以對表格進行提取并進行可視化調試,并且對中文有很好的支持,十分推薦使用該方法。
參考:https://blog.csdn.net/blmoistawinde/article/details/82051915
pdfplumber.pdf中包含了.metadata和.pages兩個屬性:
- .metadata是一個包含pdf信息的字典。
- .pages是一個包含頁面信息的列表。
每個pdfplumber.page的類中包含了幾個主要的屬性:
- .page_number 頁碼
- .width 頁面寬度
- .height 頁面高度
- .objects/.chars/.lines/.rects 這些屬性中每一個都是一個列表,每個列表都包含一個字典,每個字典用于說明頁面中的對象信息, 包括直線,字符, 方格等位置信息。
一些常用的方法:
- .extract_text() 用來提頁面中的文本,將頁面的所有字符對象整理為的那個字符串
- .extract_words() 返回的是所有的單詞及其相關信息
- .extract_tables() 提取頁面的表格
- .to_image() 用于可視化調試時,返回PageImage類的一個實例
?
1. 解析文本內容
pdfplumber中的extract_text()函數(shù)是可以直接識別PDF中的文本內容:
import pdfplumber import pandas as pdwith pdfplumber.open(path) as pdf: content = ''for i in range(len(pdf.pages)):# 讀取PDF文檔第i+1頁page = pdf.pages[i] # page.extract_text()函數(shù)即讀取文本內容,下面這步是去掉文檔最下面的頁碼page_content = '\n'.join(page.extract_text().split('\n')[:-1])content = content + page_content# 提取以上解析結果中,“地方法規(guī)”和“2.其他有關資料”之間的內容 result = content.split('地方法規(guī)列舉如下:')[1].split('2.其他有關資料')[0]2. 解析表格內容
pdfplumber中的extract_tables()函數(shù)是可以直接識別PDF中的表格的,使用extract_tables函數(shù)得到的是Table一個嵌套的List類型,轉化成DataFrame會更方便查看和分析。
import pdfplumber import pandas as pdwith pdfplumber.open(path) as pdf: first_page = pdf.pages[0] tables = first_page.extract_tables()for table in tables df = pd.DataFrame(table) # 第一列當成表頭: df = pd.DataFrame(table[1:],columns=table[0])4.?Camelot
Camelot讀取PDF文件中的表格數(shù)據(jù)很好用,并且能夠很好的支持中文,但是Camelot有很多局限性:
- 首先,使用stream時,表格無法被自動偵測到,stream把整個頁面當成一個table。
- 其次,camelot只用使用基于文本的PDF文件而不能使用掃描文檔。
綜上所述,建議使用pdfplumber擴展包來解析PDF文檔的文本和表格,如果只解析文本內容,也可以使用pdfminer ,而解析英文文檔內容,可以使用PyPDF2。
?
?
?
?
總結
以上是生活随笔為你收集整理的python解析并读取PDF文件:函数总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git 操作简单总结:廖雪峰教程
- 下一篇: 人工智能到底是什么?人工智能如何改变社会