pdftotext 无法读取某些文档

pdftotext cannot read certain documents

我目前正在使用 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 并将其从我的分析中删除。

要回答直接的问题,CID 数据有什么不同,所以让我们只看一下每个页面上的一个 object 1。 在这里我选择你的问题的主题,第一个文本包括数字 1 2 9 0,字母 L E G I S A T U R 和其他标题

在这里我们看到好的或坏的它们都存储为相同的字体类型??????+PSOwstnewcspsb,我不清楚,但似乎按照 PSO WeSTern NEW Courier 的方式命名 ???加粗

那么,为什么会有一些像 OCR 那样正确映射而另一些却没有呢?这对我来说是未知的,通常没有明确的押韵或原因,但我们可以看到结果的差异,因为好的结果以可打印的 space (/FirstChar 32/LastChar 116) 开头,而两个都不起作用那些开始(/FirstChar 0/LastChar ## of approx 66)即包括非标准打印范围。然而,这并不表示字体不好,在其他不好的例子中,我看到 /FirstChar 2 暗示字体定义不当。搜索 /FirstChar 的问题是它可能被加密或编码,因此在反汇编之前无法在许多 pdf 中查找。

错误字符的唯一指示是良好的纯文本提取包含无效打印字符。

您说您希望避免使用结构错误的文件,但许多文件可能只有页面的错误部分,有关此问题的更广泛示例,请参见 How to identify likely broken pdf pages before extracting its text?