HuggingFists: 无代码处理复杂PDF
有过使用LLM搭建RAG或其它类知识系统的朋友一定会对文档数据的复杂多样性有着深刻的理解。各行各业的磁盘中都沉睡了数年到数十年的各类文档信息,包括:Doc、Docx、PPT、PDF、XLS、PNG、JPEG等各类格式。利用LLM激活这些数据价值的首要工作就是能够正确的抽取这些文件中的信息。目前,市场上已经有了不少开箱即用的Rag类工具,这些工具能够很好的抽取绝大多数文件中的内容,对于很多用户来说,已经足够了。但对于存量数据跨越多年的企业,由于数据的复杂性、抽取需求的多样性,这类开箱即用工具预置的文件数据处理流程就变的很难满足需要了。
由于文件处理是一个非常大的话题,我们无法用一篇文章探讨完此类需求。因此,本文我们只尝试简单探讨一下针对复杂PDF处理的场景,特别是在无代码模式下,如何快速处理PDF,提升数据处理的效率。
复杂PDF处理技术选型
复杂PDF处理是一个业界难题,有很多团队都在尝试解决此类问题,并且也都有了一定的成绩。各类方案个有所长,如何选定就变得有些困难。最近一篇《Ilya Rice:我是如何赢得企业 RAG 挑战赛的》的文章大火,里面给出了一个不错的方案–Docling。
Docling 是一个开源的文档解析和转换工具,能高效地将多种格式的文档(包括 PDF、DOCX、PPTX、图片和 HTML)解析,导出为 Markdown 或 JSON 格式。能够对PDF进行OCR、布局分析、表格分析、代码识别等深度理解。互联网上有很多相关资料可以参考,本文就不做赘述了。
于是,HuggingFists整合了Docling技术,帮助使用者应对复杂PDF的解析场景。选用Docling还有一个重要的原因,就是其部分转换功能可以在纯CPU的环境中运行完成。
复杂PDF处理流程
如图所示,在HuggingFists中使用Docling进行复杂PDF处理非常简单,只要一个包含三个算子的流程就可以批量完成复杂PDF文本的转换工作了。由于LLM模型对Markdown格式支持的更完善一些,故而Docling算子将Markdown格式作为了缺省的目标格式。虽然LLM对Json格式的支持也非常完善,但由于它无法保留版式信息,无法直观评价转换效果,故而这里也没有作为首选项。
这是一个将PDF文件批量转换为Markdown文件并存储到文件系统的流程。文件输入算子用于批量选中要处理的PDF文件;Docling算子负责将PDF文件转换为Markdown格式;批量文件输出算子用于将转换后的文件存储到指定的目录。
经过转换后的Markdown文件由于采用了纯文本描述格式,就非常方便进行后续处理了。如在进行RAG系统开发时,为了最大程度的保持文本含义的内聚性,可以对文件按章节切分;如希望单独抽取文件中的表格、图片等信息,也可以在此基础上进一步抽取。我们将在随后的文章中介绍如何完成以上类型的工作。
Docling环境的准备
目前最新版的HuggingFists并不支持Docling,如果希望使用该功能,需要去HuggingFists的算子商城(资源库/算子库/商城)中安装该算子,并在HuggingFists环境中按照如下步骤安装Docling。
-
进入HuggingFists的安装目录,sengee.community.linux
-
在命令行中执行
nerdctl exec -it oyez /bin/sh
进入oyez容器。执行su root命令,输入密码12345678,切换到root用户下 -
在oyez系统中运行
pip install docling
安装docling。如果你的机器能够翻墙,那么打开翻墙通道,安装完成。这里强调能够翻墙是因为docling运行时会根据算子的功能配置去下载对应的模型。而这些模型需要翻墙才能下载。需要注意的是,此时在每次使用Docling算子时,需要对算子中的Python代码部分进行相应的调整。如下图:点击图中Docling算子右上角的配置弹出按钮。在弹出框中找到"Python脚本片段属性"。注释掉代码中红色框标注的2行代码,点击确定即可。这两行代码是为无法下载Docling模型包而预置的模型路径。具体安装方式见步骤4。
-
退出oyez系统。进入sengee.community.linux/moo目录下。下载“https://pan.baidu.com/s/1uoa3UqBfHBX3sCf10bUtog?pwd=1234”的包到当前目录,解压Docling.zip包。该包中包含Docling运行所需的部分模型。对于无法翻墙的用户,运行时无法下载到对应模型。故而无法正常运行Docling。HuggingFists提供的这个压缩包中涵盖了ocr识别,布局识别以及表格识别等多个模型。可以帮助网络条件不足的朋友使用Docling算子。需要注意的是,当前提供的模型中,未包括代码识别和公式识别的模型,如需此类功能需下载对应的模型放在指定的路径下。
结语
Docling内置了很多功能配置项,但是Docling算子只封装了其中的一部分。如果希望调整和配置更多的配置项,可以试着去修改算子的Python脚本片段。这里的脚本片段为实际运行Docling时所需的脚本片段。好了,现在可以使用HuggingFists去自动化处理复杂PDF文档了。