Type something to search...
RAG/LLM 和 PDF:使用 PyMuPDF 转换为 Markdown 文本

RAG/LLM 和 PDF:使用 PyMuPDF 转换为 Markdown 文本

以Markdown文本格式输入数据可以提高生成文本的质量

介绍

大型语言模型(LLMs)检索增强生成(RAG)环境中,以markdown文本格式输入数据具有重要意义。以下是一些详细考虑因素。

LLMs 是强大的语言模型,可以生成连贯且具有上下文相关性的文本。然而,它们有时可能会产生缺乏事实准确性或上下文的响应。通过结合基于检索的方法(如RAG),我们可以提高生成文本的质量。

RAG 使得将外部数据——在LLM的训练数据中之前缺失的数据——整合到文本生成过程中成为可能。这种包含减少了“幻觉问题”,并增强了文本响应的相关性。

为什么选择 Markdown 用于 LLM?

Markdown 是一种轻量级标记语言,允许用户使用简单的语法格式化纯文本。它广泛用于创建结构化文档,特别是在 GitHub、Jupyter 笔记本和各种内容管理系统上。当将数据输入到 LLM 或 RAG 系统时,使用 Markdown 格式提供了几个好处:

  1. 结构化内容:Markdown 允许您将信息组织成标题、列表、表格和其他结构化元素。这种结构有助于更好地理解和上下文保留。
  2. 富文本:Markdown 支持基本格式,如粗体、斜体、链接和代码块。在输入数据中包含富文本可以增强语言模型的上下文。
  3. 嵌入链接和引用:Markdown 允许您嵌入超链接、脚注和引用。在 RAG 场景中,这对于引用外部来源或提供额外上下文至关重要。
  4. 易于创作:Markdown 具有可读性,易于编写。作者可以高效地创建内容,而无需复杂的格式化工具。
  5. 分块:对于 RAG 系统至关重要,分块(也称为“拆分”)将大量文档拆分为更易处理的部分。通过支持 MD 格式的 PyMuPDF 数据提取,我们支持分块以保持具有共同上下文的文本在一起。重要的是,MD 格式的 PyMuPDF 提取允许进行 第 3 级分块

总之,在 LLM 和 RAG 环境中使用 Markdown 文本格式可以确保更准确和相关的结果,因为它提供了更丰富的数据结构和更相关的数据块负载给您的 LLM。

PyMuPDF 支持 PDF 的 Markdown 转换

自推出以来,PyMuPDF 一直能够从 PDF 页面中提取文本、图像、矢量图形,并且从 2023 年 8 月起,还能够提取表格。这些对象类型各自有其提取方法:文本有一种,表格、图像和矢量图形则有其他方法。为了满足 RAG 的要求,我们将这些不同的提取方式合并,生成一个统一的 Markdown 字符串,以一致地表示页面的整体内容。

所有这些都实现为 一个 Python 脚本。它可以被其他脚本作为模块导入,或者在终端窗口中通过以下命令行调用:

$ python pymupdf_rag.py input.pdf [-pages PAGES]

它将生成一个 Markdown 格式的文本文件(称为 input.md)。可选参数 PAGES 允许将转换限制为 PDF 总页面的一个子集。如果省略,则处理整个 PDF。

Markdown 创建细节

选择要考虑的页面

-pages” 参数是一个字符串,由所需的页面编号(从1开始)组成,用于考虑进行markdown转换。可以给出多个页面编号规范,使用逗号分隔。每个规范可以是一个整数或两个用“-”连接的整数,指定一个页面范围。以下是一个示例:

-pages 1–10,15,20-N

这将包括第1页到第10页、第15页以及第20页到文件末尾(大写“N”被视为最后一页的编号)。

识别标题

在调用时,程序检查给定页面上的所有文本并找出最常用的字体大小。该值(以及所有较小的字体大小)被假定为 正文文本。较大的字体大小被假定为 标题文本

根据它们在字体大小层级中的相对位置,标题文本将前面加上一个或多个 markdown 标题 # 标签字符。

按页面区域识别处理模式

每个页面上的所有文本首先将被分类为标准文本或表格文本。然后,页面内容将从上到下提取,并转换为Markdown格式。

这最好通过一个例子来解释:

该页面显示的内容代表典型情况:

  • 两个表格,具有部分重叠的垂直位置。一个表格没有标题,另一个表格有外部列标题。
  • 有一行标题和多个级别的标题
  • 正文文本包含多种样式细节,如粗体斜体行内代码
  • 有序和无序列表。
  • 代码片段。

布局分析将确定三个区域并选择适当的处理模式:(1) 文本,(2) 表格,(3) 文本。

生成的Markdown文本忠实地反映了上述内容——在这种格式中尽可能做到。

作为一个例子,让我们看一下具有外部标题的表格的输出:

|Column1|Column2|

|---|---|

|Cell (0, 0)|Cell (0, 1)|

|Cell (1, 0)|Cell (1, 1)|

|Cell (2, 0)|Cell (2, 1)|

这是与GitHub兼容的格式,具有最小的可能令牌大小——这是保持输入到RAG系统的小型化的重要方面。

列边框由“|”字符表示。如果文本行后面跟着“|---|---| …”形式的行,则假定该文本行是表头。完整的表格定义必须前后至少有一行空行。

请注意,由于技术原因,Markdown表格必须有一个标题,因此如果没有外部标题,将选择第一行作为表头。

为了确认整体准确性,以下是Markdown解析器如何处理完整页面的示例:

以编程方式调用 Markdown 转换器

除了在命令行中执行程序外,Markdown 转换也可以通过程序请求:

import fitz
from pymupdf_rag import to_markdown  # import Markdown converter

doc = fitz.open(“input.pdf”)  # open input PDF

## define desired pages: this corresponds “-pages 1-10,15,20-N”
page_list = list(range(9)) + [14] + list(range(19, len(doc) – 1))

## get markdown string for all pages
md_text = to_markdown(doc, pages=page_list)

## write markdown string to some file
output = open(“out-markdown.md”, “w”)
output.write(md_text)
output.close()

结论

通过集成 PyMuPDF 的提取方法,PDF 页面的内容将被忠实地转换为可用作 RAG 聊天机器人的输入的 Markdown 文本。

请记住,成功的 RAG 聊天机器人的关键在于它能够访问的信息的质量和完整性。

启用 PyMuPDF 的 Markdown 提取确保从 PDF 中获取这些信息不仅是可能的,而且是简单的,展示了该库的强大和对开发者的友好。祝编码愉快!

源代码

参考文献

相关博客

Related Posts

使用 ChatGPT 搜索网络功能的 10 种创意方法

使用 ChatGPT 搜索网络功能的 10 种创意方法

例如,提示和输出 你知道可以使用 ChatGPT 的“搜索网络”功能来完成许多任务,而不仅仅是基本的网络搜索吗? 对于那些不知道的人,ChatGPT 新的“搜索网络”功能提供实时信息。 截至撰写此帖时,该功能仅对使用 ChatGPT 4o 和 4o-mini 的付费会员开放。 ![](https://images.weserv.nl/?url=https://cdn-im

阅读更多
在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和科技这样一个动态的行业中,保持领先意味着不断提升你的技能。无论你是希望深入了解人工智能模型性能、掌握数据分析,还是希望通过人工智能转变传统领域如法律,这些课程都是你成功的捷径。以下是一个精心策划的高价值课程列表,可以助力你的职业发展,并让你始终处于创新的前沿。 1. 生成性人工智能简介课程: [生成性人工智能简介](https://genai.works

阅读更多
10 个强大的 Perplexity AI 提示,让您的营销任务自动化

10 个强大的 Perplexity AI 提示,让您的营销任务自动化

在当今快速变化的数字世界中,营销人员总是在寻找更智能的方法来简化他们的工作。想象一下,有一个个人助理可以为您创建受众档案,建议营销策略,甚至为您撰写广告文案。这听起来像是一个梦想? 多亏了像 Perplexity 这样的 AI 工具,这个梦想现在成为现实。通过正确的提示,您可以将 AI 转变为您的 个人营销助理。在本文中,我将分享 10 个强大的提示,帮助您自动

阅读更多
10+ 面向 UI/UX 设计师的顶级 ChatGPT 提示

10+ 面向 UI/UX 设计师的顶级 ChatGPT 提示

人工智能技术,如机器学习、自然语言处理和数据分析,正在重新定义传统设计方法。从自动化重复任务到实现个性化用户体验,人工智能使设计师能够更加专注于战略思维和创造力。随着这一趋势的不断增长,UI/UX 设计师越来越多地采用 AI 驱动的工具来促进他们的工作。利用人工智能不仅能提供基于数据的洞察,还为满足多样化用户需求的创新设计解决方案开辟了机会。 1. 用户角色开发 目的

阅读更多
在几分钟内完成数月工作的 100 种人工智能工具

在几分钟内完成数月工作的 100 种人工智能工具

人工智能(AI)的快速发展改变了企业的运作方式,使人们能够在短短几分钟内完成曾经需要几周或几个月的任务。从内容创作到网站设计,AI工具帮助专业人士节省时间,提高生产力,专注于创造力。以下是按功能分类的100个AI工具的全面列表,以及它们在现实世界中的使用实例。 1. 研究工具 研究可能耗时,但人工智能工具使查找、分析和组织数据变得更加容易。**ChatGPT, Cop

阅读更多
你从未知道的 17 个令人惊叹的 GitHub 仓库

你从未知道的 17 个令人惊叹的 GitHub 仓库

Github 隐藏的宝石!! 立即收藏的代码库 学习编程相对简单,但掌握编写更好代码的艺术要困难得多。GitHub 是开发者的宝藏,那里“金子”是其他人分享的精心编写的代码。通过探索 GitHub,您可以发现如何编写更清晰的代码,理解高质量代码的样子,并学习成为更熟练开发者的基本步骤。 1. notwaldorf/emoji-translate *谁需

阅读更多