1. 磐创AI首页
  2. Medium

在电光光学字符识别中从pdf中提取表格数据


PDF是非常有用的存储医疗和财务文档的格式。这些文档中的大多数都包含表格,我们需要从其中提取数据以满足业务需求。

我们以前写过关于电光光学字符识别中表检测和提取的内容,而在这篇文章中,我们将更详细地介绍如何从pdf中提取表格数据。Table Detection & Extraction in Spark OCR

电光光学字符识别可以处理可搜索和扫描(图像)的pdf文件。

1.使用电光光学字符识别启动电光会话

import os
from sparkocr import start

在启动电光会话期间,启动功能会显示以下信息:

电光版本:3.0.2星火自然语言处理版本:3.0.1星火光学字符识别版本:3.5.0

2.阅读PDF文档

作为示例,我们将处理带有预算拨备表的PDF文件。让我们将其作为binaryFile读取到dataframe,并使用display_pdf util函数显示内容:PDF file

from sparkocr.transformers import *
from sparkocr.utils display_pdf

3.定义电光光学字符识别管道

为了将PDF的每一页转换成图像,我们可以使用PdfToImage转换器。它是为处理大大小小的pdf而设计的(最多可以处理几个海量页面)。它支持以下功能:PdfToImage

  • 在处理大文档时,将大文档拆分成小PDF,有效利用集群资源。因此,如果需要,我们可以将处理一个大文档分配给所有集群节点。它支持少数拆分策略:拆分策略.FIXED_NUMBER_OF_PARTITIONS和拆分策略.FIXED_SIZE_OF_PARTITION。
  • 拆分后对数据帧进行重新分区,以避免数据帧中出现偏差。当作业的一个任务的处理时间很长时,这可以防止出现这种情况。这样才能更有效地利用资源。
  • 尽快将图像二值化,以减少内存使用和加速处理。
  • 提取每页图像后重新分区数据帧。这还可以防止数据帧中的偏差。

整个表格检测和提取流水线:

# Convert pdf to image
pdf_to_image = PdfToImage()

ImageTableCellsDetector可检测单元格,并支持以下几种算法:

  • CellDetectionAlgos.MORPHOPS可以处理有边框、无边框的表格和组合表。
  • CellDetectionAlgos.CONTOURS只能处理有边框的表,但可以提供更准确的结果。

4.运行管道并显示结果

让我们运行我们的管道并在页面上显示检测到的表:

results = pipeline.transform(pdf_df).cache()


我们可以从REGION字段获得概率分数的表格坐标:

results.select("region").show(10, False)

最后,我们可以显示从表字段检测到的结构化数据:

exploded_results = results.select("table", "region") \
.withColumn("cells", f.explode(f.col("table.chunks"))) \
.select([f.col("region.index").alias("table")] + [f.col("cells")[i].getField("chunkText").alias(f"col{i}") for i in
range(0, 8)]) \

链接

  • 带完整示例的笔记本
  • 电光光学字符识别中的表格检测与提取
  • 在电光光学字符识别研讨会上可以找到更多示例
  • 电光光学字符识别文档

原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/07/22/%e5%9c%a8%e7%94%b5%e5%85%89%e5%85%89%e5%ad%a6%e5%ad%97%e7%ac%a6%e8%af%86%e5%88%ab%e4%b8%ad%e4%bb%8epdf%e4%b8%ad%e6%8f%90%e5%8f%96%e8%a1%a8%e6%a0%bc%e6%95%b0%e6%8d%ae/

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息