写点什么

拯救重复劳动:无代码实现 Markdown 图 & 表抽取

作者:数由科技
  • 2025-07-23
    北京
  • 本文字数:2245 字

    阅读完需:约 7 分钟

拯救重复劳动:无代码实现 Markdown 图&表抽取

在信息爆炸的时代,数据的高效处理能力已成为衡量个人与团队效率的重要标准。Markdown 作为一种轻量级标记语言,因其简洁、易读、易写的特性而广泛应用于技术文档、博客写作以及日常笔记中。在 AI 时代,更是受到了 LLM 的青睐,成为了使用者与 LLM 交互的重要载体之一。

在使用 Markdown 格式的文件训练 LLM 或者搭建 RAG 系统时,更需要的是 Markdown 中的文字信息。而除此外,我们还有一些其他场景类的需求会需要获取 Markdown 中的表格以及图片。比如:我们希望获取 Markdown 中的表格信息,将这些信息整理为一个综合数据表。亦或,我们从 Markdown 中获取特定的人物、物品或其它图片进行知识系统的搭建。当然,按照我们现行的实际状况而言,这类数据可能更多的是存放在 PDF 文件中的。但我们的上一篇文章《HuggingFists: 无代码处理复杂 PDF》有提到,可以将 Markdown 格式作为统一目标格式,其他类型的文件都转换为 Markdown 格式即可。

流程解读

本文我们就介绍下如何使用 HuggingFists 实现无代码的 Markdown 数据抽取。



如图所示,Markdown 图/表抽取算子从前置的文件输入算子中获取所有需要抽取的 Markdown 文件。这些 Markdown 文件来自我们上一个视频的 PDF 转换为 Markdown 格式后的文件。

Markdown 图/表抽取算子在对 Markdown 文件进行抽取后,将结果从三个端口输出,形成了三个处理分支。三个处理分支由上而下,分别是 Markdown 主体文件部分输出处理流程、Markdown 表格数据输出处理流程以及 Markdown 图片数据输出处理流程。

主文件输出

Markdown 主体文件输出处理流程中,输出的 Markdown 文件是用占位符替换了对应的表格以及图片的位置。如果希望还原会原格式,可以通过占位符的名字与表格名、图片名的映射关系进行还原。Markdown 的主体文件没有做更多的处理,只是进行了简单的文本提取,然后输出到了快速结果查看端口。

表格输出

Markdown 的表格处理分支处理流程最为繁琐。这主要是因为 HuggingFists 要求每个算子的输入/输出结构应该都是明确的,方便用户定义流程时明确算子的上下文结构。但由于 Markdown 文中内嵌的表结构各不相同,如果从同一个端口输出,是无法明确表结构的,所以这个端口打破了原有的设计约束,允许从该端口输出各类结构的数据集。但从 HuggingFists 设计界面看,该端口的输出结构没有结构描述,所以此类端口只能在后续对接特定的算子。即该端口后的第三个算子,RowSet2Text(数据集转文本)算子。该算子会将任何结构的数据集转换为一个 csv 或 json 文本。然后,在该算子后的数据集结构就清晰起来了,可以进行后续流程的编排了。在 RowSet2Text 算子前,还有 2 个算子,添加水位线和设置水位线变量算子。这两个算子属于 HuggingFists 中的高级技巧算子。

添加水位线算子用于在流程中添加一个数据集标记,用于完成数据流的状态同步、事务等功能。主要用于协调数据的同步性和一致性,需要详细了解的可以看文档水位线进行了解。添加水位线后,我们添加水位线变量,水位线变量是伴随着水位线在 HuggingFists 中一起流转的。在编排流程时,我们有很多算子输入数据集经过计算后会产生新的数据集结构,原有数据集的信息无法传递给该算子的后续算子。此时,可以使用水位线变量留存此类信息,以便在后续的算子中随时使用。这里使用水位线变量算子是为了留存数据集的名称,该名称由 Markdown 图/表抽取算子抽取的表名组合而成。方便后续使用该名字作为表被转换为文件时的名字。设置水位线变量算子的配置如下:



RowSet2Text 算子后,会将表格转换为一个文本输出。此时,数据集不管输入的表格有多少条数据。输出时,就只有一条数据了。列添加算子会添加一个 streamName 列,该列的值为从水位线变量中获得的 streamName 变量的值,即表格的名字。



由于 streamName 列的名字格式内包含一些其它信息,如:markdown 原文件的名字,表在文件中的序号等,当前流程将表存储为文件时,只希望用表的名字来命名,所以其它字符串信息我们需要删除。由于剪切字符串需要对字符串进行多步处理,流程中使用 Python 脚本算子来完成。Python 算子处理好文件名后,需要将表格生成的文本以文件名进行输出。由于文件写出算子必须接受数据流类型的数据集,而当前的数据集并不符合该结构,所以流程中使用流输入转换器将当前的数据集转换为数据流结构。转换后,使用批量文件输出算子将表格文件写出到指定文件目录。供后续对表格文件分析后使用。

图片输出

Markdown 图片输出处理流程最简单,直接将 Markdown 图/表抽取算子抽取到的图片写出到指定目录。供对图片文件进行后续处理。

结果展示

主文件结果



从上图可以看到,文件中的第三行为一个图片的占位符变量,原文档中的图片被流程抽取出来并替换为了图片名。可使用这个名字与图片实现映射还原。文件中的表名也采用了这种替换方式,限于篇幅这里就不进行展示了。

表格输出




上图展示了 markdown 中表格被输出为一组以.csv 结尾的文件。文件中的内容为 csv 格式的文本。后续,可以继续编写流程将这些 csv 文件插入到对应的数据库表中。

图片输出



上图展示了从 markdown 中抽取出的图片文件列表和其中一张图片的浏览展示。由于图片文件的名字在流程中没有做特殊处理,因此从图中我们看到的图片文件的名字显的有些奇怪。如需处理,可以采用与表格处理流程相同的方式进行抽取。

结语

HuggingFists 提供的无代码 Markdown 自动化抽取能力,简单,易用,能够帮助使用者快速完成数据的整理工作。且使得 Markdown 数据抽取不再是程序员的专属技能,而是每一个知识工作者都可以掌握的能力。它不仅提升了工作效率,更让我们能够专注于创造价值的核心工作。

用户头像

数由科技

关注

还未添加个人签名 2019-03-22 加入

还未添加个人简介

评论

发布
暂无评论
拯救重复劳动:无代码实现 Markdown 图&表抽取_人工智能_数由科技_InfoQ写作社区