python解析PDF程序代碼
更新時間:2021年06月19日 11:24:14 作者:酸奶面包
python解析pdf信息,目前還是不能做到很完善,每個方法都會有它的弊端,都需要結合自己的業(yè)務場景來和其它方法一塊進行使用,從而達到一個相對滿意的目標,接下來給大家介紹python解析PDF的程序代碼,一起看看吧
說在前面
和word的文本相比PDF更類似于一張張圖片,圖上放著一個個文字。對其的解析是將圖片上的文字提取到text文件中,方便之后的分析。
添加依賴
在python的環(huán)境中安裝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')
# 用文件對象來創(chuàng)建一個pdf文檔分析器
parser = PDFParser(fp)
# 創(chuàng)建一個pdf文檔
doc = PDFDocument()
# 連接分析器 與文檔對象
parser.set_document(doc)
doc.set_parser(parser)
# 提供初始密碼,如果沒有密碼 就創(chuàng)建一個空的字符串
doc.initialize('')
# 檢測文檔是否提供txt轉(zhuǎn)換,不提供就拋出異常
if not doc.is_extractable:
raise PDFTextExtractionNotAllowed
# 創(chuàng)建PDf 資源管理器 來管理共享資源
rsrcmgr = PDFResourceManager()
# 創(chuàng)建一個PDF設備對象
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
# 創(chuàng)建一個PDF解釋器對象
interpreter = PDFPageInterpreter(rsrcmgr, device)
with open(result_name, "w", encoding="u8") as fd_out:
# 循環(huán)遍歷列表,每次處理一個page的內(nèi)容
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
# 調(diào)用函數(shù)解析
read_pdf(fileName, result)
參考以下代碼內(nèi)容:python 讀取pdf文本內(nèi)容
#!/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')
# 用文件對象來創(chuàng)建一個pdf文檔分析器
parser = PDFParser(fp)
# 創(chuàng)建一個pdf文檔
doc = PDFDocument()
# 連接分析器 與文檔對象
parser.set_document(doc)
doc.set_parser(parser)
# 提供初始密碼,如果沒有密碼 就創(chuàng)建一個空的字符串
doc.initialize('')
# 檢測文檔是否提供txt轉(zhuǎn)換,不提供就拋出異常
if not doc.is_extractable:
raise PDFTextExtractionNotAllowed
# 創(chuàng)建PDf 資源管理器 來管理共享資源
rsrcmgr = PDFResourceManager()
# 創(chuàng)建一個PDF設備對象
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
# 創(chuàng)建一個PDF解釋器對象
interpreter = PDFPageInterpreter(rsrcmgr, device)
with open(result_name,"w",encoding="u8") as fd_out:
# 循環(huán)遍歷列表,每次處理一個page的內(nèi)容
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的詳細內(nèi)容,更多關于python解析PDF的資料請關注腳本之家其它相關文章!
相關文章
Python安裝后測試連接MySQL數(shù)據(jù)庫方式
這篇文章主要介紹了Python安裝后測試連接MySQL數(shù)據(jù)庫方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
python使用requests實現(xiàn)發(fā)送帶文件請求功能
這篇文章主要介紹了python使用requests實現(xiàn)發(fā)送帶文件請求,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12

