【问题标题】:Python Camelot borderless table extraction issuePython Camelot无边框表格提取问题
【发布时间】:2019-04-12 01:20:16
【问题描述】:

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

平台 - 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 从此 PDF 中提取表格的代码?
  • @VinayakMehta 代码只不过是下面链接 [github.com/socialcopsdev/camelot] 的示例中给出的代码。我已经尝试了所有可选参数,但似乎都没有。

标签: python-3.x python-camelot


【解决方案1】:

要改善检测到的区域,您可以增加 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

【讨论】:

【解决方案2】:

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

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

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

【讨论】:

  • 这不适用于某些具有隐藏边框的表格
【解决方案3】:

另一个可能有帮助的解决方案是明确设置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 尺寸(注意它们不使用相同的坐标约定)。

【讨论】:

    猜你喜欢
    • 2019-05-28
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多