溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

python中解析PDF程序的示例分析

發(fā)布時(shí)間:2021-06-21 10:44:29 來(lái)源:億速云 閱讀:168 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)python中解析PDF程序的示例分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

說(shuō)在前面

和word的文本相比PDF更類(lèi)似于一張張圖片,圖上放著一個(gè)個(gè)文字。對(duì)其的解析是將圖片上的文字提取到text文件中,方便之后的分析。

添加依賴(lài)

在python的環(huán)境中安裝PDFminer3k,不要裝錯(cuò)了,一開(kāi)始我裝的是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)制讀模式打開(kāi)
    fp = open(pdf_name, 'rb')
    # 用文件對(duì)象來(lái)創(chuàng)建一個(gè)pdf文檔分析器
    parser = PDFParser(fp)
    # 創(chuàng)建一個(gè)pdf文檔
    doc = PDFDocument()
    # 連接分析器 與文檔對(duì)象
    parser.set_document(doc)
    doc.set_parser(parser)
    # 提供初始密碼,如果沒(méi)有密碼 就創(chuàng)建一個(gè)空的字符串
    doc.initialize('')
    # 檢測(cè)文檔是否提供txt轉(zhuǎn)換,不提供就拋出異常
    if not doc.is_extractable:
        raise PDFTextExtractionNotAllowed
    # 創(chuàng)建PDf 資源管理器 來(lái)管理共享資源
    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:
            # 格式化輸出的名稱(chēng)和地址
            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)制讀模式打開(kāi)
    fp = open(pdf_name, 'rb')
    # 用文件對(duì)象來(lái)創(chuàng)建一個(gè)pdf文檔分析器
    parser = PDFParser(fp)
    # 創(chuàng)建一個(gè)pdf文檔
    doc = PDFDocument()
    # 連接分析器 與文檔對(duì)象
    parser.set_document(doc)
    doc.set_parser(parser)
    # 提供初始密碼,如果沒(méi)有密碼 就創(chuàng)建一個(gè)空的字符串
    doc.initialize('')
    # 檢測(cè)文檔是否提供txt轉(zhuǎn)換,不提供就拋出異常
    if not doc.is_extractable:
        raise PDFTextExtractionNotAllowed
    # 創(chuàng)建PDf 資源管理器 來(lái)管理共享資源
    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)

感謝各位的閱讀!關(guān)于“python中解析PDF程序的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI