python解析PDF程序代碼
說在前面
和word的文本相比PDF更類似於一張張圖片,圖上放著一個個文字。對其的解析是將圖片上的文字提取到text文件中,方便之後的分析。
添加依賴
在python的環境中安裝PDFminer3k,不要裝錯瞭,一開始我裝的是PDFminer,結果有幾個包不能用
pip install pdfminer3k
源程序代碼
#!/usr/bin/env python3 # -*- coding:utf-8 -*- # pip3 install pdfminer3k import os from pdfminer.converter import PDFPageAggregator from pdfminer.layout import LAParams, LTTextBoxHorizontal from pdfminer.pdfparser import PDFParser, PDFDocument from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter, PDFTextExtractionNotAllowed from pdfminer.pdfdevice import PDFDevice def read_pdf(pdf_name, result_name): # 以二進制讀模式打開 fp = open(pdf_name, 'rb') # 用文件對象來創建一個pdf文檔分析器 parser = PDFParser(fp) # 創建一個pdf文檔 doc = PDFDocument() # 連接分析器 與文檔對象 parser.set_document(doc) doc.set_parser(parser) # 提供初始密碼,如果沒有密碼 就創建一個空的字符串 doc.initialize('') # 檢測文檔是否提供txt轉換,不提供就拋出異常 if not doc.is_extractable: raise PDFTextExtractionNotAllowed # 創建PDf 資源管理器 來管理共享資源 rsrcmgr = PDFResourceManager() # 創建一個PDF設備對象 laparams = LAParams() device = PDFPageAggregator(rsrcmgr, laparams=laparams) # 創建一個PDF解釋器對象 interpreter = PDFPageInterpreter(rsrcmgr, device) with open(result_name, "w", encoding="u8") as fd_out: # 循環遍歷列表,每次處理一個page的內容 for i, page in enumerate(doc.get_pages(), 1): index = "===========《第{}頁》===========".format(i) print(index) fd_out.write(index + "\n") interpreter.process_page(page) # 接受該頁面的LTPage對象 layout = device.get_result() for x in layout: # 這裡layout是一個LTPage對象 裡面存放著 這個page解析出的各種對象 一般包括LTTextBox, # LTFigure, LTImage, LTTextBoxHorizontal 等等 想要獲取文本就獲得對象的text屬性 if not isinstance(x, LTTextBoxHorizontal): continue results = x.get_text() print(results) fd_out.write(results) if __name__ == '__main__': # 獲取讀取文件夾 filePath = '../PDFfile' #遍歷文件夾 for i,j,k in os.walk(filePath): for m in k: # 格式化輸出的名稱和地址 result = '../TextFile/' + m[:-4] + '.txt' # 格式化源文件路徑 fileName = i + '/' + m # 調用函數解析 read_pdf(fileName, result)
參考以下代碼內容:python 讀取pdf文本內容
#!/usr/bin/env python3 #-*- coding:utf-8 -*- # pip3 install pdfminer3k from pdfminer.converter import PDFPageAggregator from pdfminer.layout import LAParams, LTTextBoxHorizontal from pdfminer.pdfparser import PDFParser, PDFDocument from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter, PDFTextExtractionNotAllowed from pdfminer.pdfdevice import PDFDevice def read_pdf(pdf_name, result_name): # 以二進制讀模式打開 fp = open(pdf_name, 'rb') # 用文件對象來創建一個pdf文檔分析器 parser = PDFParser(fp) # 創建一個pdf文檔 doc = PDFDocument() # 連接分析器 與文檔對象 parser.set_document(doc) doc.set_parser(parser) # 提供初始密碼,如果沒有密碼 就創建一個空的字符串 doc.initialize('') # 檢測文檔是否提供txt轉換,不提供就拋出異常 if not doc.is_extractable: raise PDFTextExtractionNotAllowed # 創建PDf 資源管理器 來管理共享資源 rsrcmgr = PDFResourceManager() # 創建一個PDF設備對象 laparams = LAParams() device = PDFPageAggregator(rsrcmgr, laparams=laparams) # 創建一個PDF解釋器對象 interpreter = PDFPageInterpreter(rsrcmgr, device) with open(result_name,"w",encoding="u8") as fd_out: # 循環遍歷列表,每次處理一個page的內容 for i,page in enumerate(doc.get_pages(),1): index = "===========《第{}頁》===========".format(i) print(index) fd_out.write(index + "\n") interpreter.process_page(page) # 接受該頁面的LTPage對象 layout = device.get_result() for x in layout: # 這裡layout是一個LTPage對象 裡面存放著 這個page解析出的各種對象 一般包括LTTextBox, # LTFigure, LTImage, LTTextBoxHorizontal 等等 想要獲取文本就獲得對象的text屬性 if not isinstance(x, LTTextBoxHorizontal): continue results = x.get_text() print(results) fd_out.write(results) if __name__ == '__main__': pdf_name = 'test.pdf' result = 'test.txt' read_pdf(pdf_name, result)
以上就是python解析PDF的詳細內容,更多關於python解析PDF的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- 兩行Python代碼實現pdf轉word功能
- python 實現存儲數據到txt和pdf文檔及亂碼問題的解決
- 詳解用Python把PDF轉為Word方法總結
- Python 操作pdf pdfplumber讀取PDF寫入Exce
- 6個Python辦公黑科技,助你提升工作效率