如何从历史 PDF 中提取表格?
How do I extract tables from a historical PDF?
我需要从这个 file 中提取格式相似的 table 中的数据。有一些 OCR 错误,但我有一个自动的方法来更正它们。
我试过:
- ABBYY Finereader table 检测。
- Tabula table 提取
- 卡米洛特table提取
- 自定义 python code
问题: 商业工具在检测 table 的边缘方面非常糟糕。 tables 遵循类似的通用格式,但每次扫描的对齐方式略有不同,因此硬编码寄宿生也不起作用。
问题:你们知道检测 table 从哪里开始然后应用几个模板之一的好方法吗?
对于此类工作的任何其他提示,我们将不胜感激。
这里有一个免费的在线工具https://www.pdftron.com/pdf-tools/pdf-table-extraction/
相关博客https://www.pdftron.com/blog/parsing-extraction/table-extraction-and-pdf-to-xml-with-pdfgenie/引用PDFGenie命令行工具
而不是 Camelot table_areas 参数(指定固定边界),您可以尝试使用 table_regions 参数来指定表可能所在的区域(Camelot 只会分析指定的区域以查找表)。
https://camelot-py.readthedocs.io/en/master/user/advanced.html#specify-table-regions
请让我们了解最新动态。
更新 2/26:
我解决了我自己的问题,尽管您可以随时以快速或更好的解决方案做出回应。
其中一个主要问题是 table 的尺寸大致相似,但它们因页面而异。扫描的图像在页面之间也略有偏移,导致 两个对齐问题 。我目前的工作流程解决了这两个问题,如下所示。
Table 类型对齐
解法:
- 使用 ABBYY 中的图像编辑工具水平剪切每一页。这样每页就有一个 table。
- 请注意,有 4 种 table 类型。偶数页和奇数页有不同的布局。每页的第一个 table 包含一个日期字段。
- 这给出 first-table-even,first-table-odd,reg-table-even,reg-table-odd。使用固定的 table 区域和列一次处理一种类型修复了由于 tables 布局差异引起的错位。
图像对齐
相同 table 类型的图像仍未对齐,因此在 (x,y) 坐标中指定 table 布局将不起作用。 tables 位置在每个图像中都不同。
我需要根据 table 位置对齐图像,但没有检测到 table 就没有好的方法。
我以一种有趣的方式解决了这个问题,但我首先尝试了以下步骤。
- 使用 Opencv 检测垂直线。结果:没有很好地检测到微弱的线条。经常会错过行,使其无法对齐。
- 使用 Scan Tailor 检测内容。结果:由于图像中有斑点,检测算法会在某些文件中过多裁剪 table,而在其他文件中会包含白色 space。去斑没有帮助。
- 使用宽 table 区域的 Camelot,无列值。结果:这在其他情况下可能会很好地工作,但 Camelot 在这里倒下了。数据报告到美分,每三位数之间有 spaces。这导致数列中的 00 错位。
解法:
在 Table 类型对齐部分解释了将图像剪切成 table 之后,使用 Photoshop 中的自动对齐图层功能对齐图像。
分步解决方案:
- 打开 Photoshop
- 使用以下方法将一个 table 类型的图像加载到单个文件中:文件-脚本-将文件加载到堆栈中
- 使用:编辑-自动对齐图层
- 使用裁剪工具使每个文件大小相同。
- 将每个图像导出为自己的文件:File-Export-Layers to files
- 对 4 种 table 类型中的每一种使用 ABBYY OCR 编辑器,使用 GUI 编辑器对列和行进行硬编码。
- 从 ABBYY 导出为 CSV
- 使用 clean.py 之类的东西删除 space 和坏字符。
完成!根据需要组合每个 table 的文件。当我完成项目时,我将 post 我的 python 代码用于执行此操作。清理后,我也会 post 数据。
我需要从这个 file 中提取格式相似的 table 中的数据。有一些 OCR 错误,但我有一个自动的方法来更正它们。
我试过:
- ABBYY Finereader table 检测。
- Tabula table 提取
- 卡米洛特table提取
- 自定义 python code
问题: 商业工具在检测 table 的边缘方面非常糟糕。 tables 遵循类似的通用格式,但每次扫描的对齐方式略有不同,因此硬编码寄宿生也不起作用。
问题:你们知道检测 table 从哪里开始然后应用几个模板之一的好方法吗?
对于此类工作的任何其他提示,我们将不胜感激。
这里有一个免费的在线工具https://www.pdftron.com/pdf-tools/pdf-table-extraction/
相关博客https://www.pdftron.com/blog/parsing-extraction/table-extraction-and-pdf-to-xml-with-pdfgenie/引用PDFGenie命令行工具
而不是 Camelot table_areas 参数(指定固定边界),您可以尝试使用 table_regions 参数来指定表可能所在的区域(Camelot 只会分析指定的区域以查找表)。
https://camelot-py.readthedocs.io/en/master/user/advanced.html#specify-table-regions
请让我们了解最新动态。
更新 2/26: 我解决了我自己的问题,尽管您可以随时以快速或更好的解决方案做出回应。
其中一个主要问题是 table 的尺寸大致相似,但它们因页面而异。扫描的图像在页面之间也略有偏移,导致 两个对齐问题 。我目前的工作流程解决了这两个问题,如下所示。
Table 类型对齐
解法:
- 使用 ABBYY 中的图像编辑工具水平剪切每一页。这样每页就有一个 table。
- 请注意,有 4 种 table 类型。偶数页和奇数页有不同的布局。每页的第一个 table 包含一个日期字段。
- 这给出 first-table-even,first-table-odd,reg-table-even,reg-table-odd。使用固定的 table 区域和列一次处理一种类型修复了由于 tables 布局差异引起的错位。
图像对齐
相同 table 类型的图像仍未对齐,因此在 (x,y) 坐标中指定 table 布局将不起作用。 tables 位置在每个图像中都不同。
我需要根据 table 位置对齐图像,但没有检测到 table 就没有好的方法。
我以一种有趣的方式解决了这个问题,但我首先尝试了以下步骤。
- 使用 Opencv 检测垂直线。结果:没有很好地检测到微弱的线条。经常会错过行,使其无法对齐。
- 使用 Scan Tailor 检测内容。结果:由于图像中有斑点,检测算法会在某些文件中过多裁剪 table,而在其他文件中会包含白色 space。去斑没有帮助。
- 使用宽 table 区域的 Camelot,无列值。结果:这在其他情况下可能会很好地工作,但 Camelot 在这里倒下了。数据报告到美分,每三位数之间有 spaces。这导致数列中的 00 错位。
解法:
在 Table 类型对齐部分解释了将图像剪切成 table 之后,使用 Photoshop 中的自动对齐图层功能对齐图像。
分步解决方案:
- 打开 Photoshop
- 使用以下方法将一个 table 类型的图像加载到单个文件中:文件-脚本-将文件加载到堆栈中
- 使用:编辑-自动对齐图层
- 使用裁剪工具使每个文件大小相同。
- 将每个图像导出为自己的文件:File-Export-Layers to files
- 对 4 种 table 类型中的每一种使用 ABBYY OCR 编辑器,使用 GUI 编辑器对列和行进行硬编码。
- 从 ABBYY 导出为 CSV
- 使用 clean.py 之类的东西删除 space 和坏字符。
完成!根据需要组合每个 table 的文件。当我完成项目时,我将 post 我的 python 代码用于执行此操作。清理后,我也会 post 数据。