如何使用 OCR 提取掃描件 PDF 的文本(Python 實現)

從 PDF 中提取文本一直是很多人的需求。市面上的工具雖然能處理大部分數字 PDF,但遇到掃描件 PDF 時往往無能為力,想要直接復制或獲取其中的文字并不容易。其實這個問題并不是沒有解法 —— 本文將帶你了解如何借助 Python + OCR 技術,從掃描 PDF 中提取可編輯文本

為什么提取掃描件 PDF 需要用到 OCR 技術

在探討如何從掃描件 PDF 中提取文本之前,我們先來了解一下 OCR 技術 及其重要性。

OCR(Optical Character Recognition,光學字符識別),是一種將圖像或視頻中的文字內容轉化為可編輯文本的技術。它不僅能識別字符,還能保留一定的排版信息,因此被廣泛應用在文檔數字化、檔案管理以及數據提取等場景中。

為什么提取掃描件 PDF 的文本離不開 OCR?原因在于 PDF 文件主要分為兩類:

  • 標準 PDF(數字 PDF):文檔中的文字是以字符形式存儲的,可以直接復制、搜索和提取。
  • 掃描件 PDF:內容本質上是圖片,不包含可識別的文本信息,傳統的提取方法無法處理。

因此,當面對掃描件 PDF 時,OCR 技術就顯得尤為必要,它能幫助我們將圖片中的文字識別出來,轉換為真正可操作的文本。

安裝必要的 Python 庫

在了解了基礎知識之后,我們進入到 工具準備環節。本文將主要使用兩款庫:Spire.PDF for Python 和 Spire.OCR for Python。有了它們,處理掃描件 PDF 并提取文本會變得高效而簡單。

  • Spire.PDF:負責將掃描件 PDF 轉換為適合 OCR 處理的圖片。
  • Spire.OCR:對這些圖片進行文字識別,并輸出可編輯的文本內容。

它們的安裝方式十分便捷,只需在命令行中運行以下命令:

pip install spire.pdf
pip install spire.ocr

除了使用 pip 安裝外,你也可以前往 E-iceblue 官網 下載相應的安裝包并手動安裝。

通過 Python 將 PDF 轉換為圖像

正如前面提到的,OCR 無法直接處理 PDF 文件,尤其是掃描件 PDF。因此,第一步我們需要先將其轉換為圖片。借助 Spire.PDF,這個過程十分簡便:只需加載 PDF 文檔,遍歷頁面,然后調用 PdfDocument.SaveAsImage() 方法,就能將每一頁保存為圖像文件。

在保存時,你還可以根據需求選擇 PNG、JPG 或 BMP 等常見格式。下面的示例代碼演示了如何使用 Python 將掃描件 PDF 轉換為 PNG 圖片:

from spire.pdf import *# 加載 PDF 文件
pdf = PdfDocument()
pdf.LoadFromFile("E:/Administrator/Python1/input/AI繪畫的利與弊.pdf")# 遍歷 PDF 頁面
for i in range(pdf.Pages.Count):# 將每一頁轉換為圖像with pdf.SaveAsImage(i) as image:# 保存圖像image.Save(f"E:/Administrator/Python1/output/pdftoimage/ToImage_{i}.png")# image.Save(f"Output/ToImage_{i}.jpg")# image.Save(f"Output/ToImage_{i}.bmp")pdf.Close()

Python 將 PDF 轉換為 PNG 圖片

OCR 識別并提取掃描件 PDF 中的文本

完成 PDF 轉圖片 的步驟后,我們就可以進入核心環節——使用 OCR 掃描圖片并提取文字。借助 OcrScanner.Scan() 方法,這個過程非常簡單。它不僅能夠從圖片中獲取文本,還支持包括 中文、英文、法語 在內的多種語言識別,可以做到“一字不落”。

下面的示例演示了如何在 Python 中調用 OCR,對前一步生成的 PDF 圖片進行文字識別,并將結果保存為 .txt 文檔:

from spire.ocr import *# 創建 OCR 掃描器實例
scanner = OcrScanner()# 配置 OCR 模型路徑和語言
configureOptions = ConfigureOptions()
configureOptions.ModelPath = r'E:/DownloadsNew/win-x64/'
configureOptions.Language = 'Chinese'
scanner.ConfigureDependencies(configureOptions)# 使用 OCR 掃描圖片
scanner.Scan(r'E:/Administrator/Python1/output/pdftoimage/ToImage_0.png')# 將提取的文本保存為文本文件
text = scanner.Text.ToString()
with open('E:/Administrator/Python1/output/掃描件PDF文本提取.txt', 'a', encoding='utf-8') as file:file.write(text + '\n')

OCR 提取掃描件 PDF 中的文本

結論

通過本文的示例,我們完成了從掃描件 PDF 轉換為圖片,再利用 OCR 技術識別并提取文本的全過程。借助 Spire.PDF for Python 和 Spire.OCR for Python,這一流程不僅簡單高效,而且對多語言的支持也非常友好。如果你也在尋找快速處理掃描件 PDF 的方法,不妨嘗試一下這兩個庫。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/98857.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/98857.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/98857.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Deepin/UOS系統中開啟和配置SSH服務

文章目錄一、安裝SSH服務二、啟動并設置開機自啟三、配置SSH服務(可選)四、配置防火墻(若開啟)五、測試SSH連接注意事項在Deepin系統中開啟和配置SSH服務可以按照以下步驟進行: 一、安裝SSH服務 Deepin基于Debian&am…

敏捷適合短期項目還是長期項目

在項目管理領域,敏捷方法因其靈活性和快速響應特性而廣受歡迎。敏捷既適合短期項目,也能應用于長期項目,但兩者的實施重點不同:短期項目側重于快速交付和驗證價值,長期項目則依靠迭代和持續改進確保復雜目標逐步實現。…

springboot+python+uniapp基于微信小程序的旅游服務系統景點信息展示 路線推薦 在線預約 評論互動系統

目錄技術棧介紹具體實現截圖系統設計研究方法:設計步驟設計流程核心代碼部分展示研究方法詳細視頻演示試驗方案論文大綱源碼獲取/詳細視頻演示技術棧介紹 Django-SpringBoot-php-Node.js-flask 本課題的研究方法和研究步驟基本合理,難度適中&#xff0…

保證消息的可靠性

圖示以RabbitMQ為例,RabbitMQ server 包含多個vhost,而vhost主要是分為 exchanges 和 queues。 消息的可靠性分為以下幾步: 生產者投遞的可靠性; a. 消息投遞到exchange時,成功和失敗都會從回調接口中返回。 b. 消息從…

illustrator-06-貓頭鷹

導入素材:【文件-置入】若:【文件-打開】的方式填色,描邊功能會失效ctrl2鎖定為背景畫圓和三角形選擇三角形-雙擊鏡像工具-垂直-復制全選-窗口-路徑查找器-聯集兩個正圓聯集

家庭飲用水消費新趨勢:預付返還模式下的用戶增長與隱憂

大家好,我是銀子,一直將目光聚焦于傳統行業轉型發展的軟件開發。今天咱們來聊聊近期在市場上熱度頗高的青藍送水商業模式。它以“免費送水”為核心策略,宣稱能讓用戶“喝水不花錢”,推廣者“分享可獲利”。這聽起來很美好&#xf…

前沿探索:RISC-V 架構 MCU 在航天級輻射環境下的可靠性測試

摘要隨著商業航天和高可靠應用需求的蓬勃發展,空間輻射環境對電子設備的可靠性和穩定性構成嚴峻挑戰,單粒子效應和總劑量效應是半導體器件在太空環境中面臨的主要輻射威脅,半導體器件的抗輻射能力成為決定其在嚴苛太空環境下可靠運行的關鍵因…

漫談《數字圖像處理》之邊緣檢測與邊界預處理的辨析

在數字圖像處理中,邊緣檢測與邊界預處理常因均圍繞 “圖像邊緣” 展開而被混淆。事實上,二者分屬不同技術范疇 ——邊緣檢測是圖像分割的核心環節,邊界預處理是特征提取的前置步驟,雖處理對象存在關聯,但目標定位、技術…

CSS 居中

<div class"father"><div class"child"></div> </div>1. Flex&#xff08;推薦&#xff09;.father{width: 300px;height: 300px;background-color: red;display: flex; /* flex 方法 */justify-content: center; …

MySQL數據庫-03(字段的約束)

字段的約束&#xff08;一&#xff09;常用約束介紹&#xff08;二&#xff09;創建帶約束字段的語法格式&#xff08;三&#xff09;主鍵與自增長&#xff08;四&#xff09;非空&#xff08;五&#xff09;唯一&#xff08;六&#xff09;默認值&#xff08;一&#xff09;常…

【數據可視化-112】使用PyEcharts繪制TreeMap(矩形樹圖)完全指南及電商銷售數據TreeMap繪制實戰

&#x1f9d1; 博主簡介&#xff1a;曾任某智慧城市類企業算法總監&#xff0c;目前在美國市場的物流公司從事高級算法工程師一職&#xff0c;深耕人工智能領域&#xff0c;精通python數據挖掘、可視化、機器學習等&#xff0c;發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN…

Linux下編譯MMCV

介紹 MMCV 有兩個主要版本&#xff0c;mmcv 和 mmcv-lite。 mmcv 是全面版本&#xff0c;包含所有的特性以及豐富的開箱即用的 CUDA 算子&#xff0c;但構建時間較長&#xff1b;mmcvlite 是精簡版&#xff0c;不包含 CUDA 算子&#xff0c;但擁有其他所有功能&#xff0c;適…

Spring Boot 分布式事務常見問題:Seata、XA 與本地消息表對比

一、前言在單體應用中&#xff0c;事務一般由關系型數據庫本身來保證&#xff0c;通過 ACID 特性實現數據一致性。但隨著微服務架構的普及&#xff0c;應用被拆分為多個獨立服務&#xff0c;數據可能分散在不同數據庫、不同存儲引擎中&#xff0c;傳統的單機事務無法再覆蓋。這…

Transporter App 使用全流程詳解:iOS 應用 ipa 上傳工具、 uni-app 應用發布指南

在 iOS 應用開發與發布過程中&#xff0c;Transporter App 是蘋果官方提供的一款上傳工具&#xff0c;專門用于將 ipa 文件 或 應用資源 上傳到 App Store Connect。 與 Xcode 上傳 相比&#xff0c;Transporter 更加穩定&#xff0c;尤其適合大文件上傳&#xff0c;因此在 iOS…

計算機畢業設計 基于Hadoop的B站數據分析可視化系統的設計與實現 Python 大數據畢業設計 Hadoop畢業設計選題【附源碼+文檔報告+安裝調試】

博主介紹&#xff1a;?從事軟件開發10年之余&#xff0c;專注于Java技術領域、Python、大數據、人工智能及數據挖掘、小程序項目開發和Android項目開發等。CSDN、掘金、華為云、InfoQ、阿里云等平臺優質作者? &#x1f345;文末獲取源碼聯系&#x1f345; &#x1f447;&…

使用自定義LLM和Embedding模型部署Vanna:基于RAG的Text-to-SQL生成

使用自定義LLM和Embedding模型部署Vanna&#xff1a;基于RAG的Text-to-SQL生成 說明&#xff1a; 首次發表日期&#xff1a;2024-07-12Vanna Github地址&#xff1a; https://github.com/vanna-ai/vannaVanna官方文檔&#xff1a; https://vanna.ai/ 部署Vanna時我們可以選擇使…

Linux多線程概念

背景知識內存管理OS進行內存管理不是以字節為單位的&#xff0c;而是以內存塊為單位的&#xff0c;默認大小為4kb&#xff1b;系統和磁盤文件進行IO交互的單位是4kb&#xff08;8個扇區&#xff09;&#xff1b;OS對內存管理實質上是對頁框進行管理。頁框&#xff08;Page Fram…

【Problem】動態規劃之跳躍游戲系列

一、跳躍游戲 55. 跳躍游戲 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/jump-game/description/?envTypeproblem-list-v2&envIddynamic-programming class Solution { public:bool canJump(vector<int>& nums) {// 狀態定義&#x…

射頻EVM

EVM&#xff08;Error Vector Magnitude&#xff0c;誤差矢量幅度&#xff09;是衡量無線通信系統中調制質量的重要指標&#xff0c;尤其用于評估信號的調制誤差和系統性能。它通常用來表示傳輸信號與理想信號之間的偏差&#xff0c;特別是在數字通信中。EVM的基本概念&#xf…

Java 更改 Word 文檔中文本顏色

在日常的自動化文檔處理中&#xff0c;我們經常會遇到需要對 Word 文檔內容進行編程修改的需求&#xff0c;其中一項常見且重要的操作就是更改文本的顏色。無論是為了突出重點、統一品牌風格&#xff0c;還是實現動態內容展示&#xff0c;精準地修改文本顏色都是一個核心痛點。…