PDF加粗内容重复读取解决方案

news/发布时间2024/5/15 15:19:58

文章目录

  • 前言
  • 发现问题
  • 解决方案
    • 问题分析
    • 大致逻辑
  • show my code

前言

在使用pdfplumber读取PDF的过程中,由于加黑的内容会被莫名其妙的读取两次,带来了很大的困扰。这篇文章将给出解决方案。

发现问题

在在使用pdfplumber读取PDF的过程中,读取普通内容是完全没有问题的。但是该公司早期PDF并未完全规范的过程中,有些标题加粗了,而有些却没有。加粗的标题将会被读取两次,比如好好的123456,加粗后将会被读取为112233445566。这可不太好。

解决方案

问题分析

首先我们需要明白,加粗的内容只会被连续读取,而不会被随机读取,这一点使得字符串具备了一定的规律。所以循环或者递归都是可行的,只是我们需要记住递归的最大深度为1000

其次我们需要明确,不是所有的连续内容都应该被删除。比如111被读成了111111,那可不能删的只剩下1,这就又和PDF上想要传达的内容不一致了。所以正则表达式也是不能乱用的。

大致逻辑

既然有这些要求,我们就好办了。

我们考虑极端场景:111111。我们就直接先数一数连续重复有几个,然后保留一半就好了。

然后再考虑一般场景:111111222222333333。在处理过程中,实际上也就是相当于把字符串拆成了3份,每份利用极端场景111111的做法去做。

show my code

知道该怎么办了就直接干吧。

虽然我们现在是针对加粗被重复读取的问题,字符串中的每一种字符一定是双数出现,所以简单一点的话就可以这么做:

def drop_duplicates(arr):result, i = [], 0while i < len(arr):count = 1# 计算连续相同元素的数量while i + count < len(arr) and arr[i] == arr[i + count]:count += 1# 保留一半result.extend([arr[i]] * count // 2)i += count  # 处理下一段return ''.join(result)

当然,考虑到并不一定具备跟现在一样完全理想的场景,所以这里也考虑了万一真的有一个数字落单的情况:

def drop_duplicates(arr):result, i = [], 0while i < len(arr):count = 1# 计算连续相同元素的数量while i + count < len(arr) and arr[i] == arr[i + count]:count += 1# 只有一个落单的话,1 // 2 = 0,这就不对了,所以上个保险,最低只能为1result.extend([arr[i]] * max(1, count // 2))i += count  # 处理下一段return ''.join(result)

解决。

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

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

机器学习——正规方程

正规方程的基本介绍 之前我们使用梯度下降算法求代价函数J(θ)的最小值&#xff0c;而梯度下降算法是通过一步步不断地迭代来收敛到全局最小值&#xff0c;如下 而正规方程则是另一种求解J(θ)最小值的方法&#xff0c;并且正规方程不需要通过迭代&#xff0c;而是一次性得到θ…

09、全文检索 -- Solr -- SpringBoot 整合 Spring Data Solr (生成DAO组件 和 实现自定义查询方法)

目录 SpringBoot 整合 Spring Data SolrSpring Data Solr的功能&#xff08;生成DAO组件&#xff09;&#xff1a;Spring Data Solr大致包括如下几方面功能&#xff1a;Query查询&#xff08;属于半自动&#xff09;代码演示&#xff1a;1、演示通过dao组件来保存文档1、实体类…

Midjourney的宁静秘境:遇见内心的平和与美丽

所有的提示词&#xff0c;gzh&#xff1a;七哥的AI日常 在这个充满快节奏和压力的时代&#xff0c;我们时常渴望逃离喧嚣&#xff0c;寻找一处心灵的净土。Midjourney用一系列精心创作的图片&#xff0c;带你踏上一段宁静的心灵之旅&#xff0c;让你在欣赏美女、风景和冥想等元…

【Java EE初阶二十二】https的简单理解

1. 初识https 当前网络上,主要都是 HTTPS 了,很少能见到 HTTP.实际上 HTTPS 也是基于 HTTP.只不过 HTTPS 在 HTTP 的基础之上, 引入了"加密"机制&#xff1b;引入 HTTPS 防止你的数据被黑客篡改 &#xff1b; HTTPS 就是一个重要的保护措施.之所以能够安全, 最关键的…

vue路由详解

vue路由详解 一、路由属性配置说明二、页面跳转&#xff08;1&#xff09;router-link标签跳转&#xff08;2&#xff09; 编程式导航 - JS代码内部跳转&#xff08;3&#xff09;其他常用方法 三、子路由 - 路由嵌套&#xff08;1&#xff09; src/components/Home.vue&#x…

STL - hash

1、unordered系列关联式容器 在C98中&#xff0c;STL提供了底层为红黑树结构的一系列关联式容器&#xff0c;在查询时效率可达到O()&#xff0c;即最差情况下需要比较红黑树的高度次&#xff0c;当树中的节点非常多时&#xff0c;查询效率也不理想。最好 的查询是&#xff0c;进…

二叉树入门算法题详解

二叉树入门题目详解 首先知道二叉树是什么&#xff1a; 代码随想录 (programmercarl.com) 了解后知道其实二叉树就是特殊的链表&#xff0c;只是每个根节点节点都与两个子节点相连而其实图也是特殊的链表&#xff0c;是很多节点互相连接&#xff1b;这样说只是便于理解和定义…

Python中嵌套自定义类型的JSON序列化与反序列化

对于经常用python开发得小伙伴来说&#xff0c;Python的JSON序列化和反序列化功能非常方便和实用。JSON&#xff08;JavaScript Object Notation&#xff09;其实就是一种轻量级的数据交换格式&#xff0c;易于阅读和编写&#xff0c;也易于机器解析和生成。在Python中&#xf…

Mkdocs-Wcowin博客主题

Mkdocs-Wcowin主题 通过主题和目录以打开文章基于Material for MkDocs美化 简洁美观&#xff0c;功能多元化简单易上手&#xff0c;小白配置 教程详细&#xff0c;清晰易懂 展示 感受一下它的简洁美观&#xff1a;Mkdocs-Wcowin主题 主页 文章页 博客页 标签页 简…

webpack的使用(中)

前言&#xff1a;&#xff08;承接webpack的使用(上)&#xff09;在实际开发过程中&#xff0c;webpack 默认只能打包处理以 .js 后缀名结尾的模块&#xff0c;其他非 js 后缀名结尾的模块&#xff0c;webpack 默认处理不了&#xff0c;需要调用 loader 加载器才可以正常打包&a…

启动node服务报错Error: listen EACCES: permission denied 0.0.0.0:5000

启动node服务报错&#xff1a; 解决方案&#xff1a; 将监听端口改成3000或者其他 修改后结果&#xff1a; 参考原文&#xff1a; Error: listen EACCES: permission denied_error when starting dev server: error: listen eacc-CSDN博客

阿里云香港轻量应用服务器是什么线路?

阿里云香港轻量应用服务器是什么线路&#xff1f;不是cn2。 阿里云香港轻量服务器是cn2吗&#xff1f;香港轻量服务器不是cn2。阿腾云atengyun.com正好有一台阿里云轻量应用服务器&#xff0c;通过mtr traceroute测试了一下&#xff0c;最后一跳是202.97开头的ip&#xff0c;1…

DS:循环队列的实现

创作不易&#xff0c;给个三连吧&#xff01;&#xff01; 一、前言 对于循环队列&#xff0c;博主也是源自于一道力扣的OJ题 力扣&#xff1a;循环队列的设置 后来我在网上查过&#xff0c;这个循环队列是有自己的应用场景的&#xff01;&#xff01;并不是出题者为了出题…

【Effective Objective - C】—— block 块

【Effective Objective - C】—— block 块 前言37.理解块的概念块的基础知识块可以捕获变量内联块的用法块的内部结构栈块堆块全局块要点 38.为常用的块类型创建typedef要点 39.用handler块降低代码分散程度协议传值实现异步块实现异步回调操作里的块要点 40.用块引用其所属对…

10、内网安全-横向移动域控提权NetLogonADCSPACKDC永恒之蓝

用途&#xff1a;个人学习笔记&#xff0c;有所借鉴&#xff0c;欢迎指正&#xff01; 背景&#xff1a; 主要针对内网主机中的 域控提权漏洞&#xff0c;包含漏洞探针和漏洞复现利用。 1、横向移动-系统漏洞-CVE-2017-0146&#xff08;ms17-010&#xff0c;永恒之蓝&#xff0…

LabVIEW风力机智能叶片控制系统

​LabVIEW风力机智能叶片控制系统 介绍了一种风力机智能叶片控制系统的开发。通过利用LabVIEW软件与CDS技术&#xff0c;该系统能够实时监测并调整风力机叶片的角度&#xff0c;优化风能转换效率。此项技术不仅提高了风力发电的稳定性和效率&#xff0c;而且为风力机的智能化管…

Vue3-自定义Hooks

Vue3-自定义 Hooks 1. Hooks 定义 官方对自定义 hook 定义&#xff1a;在 Vue 应用的概念中&#xff0c;“组合式函数” (Composables) 是一个利用 Vue 组合式 API 来封装和复用有状态逻辑的函数。 其实 Hooks 本质是一个函数&#xff0c;把 setup 函数中使用的 Composition…

Apache Httpd 常见漏洞解析(全)

一、Apache HTTPD 换行解析漏洞 漏洞编号&#xff1a;CVE-2017-15715 Apache HTTPD是一款HTTP服务器&#xff0c;它可以通过mod_php来运行PHP网页。 其2.4.0~2.4.29版本中存在一个解析漏洞。 在解析PHP时&#xff0c;1.php\x0A将被按照PHP后缀进行解析&#xff0c;导致绕过…

【网络编程】okhttp源码解析

文章目录 配置清单框架结构解析 配置清单 首先了解一下okHttp的配置清单&#xff1a; Dispatcher dispatcher &#xff1a;调度器&#xff0c;⽤于调度后台发起的⽹络请求&#xff0c;有后台总请求数和单主机总请求数的控制。List<Protocol> protocols &#xff1a;⽀持…

VSCODE中使用Django处理后端data和data models

链接&#xff1a; Python and Django tutorial in Visual Studio Code MVC的理解 在实际的程序中采用MVC的方式进行任务拆分。 Model&#xff08;模型&#xff09;负责封装应用程序的数据和业务逻辑部分。Model包含数据结构&#xff0c;数据处理逻辑以及相关的操作方法&#…
推荐文章