文档处理之10种PDF解析工具测评:兼看知识图谱遇见Chart图表的有趣实现思路

文摘   2024-10-20 11:52   北京  

今天是2024年10月20日,星期日,北京,天气晴。

我们来围绕文档智能这个方向,一个是10种PDF解析工具+6种不同文档类别的测试分析,这个有好落地,能够给出一些具有参考意义的工具。

另一个是关于图表跟知识图谱的结合,ChartKG,其中对于知识图谱的设计、图表要素的抽取以及下游应用的设计,都很有想法,读下来都不错,会有收获。

供大家一起参考并思考。

一、10种PDF解析工具+6种不同文档类别的测试分析

再看看pdf文档的解析工具综述,也是目前大家谈的重点,《A Comparative Study of PDF Parsing Tools Across Diverse Document Categories》,https://arxiv.org/abs/2410.09871,这个工作评估和比较10种流行的PDF解析工具在6种不同文档类别上的表现,这些工具包括PyPDF、pdfminer.six、PyMuPDF、pdfplumber、pypdfium2、Unstructured、Tabula、Camelot以及基于深度学习的工具Nougat和Table Transformer(TATR)。研究使用了DocLayNet数据集,该数据集包含了超过80,000个手动标注的文档,涵盖了金融报告、手册、科学文章、法律和法规、专利和政府招标等类别。

可以看看一些有趣的结论:

1、对比的现有工具

工具包括PyPDF、pdfminer.six、PyMuPDF、pdfplumber、pypdfium2、Unstructured、Tabula、Camelot

以下是10个PDF解析工具的地址:

1)PyPDF: PyPDF是一个纯Python库,能够拆分、合并、裁剪和转换PDF文件的页面。它还可以从PDF中检索文本和元数据:https://github.com/py-pdf/pypdf

2) pdfminer.six: pdfminer.six是一个基于PDFMiner项目的增强版,用于从PDF文档中提取文本和结构信息:https://github.com/pdfminer/pdfminer.six

3) PyMuPDF: PyMuPDF提供Python绑定到MuPDF库,用于处理PDF和其他格式的文档:https://github.com/pymupdf/PyMuPDF

4)pdfplumber: pdfplumber是一个基于pdfminer的工具,可以提取PDF中的文本和表格:https://github.com/jsvine/pdfplumber

5)pypdfium2: pypdfium2是一个绑定到PDFium库的工具,能够提取文本和图像:https://github.com/pypdfium2-team/pypdfium2

6) Unstructured: Unstructured是一个Python库,用于从图像和文本文档中提取数据:https://github.com/Unstructured-IO/unstructured

7)Tabula: Tabula是一个工具,用于从PDF文件中提取表格数据:https://github.com/tabulapdf/tabula

8) Camelot: Camelot是一个Python库,专门用于从PDF文件中提取表格:https://github.com/camelot-dev/camelot

9)Nougat: Nougat是一个基于Transformer模型的工具,可以处理PDF文档并将它们转换为MultiMarkdown格式:https://github.com/facebookresearch/nougat

10)Table Transformer (TATR): TATR是一个基于Transformer的模型,专门用于表格检测:https://github.com/bobSmock/pubTables

2、相关数据集

从PDF中提取信息的常用数据集,详细说明了各种类型的基准真实元素(GTE),包括参考文献(R)、带有布局细节的全文(FT)和表格(T)。这些基准真实元素是通过使用XML或LaTeX文件自动生成的,或者通过人工干预手动生成的。

3、评估结论

以下是不同PDF解析工具的对比结论,可参考,

首先,文本提取能力方面,PyMuPDF和pypdfium在金融、法律、手册和招标类别的文档中表现较好,但在科学和专利类别的文档中所有工具都遇到了挑战。 对于科学文档,基于学习的Nougat工具在文本提取方面表现更优,尤其是在处理包含复杂数学公式的文档时。

其二,表格检测能力方面,TATR(Table Transformer)在金融、专利、法律和科学类别中表现出色,而在手册和招标类别中,PyMuPDF和Camelot表现更好。规则基础的解析工具在表格检测方面表现不佳,尤其是在面对复杂或非标准表格布局时。

其三,规则基础与学习基础方法方面,规则基础方法(如PyMuPDF和pdfplumber)在处理结构相对简单的文档时表现良好,但在处理科学和专利文档时,学习基础方法(如Nougat和TATR)由于其能够处理更复杂的布局和结构,表现更优。

其四,特定类别的挑战方面,科学文档中的数学公式和专利文档中的图像或图表对规则基础解析工具来说是一个挑战,这些工具通常无法准确提取这些元素。基于学习的方法能够更好地处理这些复杂的元素,但可能需要更多的计算资源和训练数据。

其五,在评估指标选择方面,可以使用F1分数、BLEU分数和局部对齐分数等多种评估指标来全面评估文本提取的质量,这些指标考虑了词序、单词识别、段落对齐和表格识别等多个因素。

最后,在工具的适用性方面,选择合适的工具需要考虑文档类型和特定任务的需求。例如,对于需要保持文档结构的任务,可能会优先选择BLEU分数高的工具,如PyMuPDF。对于需要全面信息捕获的任务,可能会选择召回率更高的工具。

二、知识图谱遇见Chart图表的有趣工作

读到一个有趣的工作,《ChartKG: A Knowledge-Graph-Based Representation for Chart Images》,https://arxiv.org/abs/2410.09761,介绍了一个名为ChartKG的知识图谱表示方法,用于建模图表图像中的实体和关系。

ChartKG通过定义四种类型的实体和三种类型的关系,有效地表示了可视化中的语义信息。为了实现这种表示,还开发了一个名为chart-to-KG转换的框架,该框架整合了ResNet、YOLOv5、OCR和基于规则的方法,将基于位图的可视化转换为知识图谱。

先看成品: 四种类型图表的知识图谱表示示例。(a) 条形图;(b) 折线图;(c) 饼图;(d) 散点图,如下

接着,来看几个有趣的点:

1、基于ChartKG的示例应用,能用来做什么

主要有两个:语义感知的图表检索(Semantic-aware Chart Retrieval)和图表问题回答(Chart Question Answering)。

1)语义感知的图表检索(Semantic-aware Chart Retrieval)

旨在提供一种图表检索方法,能够根据用户的偏好和需求,从大量的图表中检索出符合特定语义要求的图表。

具体实现上, 用户首先根据需要输入图表的类型、关键实体以及实体之间的关系。系统根据用户的输入,通过条件过滤来检索图表。具体步骤在于,用户以特定的句子格式指定图表类型、关键实体和实体间的关系。系统根据指定的图表类型过滤数据集,然后通过变量字典匹配用户输入的变量和变量名,进一步缩小目标图表的范围,最后,在满足上述条件的图表知识图中匹配编码关系,最终筛选出符合用户要求的图表。

2)图表问题回答(Chart Question Answering)

旨在通过ChartKG增强视觉问题回答(VQA)任务,使其能够更准确地回答关于图表的问题。

如图4. ChartKG驱动的图表检索的示例结果。(a) 展示了数据变量检索的结果,其中突出显示了满足查询要求的关键词。(b) 描述了结合数据变量和视觉洞察检索的结果,并在图表下方显示了相关的实体和关系。

在具体实现上,利用ChartKG的知识结构,设计了三个问题模板,分别针对数据比较、视觉编码查询和视觉洞察推理。过图基检索和推理,执行知识图谱中的问答过程。具体步骤包括:通过匹配关键词确定问题的类型,然后利用知识图谱匹配问题中的关键词,定位必要的实体。最后 ,根据问题类型对应的搜索规则进行知识搜索,并应用推理规则找到答案。

2、再看知识图谱是怎么做的

ChartKG的构建是一个将图表图像转换成知识图谱表示的过程。这个过程涉及到多个步骤,包括图表分类、图表解析和知识图谱构建,将图表图像中的视觉元素和语义信息转换为结构化的知识图谱,为后续的图表分析和理解任务提供语义信息和可解释性。

如图1所示,将图表图像转换为所提出的知识图谱表示的框架概述。首先使用卷积神经网络(CNN)检测输入图像以进行图表分类。然后,引入对象识别和光学字符识别(OCR)来解析图表,并开发了一种基于规则的方法来构建图表图像的最终知识图谱。

1)图表分类(Chart Classification),确定输入图表图像的类型,如条形图、折线图、饼图和散点图等。在实现上,使用预训练的深度学习模型ResNet50对图表进行分类。

2)图表解析(Chart Parsing),从图表中提取视觉元素和文本信息,在实现上,结合对象识别和光学字符识别(OCR)技术。

具体的,在对象识别上 ,使用YOLOv5模型检测图表中的元素,如条形、线条、颜色标记和文本等。针对不同类型的图表,训练不同的对象检测模型以提高可扩展性。

然后进行光学字符识别(OCR): 使用Tesseract OCR引擎从图表中提取文本信息,如标题、轴标签等。最后进行图形标记解析: 根据不同类型图表的特点,解析图形标记(如条形图的条形、折线图的线段、饼图的扇区和散点图的点)的颜色、大小和位置等信息。

3)知识图谱构建(Knowledge Graph Construction),将解析出的图表元素和关系构建成知识图谱

在实现上,线进行实体分类(Entity Classification): 将解析出的图表元素归类为不同的实体类型,如视觉元素(VE)、视觉元素属性值(VEPV)、数据变量(DV)、数据变量值(DVV)和视觉洞察(VI),如图2所示,

然后进行关系构建(Relationship Construction): 定义并构建实体之间的关系,包括视觉属性对应关系、数据变量对应关系、视觉编码映射和视觉洞察对应关系。

这个关系包括视觉属性对应关系: 连接视觉元素与其属性值,如条形的高度或颜色;数据变量对应关系: 连接数据变量与其值,如“年份”变量与“2011”值;视觉编码映射: 表示数据变量或其值如何被编码为视觉元素的属性,如条形的高度表示数据值;视觉洞察对应关系: 表示数据变量和值之间的视觉洞察,如趋势或比较。

这个工作很有趣,想法很不错,是个结合的工作,但是也存在一些问题,尤其是戏落地过程中,图表到知识图谱的转换框架中,使用了不同的技术进行图表分类、对象识别和光学字符识别(OCR),这些存在着经典的piepline级联错误传播问题,并且为了做这个,其实还蛮耗费硬件资源的。

总结

本文主要介绍了两个工作,还是围绕文档智能这个方向,一个是10种PDF解析工具+6种不同文档类别的测试分析,这个有好落地,能够给出一些具有参考意义的工具。

另一个是关于图表跟知识图谱的结合,ChartKG,其中对于知识图谱的设计、图表要素的抽取以及下游应用的设计,都很有想法,读下来都不错,但跟落地还是两码事。

多思考,多看,批判性的看问题,总会有所收获。大家一起加油

参考文献

1、https://arxiv.org/abs/2410.09871

2、https://arxiv.org/abs/2410.09761

关于我们

老刘,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。

对大模型&知识图谱&RAG&文档理解感兴趣,并对每日早报、老刘说NLP历史线上分享、心得交流等感兴趣的,欢迎加入社区,社区持续纳新。

加入会员方式:关注公众号,在后台菜单栏中点击会员社区->会员入群加入


老刘说NLP
老刘,NLP开源爱好者与践行者。主页:https://liuhuanyong.github.io。老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
 最新文章