python解析PDF程序代碼
說在前面
和word的文本相比PDF更類似于一張張圖片,圖上放著一個(gè)個(gè)文字。對(duì)其的解析是將圖片上的文字提取到text文件中,方便之后的分析。
添加依賴
在python的環(huán)境中安裝PDFminer3k,不要裝錯(cuò)了,一開始我裝的是PDFminer,結(jié)果有幾個(gè)包不能用
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):
# 以二進(jìn)制讀模式打開
fp = open(pdf_name, 'rb')
# 用文件對(duì)象來創(chuàng)建一個(gè)pdf文檔分析器
parser = PDFParser(fp)
# 創(chuàng)建一個(gè)pdf文檔
doc = PDFDocument()
# 連接分析器 與文檔對(duì)象
parser.set_document(doc)
doc.set_parser(parser)
# 提供初始密碼,如果沒有密碼 就創(chuàng)建一個(gè)空的字符串
doc.initialize('')
# 檢測(cè)文檔是否提供txt轉(zhuǎn)換,不提供就拋出異常
if not doc.is_extractable:
raise PDFTextExtractionNotAllowed
# 創(chuàng)建PDf 資源管理器 來管理共享資源
rsrcmgr = PDFResourceManager()
# 創(chuàng)建一個(gè)PDF設(shè)備對(duì)象
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
# 創(chuàng)建一個(gè)PDF解釋器對(duì)象
interpreter = PDFPageInterpreter(rsrcmgr, device)
with open(result_name, "w", encoding="u8") as fd_out:
# 循環(huán)遍歷列表,每次處理一個(gè)page的內(nèi)容
for i, page in enumerate(doc.get_pages(), 1):
index = "===========《第{}頁(yè)》===========".format(i)
print(index)
fd_out.write(index + "\n")
interpreter.process_page(page)
# 接受該頁(yè)面的LTPage對(duì)象
layout = device.get_result()
for x in layout:
# 這里layout是一個(gè)LTPage對(duì)象 里面存放著 這個(gè)page解析出的各種對(duì)象 一般包括LTTextBox,
# LTFigure, LTImage, LTTextBoxHorizontal 等等 想要獲取文本就獲得對(duì)象的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):
# 以二進(jìn)制讀模式打開
fp = open(pdf_name, 'rb')
# 用文件對(duì)象來創(chuàng)建一個(gè)pdf文檔分析器
parser = PDFParser(fp)
# 創(chuàng)建一個(gè)pdf文檔
doc = PDFDocument()
# 連接分析器 與文檔對(duì)象
parser.set_document(doc)
doc.set_parser(parser)
# 提供初始密碼,如果沒有密碼 就創(chuàng)建一個(gè)空的字符串
doc.initialize('')
# 檢測(cè)文檔是否提供txt轉(zhuǎn)換,不提供就拋出異常
if not doc.is_extractable:
raise PDFTextExtractionNotAllowed
# 創(chuàng)建PDf 資源管理器 來管理共享資源
rsrcmgr = PDFResourceManager()
# 創(chuàng)建一個(gè)PDF設(shè)備對(duì)象
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
# 創(chuàng)建一個(gè)PDF解釋器對(duì)象
interpreter = PDFPageInterpreter(rsrcmgr, device)
with open(result_name,"w",encoding="u8") as fd_out:
# 循環(huán)遍歷列表,每次處理一個(gè)page的內(nèi)容
for i,page in enumerate(doc.get_pages(),1):
index = "===========《第{}頁(yè)》===========".format(i)
print(index)
fd_out.write(index + "\n")
interpreter.process_page(page)
# 接受該頁(yè)面的LTPage對(duì)象
layout = device.get_result()
for x in layout:
# 這里layout是一個(gè)LTPage對(duì)象 里面存放著 這個(gè)page解析出的各種對(duì)象 一般包括LTTextBox,
# LTFigure, LTImage, LTTextBoxHorizontal 等等 想要獲取文本就獲得對(duì)象的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的詳細(xì)內(nèi)容,更多關(guān)于python解析PDF的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python安裝后測(cè)試連接MySQL數(shù)據(jù)庫(kù)方式
這篇文章主要介紹了Python安裝后測(cè)試連接MySQL數(shù)據(jù)庫(kù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
Python使用turtle繪制有趣的龍年祝福動(dòng)畫
這篇文章主要介紹了Python的內(nèi)置庫(kù)——小海龜(turtle),它是一個(gè)非常實(shí)用的繪畫工具,不僅可以幫助我們繪制圖形,還能讓我們查看整個(gè)繪畫過程,下面我們就來看看如何使用turtle繪制有趣的龍年祝福動(dòng)畫吧2024-01-01
如何利用python制作時(shí)間戳轉(zhuǎn)換工具詳解
這篇文章主要給大家介紹了關(guān)于如何利用python制作時(shí)間戳轉(zhuǎn)換工具的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09
python實(shí)現(xiàn)楊輝三角的幾種方法代碼實(shí)例
這篇文章主要介紹了python實(shí)現(xiàn)楊輝三角的幾種方法代碼實(shí)例,文中圖文代碼講解的很清晰,有不太懂的同學(xué)可以學(xué)習(xí)下2021-03-03
python使用requests實(shí)現(xiàn)發(fā)送帶文件請(qǐng)求功能
這篇文章主要介紹了python使用requests實(shí)現(xiàn)發(fā)送帶文件請(qǐng)求,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12

