从 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;精准地修改文本颜色都是一个核心痛点。…