欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python使用pdfminer庫玩轉(zhuǎn)PDF文本提取

 更新時間:2025年02月05日 08:45:50   作者:正東AI  
pdfminer是一個開源的Python第三方庫,專門用于解析PDF文件,本文主要為大家詳細介紹了如何使用pdfminer實現(xiàn)PDF文本提取,有需要的小伙伴可以了解下

一、背景

在日常工作中,我們常常需要處理PDF文件,比如提取文本內(nèi)容、分析文檔結(jié)構(gòu)等。然而,PDF文件的格式復(fù)雜,直接提取信息并非易事。pdfminer庫應(yīng)運而生,它能夠高效地解析PDF文件,提取文本、元數(shù)據(jù)、表格等信息,幫助我們輕松應(yīng)對各種PDF處理需求。接下來,讓我們深入了解這個強大的工具。

二、什么是pdfminer

pdfminer是一個開源的Python第三方庫,專門用于解析PDF文件。它提供了豐富的API,可以精確提取文本、分析頁面布局、提取元數(shù)據(jù)等。它的核心功能是將PDF文件的內(nèi)容轉(zhuǎn)換為可操作的文本數(shù)據(jù),方便進一步處理和分析。

三、如何安裝pdfminer

pdfminer是一個第三方庫,可以通過以下命令行安裝:

pip install pdfminer.six

安裝完成后,可以通過以下命令確認安裝是否成功:

python -c "import pdfminer; print(pdfminer.__version__)"

如果能夠正常輸出版本號,說明安裝成功。

四、簡單庫函數(shù)使用方法

以下是pdfminer中常用的五個函數(shù)及其使用方法:

1. 提取文本

from pdfminer.high_level import extract_text

text = extract_text("example.pdf")
print(text)

extract_text函數(shù)用于從PDF文件中提取全部文本。

2. 獲取頁面布局信息

from pdfminer.layout import LAParams, LTTextBox, LTTextLine
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator

resource_manager = PDFResourceManager()
fake_file_handle = io.StringIO()
converter = PDFPageAggregator(resource_manager, laparams=LAParams())
page_interpreter = PDFPageInterpreter(resource_manager, converter)

???????with open("example.pdf", "rb") as pdf_file:
    for page in PDFPage.get_pages(pdf_file):
        page_interpreter.process_page(page)
        layout = converter.get_result()
        for lt_obj in layout:
            if isinstance(lt_obj, (LTTextBox, LTTextLine)):
                text = lt_obj.get_text()
                x, y, width, height = lt_obj.bbox
                font = lt_obj._objs[0].fontname
                font_size = lt_obj._objs[0].size
                print(f"Text: {text.strip()}, Position: ({x:.2f}, {y:.2f}), Font: {font}, Size: {font_size:.2f}")

這段代碼獲取文本塊的位置、字體和字號等信息。

3. 提取表格數(shù)據(jù)

from pdfminer.high_level import extract_text
import tabula

table_text = extract_text("table_example.pdf")
print(table_text)

tables = tabula.read_pdf("table_example.pdf", pages="all")
for df in tables:
    print(df)

使用pdfminer提取PDF文檔中的表格,并使用tabula提取表格數(shù)據(jù)。

4. 提取圖像

from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdftypes import PDFStream
import io
from PIL import Image

???????with open('example.pdf', 'rb') as file:
    parser = PDFParser(file)
    document = PDFDocument(parser)
    if document.is_extractable:
        for xref in document.xrefs:
            if xref.get_subtype() == '/Image':
                stream_obj = xref.get_object()
                if isinstance(stream_obj, PDFStream):
                    data = stream_obj.get_rawdata()
                    image = Image.open(io.BytesIO(data))
                    image.show()

提取PDF文檔中的圖像。

5. 提取元數(shù)據(jù)

from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument

def extract_metadata(pdf_path):
    with open(pdf_path, 'rb') as fh:
        parser = PDFParser(fh)
        doc = PDFDocument(parser)
        metadata = doc.info[0]
        for key, value in metadata.items():
            print(f"{key}: {value}")

extract_metadata('example.pdf')

提取PDF文件的元數(shù)據(jù)。

五、實際應(yīng)用場景

以下是pdfminer在不同場景中的應(yīng)用示例:

1. 法律文檔處理

from pdfminer.high_level import extract_text

def extract_legal_document_text(pdf_path):
    text = extract_text(pdf_path)
    return text

text = extract_legal_document_text('legal_document.pdf')
print(text)

在法律行業(yè),通過pdfminer提取和分析法律文檔中的文本和元數(shù)據(jù),自動生成報告。

2. 財務(wù)報表分析

from pdfminer.layout import LAParams, LTTextBoxHorizontal
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator

def extract_financial_tables(pdf_path):
    with open(pdf_path, 'rb') as fh:
        rsrcmgr = PDFResourceManager()
        laparams = LAParams()
        device = PDFPageAggregator(rsrcmgr, laparams=laparams)
        interpreter = PDFPageInterpreter(rsrcmgr, device)

        for page in PDFPage.get_pages(fh, caching=True, check_extractable=True):
            interpreter.process_page(page)
            layout = device.get_result()
            for element in layout:
                if isinstance(element, LTTextBoxHorizontal):
                    print(element.get_text())

???????extract_financial_tables('financial_report.pdf')

在財務(wù)行業(yè),通過pdfminer提取財務(wù)報表中的表格數(shù)據(jù),進行自動化的數(shù)據(jù)分析和處理。

3. 研究論文數(shù)據(jù)提取

from pdfminer.layout import LAParams, LTTextBoxHorizontal, LTFigure
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator

def extract_research_paper_content(pdf_path):
    with open(pdf_path, 'rb') as fh:
        rsrcmgr = PDFResourceManager()
        laparams = LAParams()
        device = PDFPageAggregator(rsrcmgr, laparams=laparams)
        interpreter = PDFPageInterpreter(rsrcmgr, device)

        for page in PDFPage.get_pages(fh, caching=True, check_extractable=True):
            interpreter.process_page(page)
            layout = device.get_result()
            for element in layout:
                if isinstance(element, LTTextBoxHorizontal):
                    print(element.get_text())
                elif isinstance(element, LTFigure):
                    print("Figure found")

???????extract_research_paper_content('research_paper.pdf')

在學(xué)術(shù)研究中,通過pdfminer提取研究論文中的文本和圖表信息,輔助研究分析。

4. 文本逐頁提取

from pdfminer.pdfpage import PDFPage
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from io import StringIO

def extract_text_by_page(pdf_path):
    resource_manager = PDFResourceManager()
    fake_file_handle = StringIO()
    converter = TextConverter(resource_manager, fake_file_handle)
    page_interpreter = PDFPageInterpreter(resource_manager, converter)

    with open(pdf_path, 'rb') as fh:
        for page in PDFPage.get_pages(fh, caching=True, check_extractable=True):
            page_interpreter.process_page(page)
            text = fake_file_handle.getvalue()
            yield text

    converter.close()
    fake_file_handle.close()

???????for page_text in extract_text_by_page('example.pdf'):
    print(page_text)

逐頁提取PDF文件中的文本,適用于需要逐頁處理的情況。

5. 提取目錄

from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument, PDFNoOutlines

def extract_toc(pdf_path):
    with open(pdf_path, 'rb') as file:
        parser = PDFParser(file)
        document = PDFDocument(parser)
        try:
            outlines = document.get_outlines()
            toc = []
            for (level, title, dest, a, se) in outlines:
                toc.append((level, title))
            return toc
        except PDFNoOutlines:
            return []

???????toc = extract_toc('example.pdf')
for item in toc:
    print(f"Level: {item[0]}, Title: {item[1]}")

提取PDF文檔的目錄,方便快速定位文檔結(jié)構(gòu)。

六、常見問題及解決方案

以下是使用pdfminer時常見的問題及解決方案:

文本提取為空

錯誤信息 :extract_text返回空字符串。

原因 :PDF文件可能包含非文本內(nèi)容,或者文本被嵌入為圖像。

解決方案 :檢查PDF文件的內(nèi)容,確保文本是可提取的。如果文本嵌入為圖像,可以嘗試使用OCR工具(如`pytesseract

以上就是Python使用pdfminer庫玩轉(zhuǎn)PDF文本提取的詳細內(nèi)容,更多關(guān)于Python pdfminer PDF文本提取的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用Python+Splinter自動刷新12306火車票

    使用Python+Splinter自動刷新12306火車票

    一年一度的春運又來了,今年我自己寫了個搶票腳本,下面小編給大家分享使用Python+Splinter自動刷新12306火車票,需要的朋友參考下吧
    2018-01-01
  • python 實現(xiàn)二維數(shù)組的索引、刪除、拼接操作

    python 實現(xiàn)二維數(shù)組的索引、刪除、拼接操作

    這篇文章主要介紹了python 實現(xiàn)二維數(shù)組的索引、刪除、拼接操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Python 創(chuàng)建新文件時避免覆蓋已有的同名文件的解決方法

    Python 創(chuàng)建新文件時避免覆蓋已有的同名文件的解決方法

    今天小編就為大家分享一篇Python 創(chuàng)建新文件時避免覆蓋已有的同名文件的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Python并發(fā)執(zhí)行的幾種實現(xiàn)方法

    Python并發(fā)執(zhí)行的幾種實現(xiàn)方法

    在Python中多線程是實現(xiàn)并發(fā)的一種方式,多線程可以讓程序在同一時間內(nèi)進行多個任務(wù),從而提高程序的效率和執(zhí)行速度,這篇文章主要給大家介紹了關(guān)于Python并發(fā)執(zhí)行的幾種實現(xiàn)方法,需要的朋友可以參考下
    2024-08-08
  • python中快速進行多個字符替換的方法小結(jié)

    python中快速進行多個字符替換的方法小結(jié)

    最近在用python給自己的seo工作提高效率和節(jié)省時間,發(fā)現(xiàn)python真的很不錯,可以完成很多事情。多個字符替換是大家可能都會遇到的一個問題,昨天在工作中就碰到了這么一個問題,所以想著記錄一下解決方案及其過程,方便以后參考。下面來一起看看吧。
    2016-12-12
  • tensorflow tf.train.batch之數(shù)據(jù)批量讀取方式

    tensorflow tf.train.batch之數(shù)據(jù)批量讀取方式

    今天小編就為大家分享一篇tensorflow tf.train.batch之數(shù)據(jù)批量讀取方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python 制作自定義包并安裝到系統(tǒng)目錄的方法

    python 制作自定義包并安裝到系統(tǒng)目錄的方法

    今天小編就為大家分享一篇python 制作自定義包并安裝到系統(tǒng)目錄的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • python代碼如何實現(xiàn)余弦相似性計算

    python代碼如何實現(xiàn)余弦相似性計算

    這篇文章主要介紹了python代碼如何實現(xiàn)余弦相似性計算,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • python反轉(zhuǎn)列表的三種方式解析

    python反轉(zhuǎn)列表的三種方式解析

    這篇文章主要介紹了python反轉(zhuǎn)列表的三種方式解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Python pyecharts繪制柱狀圖

    Python pyecharts繪制柱狀圖

    這篇文章主要介紹了Python pyecharts繪制柱狀圖,文章介紹的柱狀/條形圖,通過柱形的高度/條形的寬度來表現(xiàn)數(shù)據(jù)的大小,感興趣的小伙伴一起進入文章學(xué)習(xí)更詳細內(nèi)容吧
    2021-12-12

最新評論