python 中的 Camelot 未按预期运行

Camelot in python does not behave as expected

我有两个 pdf 文档,它们的布局相同,但信息不同。问题是: 我可以完美地阅读一个但是另一个数据无法识别。

这个例子我看的很清楚,下载here:

from_pdf = camelot.read_pdf('2019_05_2.pdf', flavor='stream', strict=False)
df_pdf = from_pdf[0].df


camelot.plot(from_pdf[0], kind='text').show()
print(from_pdf[0].parsing_report)

这是预期的数据帧:

这是一个例子,我看了之后,资料无法识别,下载here:

from_pdf = camelot.read_pdf('2020_04_2.pdf', flavor='stream', strict=False)
df_pdf = from_pdf[0].df


camelot.plot(from_pdf[0], kind='text').show()
print(from_pdf[0].parsing_report)

这是无法识别信息的dataframe:

我不明白我做错了什么以及为什么相同的代码对这两个文件不起作用。我需要一些帮助,谢谢。

问题:格式错误的 PDF


简单地说,问题是您的第二个 PDF 格式不正确/损坏。它不包含正确的字体信息,因此无法按原样从 PDF 中提取文本。这是一个已知的难题(请参阅此 )。

您可以尝试使用 Google 文档打开 PDF 来检查这一点。

Google Docs 尝试提取文本,结果如​​下:.

可能的解决方案


如果要提取文本,可以将文档打印为基于图像的 PDF 并执行 OCR 文本提取。 但是,Camelot does not currently support image-based PDFs,所以无法提取table。

如果您无法恢复格式正确的 PDF,您可以尝试以下策略:

  • 将 PDF 打印为基于图像的 PDF
  • 为基于图像的 PDF 添加一个好的文本层(使用 OCRmyPDF
  • 尝试使用 Camelot 提取 tables