RAG 检索增强生成由2部分构成:一是离线对异构的数据进行数据工程处理成知识,并存储在知识库中,二是基于用户的提问进行知识库的检索增强。如下图所示:
其中最关键的一个环节是 PDF 格式的文件如何提取成知识,下面详细剖析。
1、PDF 文件中文本数据如何提取?
能够处理文本提取的 Python 库有多个,其中较为知名的包括 pdfminer.six、PyMuPDF、PyPDF2 和pdfplumber。在这些库中,PyMuPDF 因其出色的文本提取能力而备受推崇。特别是在处理双栏布局等复杂格式的 PDF文件时,PyMuPDF 能够最大程度地保留 PDF 的阅读顺序,这对于确保文本内容的准确性和完整性至关重要。
下面我们将以双栏布局的 PDF 文件为例,展示使用 PyMuPDF 库进行文字提取的效果。
进行文本提取的代码如下所示:
打印的结果如下所示:
2、PDF 文件中表格数据如何提取?
在处理表格提取任务时,camelot 和 tabula 是两个备受推崇的库。它们各自在提取有线表和少线表(即含有较少分隔线的表格)方面展现出了良好的效果。接下来,我将分别以有线表为例,简要介绍camelot库的使用。
camelot 是一个强大的 Python 库,专门用于从 PDF 文件中提取表格数据。对于有线表,即表格中包含明确分隔线的表格,camelot表现出色。通过指定 PDF 文件路径和表格所在的页面区域,camelot 能够准确地识别并提取出表格中的数据,比如有线表原始数据:
使用 camelot 提取有线表的示例代码如下:
表格数据的打印结果如下所示:
3、扫描 PDF 的文本数据如何提取?
在从扫描的 PDF 文件中提取文本时,使用开源的 PaddleOCR,并且用 PPStructure 做版面的分析。我们还是以下面的 PDF 文件为例,不过这是 PDF 文件的扫描版。
提取文本的代码如下:
得到的结果如下所示:
图中的左边是根据给出的版面分析结果画出来的,可以看出对双栏 PDF 做了正确的解析。右边是根据识别出来的文本以及文本的坐标画出来的,可以看出基本上和左边的版面以及内容是一致的。
原文链接: