Python Camelot 无边界 table 提取问题

Python Camelot borderless table extraction issue

我正在努力从 pdf 文件中提取一些无边框 table,如下图所示。我已经安装了 python-camelot,如图 here 所示,并且仅适用于带边框的 tables。请查看以下详细信息:

平台 - 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

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

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

tables = camelot.read_pdf('your_file_name.pdf', flavor = 'stream')

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

>>> tables = camelot.read_pdf('edge_tol.pdf', flavor='stream', edge_tol=500)
>>> camelot.plot(tables[0], kind='contour')
>>> plt.show()
>>> tables[0].df

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

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

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