【问题标题】:pdftotext cannot read certain documentspdftotext 无法读取某些文档
【发布时间】:2021-10-18 15:38:41
【问题描述】:

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

【问题讨论】:

标签: python text-mining pdftotext


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 您提供的链接很有用。对于像我这样的 python 新手,我使用了没有 bash 函数的快捷方式。本质上,我只是使用 ''.join(sorted(pdf[0]))[0] == '\n' 检查文档的每一页,并忽略任何包含以 "\x" 开头的字符的文档(已排序在换行符之前,\n)。
猜你喜欢
  • 2015-04-20
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
  • 2018-04-21
  • 2021-11-23
  • 2019-03-08
  • 1970-01-01
  • 2010-10-30
相关资源
最近更新 更多