将 PDF 数据转换为数据库条目 PlatoBlockchain 数据智能。垂直搜索。人工智能。

将 PDF 数据转换为数据库条目

一些组织和企业依靠 PDF 文档来共享重要文档,例如发票、工资单、财务、工单、收据等。然而,PDF 并不是存储历史数据的首选格式,因为它们无法轻松导出并组织到工作流程中。因此,人们使用信息提取算法将 PDF 和扫描文档数字化为结构化格式,例如 JSON、CSV、表格或 Excel,这些格式可以轻松转换为其他组织工作流程。

在某些情况下,PDF 包含要在不同 ERP、CMS 和其他数据库驱动系统中处理的重要信息。不幸的是,PDF 文档没有简单的 PDF 到数据库功能,并且围绕此任务编写脚本或构建工作流程有点复杂。这就是 OCR 和深度学习 (DL) 算法发挥作用的地方,它们可以从这些 PDF 格式中提取数据并将其导出到数据库中。在这篇博文中,我们将探讨如何使用深度学习技术以及市场上一些流行的 API 来实现这一目标。

什么是 PDF 到数据库转换?

PDF 到数据库转换是将 PDF 中的数据导出到数据库(例如 Postgres、Mongo、MySQL 等)的任务。

假设我们要构建一个 Web 应用程序或 ERP 系统来保存和维护来自不同来源的发票信息。手动将历史发票添加到数据库中是一项艰巨的任务,而且很容易出错。另一方面,使用简单的 OCR 可能无法准确地从发票中提取表格。

这就是先进的人工智能驱动的 PDF 到数据库转换派上用场的地方!

这种人工智能驱动的 PDF 到数据库的转换过程可以自动化吗? - 是的。

在下面的部分中,我们使用计算机视觉和深度学习来检测扫描文档中的表格区域。这些表格进一步以特定的数据格式(例如 CSV 或 Excel)存储,并将直接推送到数据库中。

在讨论这些之前,让我们了解一些 PDF 到数据库检测有用的用例。

PDF 到数据库的不同用例

数据库是在云和本地存储上存储信息的最佳方式。它们允许我们使用简单的查询执行不同的操作和操作。以下是一些可以通过自动 PDF 到数据库转换工作流程进行极大优化的用例:

  1. 网上发票管理: 企业和组织每天都会处理多张发票;他们很难手动处理每张发票。此外,有时,他们会以非数字格式开具和接收发票,这使得它们更难以追踪。因此,他们依赖基于网络的应用程序将所有发票存储在一个地方。 PDF 到数据库转换器可以自动将数据从发票提取到 Web 应用程序。为了有效地自动化这些任务,我们可以运行 cron 作业并将其与 n8n 和 Zapier 等第三方服务集成 - 当扫描并上传新发票时,它可以运行算法并自动将其推送到表中。
  2. 电子商务库存管理t:许多电子商务库存管理仍然通过 PDF 和扫描副本手动输入产品。然而,他们需要将所有数据上传到计费管理软件中,以跟踪所有产品和销售情况。因此,使用表到数据库转换算法可以帮助自动化手动输入并节省资源。此过程通常涉及从扫描文档中扫描库存清单,并根据不同的业务规则和条件将其导出到特定的数据库表中。
  3. 从调查中提取数据:为了收集反馈和其他有价值的信息,我们通常会进行调查。它们为几乎所有参与信息经济的人(从企业和媒体到政府和学术界)提供了重要的数据和见解来源。当在线收集这些数据时,可以轻松根据用户响应提取表数据状态并将其上传到数据库。然而,在大多数情况下,调查答复都是纸质的。在这种情况下,手动收集信息并以数字格式存储它们是非常困难的。因此,依靠表到数据库算法可以节省时间并减少额外成本。

如何将 PDF 中的信息提取到关系型和非关系型数据库?

PDF 文件被视为两种不同的类型:电子生成的和非电子生成的。

  1. 电子 PDF:此扫描 PDF 文档可能在图像后面隐藏了文本;这些也称为电子生成的 PDF。
  2. 非电子 PDF:在这种类型中,我们看到更多内容被硬编码为图像。当您将硬拷贝文档扫描成 PDF 文件时就会出现这种情况。

对于第一种类型(电子生成),我们可以依靠简单的编程语言和框架,例如 Python 和 Java。对于非电子生成的 PDF,我们需要利用具有 OCR 和深度学习的计算机视觉技术。然而,这些算法对于所有表提取算法来说可能并不相同,并且它们需要根据数据类型进行更改以实现更高的准确性。 NLP(自然语言处理)还用于理解表内的数据并在某些情况下提取它们。

另一方面,有两种数据库(关系型和非关系型);每个数据库根据其架构都有不同的规则集。关系数据库是结构化的,这意味着数据以表的形式组织。一些例子包括 MySQL、Postgres 等。

相比之下,非关系数据库是面向文档的,这意味着所有信息都以更多的详细清单顺序存储。在单个构造函数文档中,您将列出所有数据 - 例如 MongoDB。

当文档以电子方式生成时,将 PDF 存入数据库

正如所讨论的,对于电子生成的 PDF,提取表格的过程很简单。这个想法是提取表,然后使用简单的脚本将它们转换或将它们添加到表中。对于从 PDF 中提取表格,主要有两种技术。

技术 #1 流: 该算法根据单元格之间的空白来解析表格,以模拟表格结构——识别不存在文本的位置。它建立在 PDFMiner 的功能之上,即使用边距将页面上的字符分组为单词和句子。在这种技术中,首先,通过根据某些文本的 y 轴位置(即高度)进行粗略猜测来检测行。同一行上的所有文本都被视为同一行的一部分。接下来,将读取器分组并组合在一起作为不同的组以识别表中的列。最后,根据前面步骤中检测到的行和列将表设置在一起。

技术#2 格子: 与流相比,Lattice 更具确定性。这意味着它不依赖于猜测;它首先解析单元格之间已定义行的表格。接下来,它可以自动解析页面上存在的多个表。该技术本质上是通过查看多边形的形状并识别表格单元格内的文本来工作的。如果 PDF 具有可以识别多边形的功能,这会很简单。如果有的话,它似乎有一种方法可以读取其中的内容。然而,事实并非如此。因此,计算机视觉被广泛用于识别这些形状并提取表格的内容。

提取的表格主要以数据帧格式保存。它是最流行的 Python 库 pandas 之一提供的原生数据类型之一。将表数据存储在数据框中有几个优点。它们可以轻松处理、操作并导出为不同的格式,例如 JSON、CSV 或表格。然而,在我们将这些数据框推入表之前,我们应该首先连接到DB-Client数据库,然后迁移表。使用Python等语言,我们可以找到几个可以连接到这些数据源并导出数据的库。

当文档非电子生成时,以 PDF 形式存入数据库

上述技术可能不适用于非电子生成的 PDF,因为此处的数据是通过不同来源手动扫描的。这就是为什么我们将使用 OCR 和深度学习技术从扫描文档中提取数据并将其导出到数据库中。

简而言之,光学字符识别(OCR)是一种特殊工具,可以将扫描文档中的打印字母转换为可编辑文本。为了从文档中识别PDF表格,首先,我们需要识别表格的位置,然后应用OCR从表格单元格中提取数据。以下是如何实现的步骤:

  1. 首先,我们通过应用水平和垂直轮廓来检测线段。
  2. 通过查看所有线的像素强度来检测线之间的线交叉点。如果线像素比其余像素具有更高的强度,则它是两条线的一部分,因此是交点。
  3. 表格的边缘是通过查看相交线的像素强度来确定的。这里,取一条线的所有像素,最外面的线代表表格的边界。
  4. 图像分析被转换为 PDF 坐标,其中细胞被确定。文本根据 x 和 y 坐标分配给单元格。
  5. OCR应用于坐标以提取文本
  6. 提取的文本将根据表格的位置导出到数据框中。

这就是我们如何使用 CV 提取表。然而,这里有一些缺点。这些算法对于大型表格和具有不同模板样式的表格失败。这就是深度学习的用武之地;他们使用一种特殊的神经网络框架从数据中学习并根据学习结果识别相似的模式。在过去的十年中,他们取得了最先进的性能,特别是对于信息提取等任务。现在,让我们看看深度神经网络如何从数据中学习并从任何文档中提取表格。

训练深度神经网络涉及特定的工作流程;这些工作流程通常会根据我们正在使用的数据类型及其模型的性能进行更改。工作流程的第一阶段涉及收集数据并根据我们的模型进行处理。在我们从 PDF 文档中提取表格的情况下,数据集理想情况下应包含非结构化文档。这些文档被转换为图像,作为张量加载,并准备好作为用于训练的数据加载器类。接下来,我们通常定义训练所需的所有超参数。这些通常包括设置模型的批量大小、损失函数、优化器。最后,在预定义模型之上定义或构建神经网络架构。该模型将根据数据进行训练,并根据性能指标进行微调。

以下是训练深度学习模型所涉及的不同步骤的屏幕截图:

典型的机器学习工作流程(来源)

使用Python从pdf中提取数据并将其导出到SQL数据库中

到目前为止,我们已经了解了 pdf 到数据库转换是什么,并讨论了一些有用的用例。本节将使用计算机视觉来实际解决此问题,并检测扫描的 pdf 中的表格并将其导出到数据库中。要继续操作,请确保在本地计算机上安装 Python 和 OpenCV。或者,您可以使用在线 Google Collab 笔记本。

第 1 步:安装 Tabula 和 Pandas

在此示例中,我们将使用 Tabula 和 Pandas 提取表并将其推送到数据库中。让我们通过 pip 安装它们并将它们导入到我们的程序中。

import tabula
import pandas as pd

第 2 步:将表读入 Dataframe

现在,我们将使用 read_pdf tabula 函数可从 PDF 中读取表格;请注意,该库仅适用于电子生成的 PDF 文档。以下是代码片段:

table = tabula.read_pdf("sample.pdf",pages='all',multiple_tables=False)

df = pd.concat(table)

在这里,我们可以看到,首先,我们用来读取PDF文件的内容,我们设置参数 multiple_tables 为 False,因为示例中使用的文档只有一张表。

现在,我们将使用 pandas 将此列表加载到数据框中,您可以使用 type 方法检查表的类型;这将返回一个本地 pandas 数据框。

第 3 步:将 Dataframe 迁移到 Postres

在我们将表推送到数据库之前,首先,我们应该从我们的程序建立到它的连接,我们可以使用 sqlalchemy python 中的客户端。同样,不同的编程语言提供这种数据库客户端,可以直接从我们的程序与数据库进行交互。

在这个程序中,我们将使用 create_engine 让我们连接数据库的方法;确保替换给定字符串中的数据库凭据才能使其正常工作。接下来,我们使用 write_frame 函数将提取的表导出到连接的数据库中。

engine = create_engine('postgresql+psycopg2://username:password@host:port/database')

sql.write_frame(df, 'table_name', con, flavor='postgresql')

就像这样,我们能够将 PDF 中的表格导出到数据库中,这看起来非常简单,因为我们使用了经过简单处理的电子生成的 PDF。为了从非电子生成的表格中提取表格,可以使用以下流行的深度学习技术:

  1. 带代码的论文 – GFTE:基于图的财务表提取
  2. 带代码的论文 – PubTables-1M:建立用于训练和评估表提取模型的通用数据集和指标
  3. TableNet:深度学习模型,用于从扫描的文档图像进行端到端表检测和表格数据提取

输入 Nanonets:用于 PDF 表到数据库转换的高级 OCR

本节将介绍 Nanonets 如何帮助我们以更可定制和更简单的方式对数据库执行表操作。

Nanonets™ 是一种基于云的 OCR,可以帮助您使用 AI 自动执行手动数据输入。我们将有一个仪表板,我们可以在其中基于数据构建/训练我们的 OCR 模型,并以 JSON/CSV 或任何所需的格式传输它们。以下是使用 Nanonets 作为 PDF 文档扫描仪的一些优点。

Nanonets 的亮点之一是服务带来的简单性。无需任何编程背景即可选择这些服务,并利用尖端技术轻松提取 PDF 数据。以下简要概述了将 PDF 转换为数据库是多么容易。

步骤1: 访问 nanonets.com 并注册/登录。

将 PDF 数据转换为数据库条目 PlatoBlockchain 数据智能。垂直搜索。人工智能。

步骤2: 注册后,转到“选择开始”区域,您可以在其中使用预构建的提取器或使用您的数据集自行创建一个提取器。在这里,我们将使用 Invoice 预构建的发票提取器。

将 PDF 数据转换为数据库条目 PlatoBlockchain 数据智能。垂直搜索。人工智能。

步骤3: 上传 PDF 图像,执行数据提取并选择自动提取选项。

将 PDF 数据转换为数据库条目 PlatoBlockchain 数据智能。垂直搜索。人工智能。

:创建一个新的集成MySQL集成,将提取的数据导出到数据库中。或者,您可以根据您选择的数据库选择各种选项。

将 PDF 数据转换为数据库条目 PlatoBlockchain 数据智能。垂直搜索。人工智能。

建立数据连接并单击“添加集成”。这样,每当上传文件时,数据就会被提取并自动上传到数据库中。如果您找不到所需的集成,您始终可以使用 Nanonets API 并编写简单的脚本来完成自动化。

时间戳记:

更多来自 人工智能与机器学习