我目前正在使用以下代码使用pdftotext将PDF文件读取到python中。
import pdftotext
bill_full = []
with open('sample.pdf', "rb") as f:
pdf = pdftotext.PDF(f)
bill = ''
for page in pdf:
bill = bill + page
bill_full.append(bill)前面的代码似乎主要适用于我的完整数据集,但是我似乎遇到了看似随机的错误。前面的代码应用于以下PDF https://legiscan.com/WI/text/AB649/id/456434/Wisconsin-2009-AB649-Introduced.pdf,结果是
2011 − 2012 LEGISLATURE LRB−1478/1 2011 SENATE BILL 27\r\n\r\n\r\n\r\n\r\n March 1, 2011 − Introduced by JOINT COMMITTEE ON FINANCE. Referred to Joint\r\n Committee on Finance.\r\n\r\n\r\n\r\n\r\n1 AN ACT relating to: state finances and appropriations, constituting the\r\n\r\n2 executive budget act of the 2011 legislature.\r\n\r\n\r\n Analysis by the Legislative Reference Bureau\r\n INTRODUCTION\r\n 然而,当应用于其他人时(例如,https://legiscan.com/WI/text/AB408/id/423828/Wisconsin-2009-AB408-Introduced.pdf)我得到了以下字符序列:
\x08\x08\x11 \x06 \x08 \x08 \x1c\x18\x1a\x1b"\x1c\x14#$!\x18 这两个PDF有什么不同?理想情况下,我希望检测出“不可读”的PDF,并将它们从我的分析中删除。
发布于 2021-10-18 20:55:41
为了回答直接的问题,不同的是CID数据,所以让我们看一下每页1上的一个对象。在这里,我选择了您问题的主题,第一个文本包括数字1 2 90,字母L E G I S A T U R和标题中的其他

在这里,我们可以看到好的或坏的它们都以相同的字体类型存储,我不清楚,但似乎是这样命名的: PSO WeSTern新信使?粗体
那么为什么会有一些像OCR正确映射的那样工作,而另一些则不是呢?这对我来说是未知的,而且通常没有明确的节奏或原因,但我们可以看到结果的不同,因为好的开始于可打印空间(/FirstChar 32/LastChar 116),而两个非工作的开始(/FirstChar 0/LastChar ##约为66),即包括非标准打印范围。然而,这并不是一个坏字体的指示器,在其他糟糕的例子中,我看到/FirstChar 2给出了一个定义不好的字体的提示。搜索/FirstChar的问题是它可能是加密的或编码的,因此在分解之前不可能在许多pdfs中查找。
坏字符的唯一好的指示是好的纯文本提取包含无效的打印字符。
您说您希望避免具有错误结构的文件,但许多文件可能只包含页面的错误部分,有关此问题的更广泛示例,请参阅How to identify likely broken pdf pages before extracting its text?
https://stackoverflow.com/questions/69618856
复制相似问题