Python結(jié)合OCR實現(xiàn)從掃描件PDF中提取文本
掃描件 PDF 本質(zhì)是 “圖像集合”(每一頁都是一張圖片),無法直接復制或編輯文本。要提取其中的內(nèi)容,需借助OCR(光學字符識別)技術(shù)。本文將介紹如何通過 Python 結(jié)合 OCR 技術(shù)實現(xiàn)從掃描件 PDF 中提取文本,涵蓋環(huán)境搭建及示例代碼。
一、核心原理
提取 PDF 掃描件的文本的流程可拆解為 3 步:
- PDF 轉(zhuǎn)圖像:將掃描件 PDF 的每一頁拆分為獨立圖像(如 PNG/JPG);
- OCR 識別:用 OCR 工具分析圖像,將其中的文字轉(zhuǎn)換為可編輯文本;
- 結(jié)果保存:將識別后的文本匯總到文件中(如 TXT)。
二、所需工具
要完成OCR PDF 的任務(wù),需安裝以下兩個核心庫,分工明確:
- Spire.PDF for Python: 將 PDF 頁面轉(zhuǎn)換為圖像(輕量、兼容性好)
- Spire.OCR for Python:對轉(zhuǎn)換后的圖像執(zhí)行OCR文本識別 (支持多語言)
安裝命令:
打開終端/命令提示符,輸入以下pip命令,依次安裝兩個庫:
# 安裝PDF轉(zhuǎn)圖像庫 pip install Spire.PDF # 安裝OCR識別庫 pip install Spire.OCR
背景知識:Spire.OCR的用法之前已經(jīng)詳細講解過,可參考:Python利用Spire.OCR for Python實現(xiàn)從圖片中提取文本和坐標
二、PDF文字識別提取步驟
下面我們以 “提取掃描 (圖片型)PDF 中的中文文本” 為例,步驟如下。
步驟1:導入核心模塊
首先導入兩個庫的核心類,后續(xù)所有操作都基于這些模塊:
# 導入Spire.PDF的核心類(用于PDF加載和轉(zhuǎn)圖像) from spire.pdf import * # 導入Spire.OCR的核心類(用于OCR引擎初始化和文本識別) from spire.ocr import *
步驟2:初始化 OCR 引擎(關(guān)鍵配置)
OCR識別的準確率,很大程度取決于引擎的配置—尤其是模型路徑和識別語言,這兩步錯了會直接導致識別失敗。
# 初始化 OcrScanner ocr_scanner = OcrScanner() # 配置 OCR 依賴 config = ConfigureOptions() # 設(shè)置OCR模型路徑 (模型需提前下載,鏈接在另一篇文章) config.ModelPath = "F:\\OCR Model\\win-x64" # 設(shè)置識別語言(支持多語言,如"Chinese"“Japanese”“French”) config.Language = "Chinese" # 將配置應(yīng)用到 OCR 引擎 ocr_scanner.ConfigureDependencies(config)
步驟3:加載 PDF 并轉(zhuǎn)換為圖像
掃描PDF的本質(zhì)是“一頁頁的圖像”,所以需要先把PDF的每一頁拆成獨立圖像(建議用PNG格式,無損壓縮不影響識別):
# 加載目標 PDF 文件
pdf_doc = PdfDocument()
pdf_doc.LoadFromFile("示例.pdf") # 替換為你的PDF實際路徑
# 循環(huán)遍歷PDF的每一頁,轉(zhuǎn)換為圖像并保存
for page_index in range(pdf_doc.Pages.Count):
with pdf_doc.SaveAsImage(page_index) as page_image:
page_image.Save(f"Pdf圖片_{page_index}.png") # 保存為PNG格式,文件名按頁碼命名
# 掃描圖像
ocr_scanner.Scan(f"Pdf圖片_{page_index}.png")
步驟4:OCR識別圖像并保存文本
最后一步,對每個圖像執(zhí)行OCR識別,再將結(jié)果匯總到文本文件中(支持追加寫入,避免覆蓋):
# 從圖像中提取文本
scan_result = ocr_scanner.Text.ToString()
# 將提取的文本追加寫入文件
with open("PDF文本.txt", 'a', encoding='utf-8') as file:
file.write(scan_result + '\n')
輸出結(jié)果:
運行代碼后,你會得到兩個類型的文件:
1.圖像文件:如Pdf圖片_1.png、Pdf圖片_2.png,對應(yīng)PDF的每一頁;

2.文本文件:PDF文本.txt,里面包含每一頁的識別文本,示例如下:

四、常見問題&解決方案
| 常見問題 | 可能原因 | 解決方案 |
|---|---|---|
| OCR識別結(jié)果亂碼/錯字多 | 1. 圖像分辨率低、模糊;2. 語言設(shè)置錯誤;3. 對比度低 | 1. 確保PDF掃描分辨率≥300DPI;2. 核對Language參數(shù)(如中文設(shè)為"Chinese");3. 用圖像工具提升對比度 |
| OCR引擎初始化失敗 | 1. 模型路徑錯誤;2. 模型文件缺失 | 1. 用絕對路徑+原始字符串r"";2. 重新下載完整模型包 |
| PDF加載失敗 | 1. 文件路徑錯誤;2. PDF文件損壞;3. 無讀取權(quán)限 | 1. 檢查路徑是否有空格/特殊字符;2. 用Adobe打開驗證文件完整性;3. 賦予文件“讀取”權(quán)限 |
到此這篇關(guān)于Python結(jié)合OCR實現(xiàn)從掃描件PDF中提取文本的文章就介紹到這了,更多相關(guān)Python提取PDF掃描件文本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python的Flask框架中SQLAlchemy使用時的亂碼問題解決
這篇文章主要介紹了Python的Flask框架中SQLAlchemy使用時的亂碼問題解決,SQLAlchemy與Python結(jié)合對數(shù)據(jù)庫的操作非常方便,需要的朋友可以參考下2015-11-11
TensorFlow實現(xiàn)Batch Normalization
這篇文章主要為大家詳細介紹了TensorFlow實現(xiàn)Batch Normalization,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-03-03
Django打印出在數(shù)據(jù)庫中執(zhí)行的語句問題
這篇文章主要介紹了Django打印出在數(shù)據(jù)庫中執(zhí)行的語句,文中給大家提到了Django 查看執(zhí)行的sql語句方法,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07
Python編譯結(jié)果之code對象與pyc文件詳解
今天小編就為大家分享一篇對Python編譯結(jié)果之code對象與pyc文件的詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-10-10
scikit-learn處理缺失數(shù)據(jù)的方法與實踐
scikit-learn作為Python中廣泛使用的機器學習庫,提供了多種工具和技術(shù)來幫助我們處理缺失數(shù)據(jù),本文將詳細介紹sklearn處理缺失數(shù)據(jù)的方法,并提供實際的代碼示例,需要的朋友可以參考下2024-06-06
基于Python組裝jmx并調(diào)用JMeter實現(xiàn)壓力測試
這篇文章主要介紹了基于Python組裝jmx并調(diào)用JMeter實現(xiàn)壓力測試,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-11-11
Python實現(xiàn)周期性抓取網(wǎng)頁內(nèi)容的方法
這篇文章主要介紹了Python實現(xiàn)周期性抓取網(wǎng)頁內(nèi)容的方法,涉及Python時間函數(shù)及正則匹配的相關(guān)操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-11-11

