我正在寻找一种从 PDF 文件中提取文本和表格的解决方案。虽然某些软件包适合提取文本,但它们不足以提取表格。
一种解决方案是使用 Azure 表单识别器布局模型,但是当我们混合使用文本和表格时,特别是当表格是一种文本格式并且它们将表格和文本的内容混合在一起时,它会失败(请参阅 Azure 表单识别器)代码https://github.com/Azure-Samples/cognitive-services-quickstart-code/blob/master/python/FormRecognizer/rest/python-train-extract.md)。
我也尝试了 pypdf2 和 pdfplumber;这是 pypdf2 的代码:
import PyPDF2
data_path = "directory/to/pdf/files"
texts = []
for fp in os.listdir(data_path):
pdfFileObj = open(os.path.join(data_path, fp), 'rb')
print(pdfFileObj)
#
pdfreader=PyPDF2.PdfFileReader(pdfFileObj)
#
count=pdfreader.numPages
#
text = " "
for i in range(count):
page = pdfreader.getPage(i)
text += page.extractText()
texts.extend([text])
首先,pypdf2 对于某些 pdf 文件来说效果不错,但它会失败并且不会为某些 pdf 文件保留单词之间的空格,例如(来自 https://www.researchgate.net/publication/342920307_Using_Topic_Modeling_Methods_for_Short-Text_Data_A_Comparative_Analysis 的 pdf 文件):
其次,如果页面中存在表格,如何提取表格? pdfplumber 可以使用 extract_text() 和 extract_table() 注释提取文本和表格。它无法为某些文档保留单词之间的空格。当我们有双列 pdf 文件时,它也会失败。
Tabula 是另一种选择,但正如我从他们的网站https://github.com/tabulapdf/tabula 看到的那样,它很好用。我的最终问题是,从给定单列或双列页面的 pdf 文件中提取内容、文本和表格的最佳实践是什么。
答案取决于问题是一般性的还是特定于单一表格的。您的方法对于一般情况来说是合理的,但会有变化。如果您有一个 pdf 表单,它是在每次迭代时使用不同数据创建的单个表单或报告,请考虑将表单从 pdf 转换为 postscript,然后查看是否可以解析 postscript。
有两个实用程序可以执行此操作:pdf2ps 和 pdftops 分别尝试。如果您了解一些后记,这种方法可能会有所帮助。幸运的话,所需的字段可能是简单的文本字符串。值得一试。
Unstructed 提供了一个全面的 Python 库,可以提取 PDF(以及大多数其他文件类型)的文本、图像和表格。