宁阳网站设计,怎样建立自己的网站卖东西,泉州seo代理商,单网页网站内容文章目录 前言发现问题解决方案问题分析大致逻辑 show my code 前言
在使用pdfplumber读取PDF的过程中#xff0c;由于加黑的内容会被莫名其妙的读取两次#xff0c;带来了很大的困扰。这篇文章将给出解决方案。
发现问题
在在使用pdfplumber读取PDF的过程中#xff0c;读… 文章目录 前言发现问题解决方案问题分析大致逻辑 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)解决。