当前位置: 首页 > news >正文

批量提取PDF指定区域内容到 Excel , 根据PDF文件第一行文字来自动重命名v1.3-附思路和代码实现

本次文章更新内容,图片以及扫描的PDF也可以支持批量提取指定区域内容了,主要是通过截图指定区域,然后使用OCR来识别该区域的文字来实现的,所以精度可能会有点不够,但是如果是数字的话,问题不大; 所以最好还是纯电子版本的PDF文件提取效果最好。


需求1:假如我有一批数量比较多的同样格式的PDF电子文档,需要把特定多个区域的数字或者文字提取出来

需求2:我有一批PDF文档,但是文件的名称都是一些乱码,我需要根据PDF文件里面第一页内容的第一行的标题文字来批量重命名这些文件

说明:不适应场景:如果多个PDF文件的需要提取内容的区域的位置不一样,比如我要提取的数字在第一个PDF文件在(30,30)的坐标,结果在第二个文件变成了(35,35)这个坐标,那么软件就会无法很好的提取这个内容文本,所以这个代码的适用范围是多个PDF文档格式一致,并且需要提取的文本信息所在的PDF位置都基本一样的情况下适用。

思路1:我们任意选一个PDF文件作为样本,然后用代码把要提取的区域用方框标注出来,再然后把这些区域的坐标保存下来,后续批量处理每个PDF的时候,就根据保存的这些区域坐标来提取对应位置的文字或者数字

思路示意图:

最后的结果示意图:

这种思路的缺陷和需要注意的点:

1 需要每个批量处理的文件要提取的数据的位置都是一样的,比如第一个PDF文件需要提取的数字位于【100,100】这个坐标,那么后续每个文件需要提取的数字都要位于这个位置,如有变动,就会导致提取不到需要的数据,可以通过扩大区域的坐标范围来一定程度上的解决这个问题

2 如果提取的文字不齐全,说明可能框选的方框略微小了一点,我代码里面设置了一个单独增大某个区域的功能


需求2思路:一批PDF文档的名称都是一些乱码,我需要根据PDF文件里面第一页内容的标题来批量重命名这些文件,实际上很简单,就是解析PDF文件,然后获取第一行的内容,然后重命名该文件即可,这个代码不复杂,就没放在本页了。

代码:

from typing import Optional, Dict, Listfrom solapi.magic_eden.site_api.utils.consts import MEAPIUrls
from solapi.magic_eden.site_api.utils.data import collection_stats_cleaner, collection_info_cleaner, \collection_list_stats_cleaner
from solapi.magic_eden.site_api.utils.types import MECollectionStats, MECollectionInfo, MECollectionMetrics
from solapi.utils.api import BaseApiclass MagicEdenCollectionApi(BaseApi):def get_collection_stats_dirty(self, symbol: str) -> Optional[Dict]:url = f'{MEAPIUrls.COLLECTION_STATS}{symbol}'res = self._get_request(url)return res.get('results') if isinstance(res, dict) else Nonedef get_collection_info_dirty(self, symbol: str) -> Optional[Dict]:url = f'{MEAPIUrls.COLLECTION_INFO}{symbol}'res = self._get_request(url)return res if bool(res) else Nonedef get_collection_stats(self, symbol: str) -> Optional[MECollectionStats]:data = self.get_collection_stats_dirty(symbol)if data:return collection_stats_cleaner(data)def get_collection_info(self, symbol: str) -> Optional[MECollectionInfo]:data = self.get_collection_info_dirty(symbol)if data:return collection_info_cleaner(data)def get_collection_list_stats_dirty(self):url = MEAPIUrls.COLLECTION_LIST_STATSres = self._get_request(url)return res.get('results') if isinstance(res, dict) else Nonedef get_collection_list_stats(self) -> Optional[List[MECollectionMetrics]]:data = self.get_collection_list_stats_dirty()if data:return list(map(lambda x: collection_list_stats_cleaner(x), data))def get_collection_list_dirty(self):url = MEAPIUrls.COLLECTION_LISTres = self._get_request(url)return res.get('collections') if isinstance(res, dict) else Nonedef get_collection_list(self) -> Optional[List[MECollectionInfo]]:data = self.get_collection_list_dirty()if data:return list(map(lambda x: collection_info_cleaner(x), data))

代码下载链接:

链接:https://pan.baidu.com/s/1WQQ8kaDilaagjoK5IrYZzA

提取码:1111

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • qt 返回上级页面
  • Java如何使用 HttpClientUtils 发起 HTTP 请求
  • C++(week11): C++基础 第六章:关联式容器 set、map
  • 2 Java的基本程序设计结构(基本语法1)
  • 外包干了1个月,技术明显退步。。。
  • SparkStreaming--scala
  • Apache访问机制配置
  • 阿里通义音频生成大模型 FunAudioLLM 开源
  • el-popover或el-popconfirm中button不展示问题
  • 从零开始学习c++全套通关系列(第二章)万字总结,建议收藏!
  • 混合贪心算法求解地铁线路调度
  • 结合C++智能指针聊聊观察者模式
  • WPF 框架 Prism IActiveAware接口使用
  • 前端项目本地的node_modules直接上传到服务器上无法直接使用(node-sasa模块报错)
  • boost::regex_replace的使用
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【comparator, comparable】小总结
  • Angular4 模板式表单用法以及验证
  • es6要点
  • Fundebug计费标准解释:事件数是如何定义的?
  • HTTP 简介
  • Python实现BT种子转化为磁力链接【实战】
  • vue.js框架原理浅析
  • win10下安装mysql5.7
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 对象引论
  • 给Prometheus造假数据的方法
  • 给第三方使用接口的 URL 签名实现
  • 京东美团研发面经
  • 聊聊hikari连接池的leakDetectionThreshold
  • 深度解析利用ES6进行Promise封装总结
  • 深入 Nginx 之配置篇
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 学习Vue.js的五个小例子
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #大学#套接字
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (007)XHTML文档之标题——h1~h6
  • (TOJ2804)Even? Odd?
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (算法)大数的进制转换
  • (译) 函数式 JS #1:简介
  • (译)2019年前端性能优化清单 — 下篇
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)Sublime Text3配置Lua运行环境
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET值类型变量“活”在哪?
  • .NET中两种OCR方式对比