8

我正在努力提取一些无边界表格,如下图所示,这些表格来自 pdf 文件。我已经安装了 python-camelot,如此处所示并且仅适用于带边框的表格。请查看以下详细信息:

平台 - Linux-4.5.5-300.fc24.x86_64-x86_64-with-fedora-24-Twenty_Four

sys - Python 3.6.1(默认,2017 年 5 月 15 日,11:42:04)[GCC 6.3.1 20161221 (Red Hat 6.3.1-1)]

numpy - NumPy 1.15.4

cv2 - OpenCV 3.4.3

骆驼 - 骆驼 0.3.2在此处输入图像描述

4

3 回答 3

12

要改善检测到的区域,您可以增加 edge_tol(默认值:50)值以抵消垂直放置相对较远的文本的影响。较大的 edge_tol 将导致检测到更长的文本边缘,从而改进对表格区域的猜测。让我们使用 500 的值。

>>> tables = camelot.read_pdf('edge_tol.pdf', flavor='stream', edge_tol=500)
>>> camelot.plot(tables[0], kind='contour')
>>> plt.show()
>>> tables[0].df
于 2019-08-01T04:11:32.943 回答
6

Camelot 默认使用 lattice,它依赖于划分单元格的清晰线条。

对于没有行的表,您要使用流:

tables = camelot.read_pdf('your_file_name.pdf', flavor = 'stream')
于 2019-03-06T16:13:40.493 回答
1

另一个可能有帮助的解决方案是table_areas明确设置,例如页面的大小:

# A4 portrait, MediaBox[0 0 595 842]
tables = camelot.read_pdf("filename.pdf", table_areas=["0,842,595,0"])

您可以通过 Camelot 的可视化调试功能找到该区域的大小,或者通过使用文本编辑器打开 PDF 并检查 MediaBox 或 CropBox 尺寸(注意它们不使用相同的坐标约定)。

于 2021-02-09T11:50:26.283 回答