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

news2024/9/23 11:18:37

本次文章更新内容,图片以及扫描的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, List

from 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 BaseApi



class 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 None

    def 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 None

    def 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_STATS
        res = self._get_request(url)
        return res.get('results') if isinstance(res, dict) else None

    def 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_LIST
        res = self._get_request(url)
        return res.get('collections') if isinstance(res, dict) else None

    def 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1929934.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MobileNet】【模型学习】

MobileNet 模型学习 MobileNet v1 B站视频链接:https://www.bilibili.com/video/BV1i44y1x7hP/关键点: 将常规的卷积,替换成深度可分离卷积。具体为:逐层卷积、逐点卷积。使用 Relu6 替换原先的 Relu。防止在进行 int8 和 float…

LAST_INSERT_ID使用方法-(DM8达梦数据库)

LAST_INSERT_ID使用方法 - DM8达梦数据库 1 示例 11.1 创建表1.2 结果集 2 示例 22.1 创建表2.2 结果集 3 达梦数据库学习使用列表 1 示例 1 1.1 创建表 DROP TABLE AT240715; CREATE TABLE "SYSDBA"."AT240715" ( "ID" INT PRIMARY KEY AUTO_…

leetcode 周赛(406)全AC留念

纪念第一次 leetcode 周赛(406)全AC 1.(100352. 交换后字典序最小的字符串) 题目描述: 给你一个仅由数字组成的字符串 s,在最多交换一次 相邻 且具有相同 奇偶性 的数字后,返回可以得到的 字典序最小的字符串 。 如…

基于mcu固件反汇编逆向入门示例-stm32c8t6平台

基于mcu固件反汇编逆向入门示例-stm32c8t6平台 本文目标:基于mcu固件反汇编逆向入门示例-stm32c8t6平台 按照本文的描述,应该可以在对应的硬件上通实验并举一反三。 先决条件:拥有C语言基础,集成的开发环境,比如&am…

卫星降雨量数据下载及生成栅格分布图(CMORPH)

一、 降雨 nc 数据下载 1. 登录网址(截至到20240712仅有2024年1月的降雨量)https://www.ncei.noaa.gov/products/climate-data-records/precipitation-cmorph 2. 选择对应时间分辨率 8km8km (30 min), 0.250.25 (hourly, daily)(覆盖全球60…

ZStack Cloud 5.1.8正式发布

2024年7月5日,ZStack Cloud正式发布最新版本——ZStack Cloud 5.1.8,涵盖一系列重要功能,以下为您进行详细介绍。 亮点速览 GPU运维管理增强:新增GPU设备统一管理界面;支持GPU工作状态和实时负载监控报警三层网络运维…

校园工会体育报名小程序的设计

管理员账户功能包括:系统首页,个人中心,赛事公告管理,球员管理,球队信息管理,比赛信息,比赛报名管理 微信端账号功能包括:系统首页,比赛信息,比赛报名&#…

Linux多线程编程-哲学家就餐问题详解与实现(C语言)

在哲学家就餐问题中,假设有五位哲学家围坐在圆桌前,每位哲学家需要进行思考和进餐两种活动。他们的思考不需要任何资源,但进餐需要使用两根筷子(左右两侧各一根)。筷子是共享资源,哲学家们在进行进餐时需要…

Linux 网络配置与连接

一、网络配置 1.1 ifconfig 网卡配置查询 ifconfig #查看所有启动的网络接口信息 ifconfig 指定的网卡 #查看指定网络接口信息 1.2 修改网络配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 #ens33网络配置文…

【ASTGCN】模型调试学习笔记--数据生成详解(超详细)

利用滑动窗口生成时间序列 原理图示: 以PEMS04数据集为例。 该数据集维度为:(16992,307,3),16992表示时间序列的长度,307为探测器个数,即图的顶点个数,3为特征数,即流量,速度、平…

车间数据采集网关的工作原理和应用场景-天拓四方

在智能制造日益盛行的今天,车间数据采集作为整个生产流程中的关键环节,其重要性愈发凸显。数据采集网关作为这一环节的核心设备,扮演着承上启下的重要角色。本文旨在深入探讨车间数据采集网关的工作原理和应用场景。 一、数据采集网关的工作…

C++:链表插入排序/删除重复节点题解

插入排序 插入排序的思路很简单,基本都知道。 关键是放在链表中, 1.要建立一个哨兵位,这个哨兵位的下一个节点,始终指向val最小的节点。 2.prev指针作为cur的前一个节点,始终指向val最大的节点。它的下一个节点始终…

玩转HarmonyOS NEXT之IM应用首页布局

本文从目前流行的垂类市场中,选择即时通讯应用作为典型案例详细介绍HarmonyOS NEXT的各类布局在实际开发中的综合应用。即时通讯应用的核心功能为用户交互,主要包含对话聊天、通讯录,社交圈等交互功能。 应用首页 创建一个包含一列的栅格布…

Eureka——Spring Cloud中的服务注册与发现组件

目录 1. 前言2. Eureka的概述2.1 Eureka的核心功能2.2 Eureka的角色与特点2.3 Eureka的使用优势 3. 创建 Spring Cloud 的注册中心3.1 创建一个父项目3.2 创建Spring Cloud的注册中心Eureka 4. 创建服务提供者5. 创建一个消费者Consumer,调用服务提供者Provider 1. …

利用OSMnx进行城市路网数据的速度与通行时间推算及分析

本文还是以广州市路网为例,通过osmmx调用ox.add_edge_speeds(G)时,该函数会遍历图G 中的每条边(即每条街道),并基于一些预设的规则或街道属性(如街道类型、是否为主要道路、是否有速度限制等)来…

netdata 监控软件安装与学习

netdata官网 netdata操作文档 前言: netdata是一款监控软件,可以监控多台主机也可以监控单台主机,监控单台主机时,开箱即用,web ui很棒。 环境: [root192 ~]# cat /etc/system-release CentOS Linux rel…

【qt】正则表达式来判断是否为邮箱登录

正则表达式是用来匹配字符串的神器. 在Qt中我们需要使用到QRegExp这个类 用exactMatch来进行匹配. [] 使用方括号 [] 来定义字符类,表示匹配方括号内的任意一个字符 A-Za-z0-9是字符的匹配范围. 是用于指定字符或字符类出现的次数,常见的如下 *(匹配 0…

树结构添加分组,向上向下添加同级,添加子级

树结构添加分组&#xff0c;向上向下添加同级&#xff0c;添加子级 效果代码实现页面js 效果 代码实现 页面 <el-tree :data"treeData" :props"defaultProps" :expand-on-click-node"false":filter-node-method"filterNode" :ref&…

pico+unity3d手部动画

在 Unity 开发中&#xff0c;输入系统的选择和运用对于实现丰富的交互体验至关重要。本文将深入探讨 Unity 中的 Input System 和 XR Input Subsystem 这两种不同的输入系统&#xff0c;并详细介绍它们在控制手部动画方面的应用。 一、Input System 和 XR Input Subsystem 的区…

有关电力电子技术的一些相关仿真和分析:⑤交-直-交全桥逆变+全波整流结构电路(MATLAB/Siumlink仿真)

全桥逆变+全波整流结构 参数:Vin=500V, Vo=200V, T=2:1:1, RL=10Ω, fs=100kHz, L=1mH, C=100uF (1)给定输入电压,输出电压和主电路参数,仿真研究电路工作原理,分析工作时序; (2)调节负载电阻,实现电流连续和断续,并仿真验证; (3)调节占空比,分析占空比与电…