”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何使用 PyMuPDFM 将 PDF 转换为 Markdown 及其评估

如何使用 PyMuPDFM 将 PDF 转换为 Markdown 及其评估

发布于2024-11-07
浏览:497

PyMuPDF4LLM 是一个旨在将 PDF 转换为 Markdown 格式的库。在这里,我将分享我测试这个库的经验。

安装

首先使用以下命令安装库:


pip install pymupdf4llm


用法

基本用法非常简单,只需三行代码即可将 PDF 转换为 Markdown:


import pymupdf4llm
md_text = pymupdf4llm.to_markdown("input.pdf")
print(md_text)


您可以指定参数来调整内容的提取方式。

按页提取文本

默认情况下,整个 PDF 会转换为单个文本输出。但是,您可以通过指定 page_chunks=True 来逐页提取文本。


md_text = pymupdf4llm.to_markdown("input.pdf", page_chunks=True)


提取图像

要将图像提取为文件,请使用 write_images=True 选项:


md_text = pymupdf4llm.to_markdown("input.pdf", write_images=True)


也可以使用base64编码直接在Markdown中嵌入图像:


md_text = pymupdf4llm.to_markdown("input.pdf", embed_images=True)


转换结果评估

为了进行测试,使用了具有不同 Markdown 元素的各种 PDF。

How to Convert PDFs to Markdown Using PyMuPDFM and Its Evaluation

标头转换

标题已正确转换为 Markdown 格式。这是结果的一部分:


# Sample Markdown Guide

This is a sample markdown file that includes various features for quick reference.

## 1. Headers

...

## 3. Lists


粗体和斜体文本

粗体和斜体格式也正确转换:


**Bold: **Bold Text****

_Italic: *Italic Text*_

**_Bold and Italic: ***Bold and Italic***_**


列表转换

第一级有序列表转换没有问题,但嵌套列表和无序列表转换不准确。

How to Convert PDFs to Markdown Using PyMuPDFM and Its Evaluation


## 3. Lists

### Unordered List

Item 1

Item 2

Sub-item 1

Sub-item 2

### Ordered List

1. First item

2. Second item

1. Sub-item A

2. Sub-item B


链接转换

链接的URL被提取,但包含链接的整行变成了超链接,偏离了原始格式。

How to Convert PDFs to Markdown Using PyMuPDFM and Its Evaluation


## 4. Links and Images

[You can add links using [Link Text](URL).](https://www.example.com/)


图像提取

默认情况下不提取图像,但可以使用 write_images=True 将图像保存在本地。


md_text = pymupdf4llm.to_markdown("input.pdf", write_images=True)


然后在 Markdown 中引用保存的图像,如下所示:


### Image Example

![](input.pdf-1-0.png)




表转换

没有垂直边框的简单表格无法准确转换(可能是因为不明确的列边界导致表格被视为纯文本)。

How to Convert PDFs to Markdown Using PyMuPDFM and Its Evaluation


## 5. Tables

**Column 1** **Column 2** **Column 3**

Row 1 Data A Data B

Row 2 Data C Data D




代码转换

代码块已正确转换,但语言规范(例如 python)未保留。内联代码转换也存在问题。

How to Convert PDFs to Markdown Using PyMuPDFM and Its Evaluation


## 6. Code

### Inline Code

Use backticks for inline code: print("Hello, world!")

### Code Block

Use triple backticks for code blocks:

```
def greet(name):
return f"Hello, {name}!"
print(greet("Markdown"))
```




多行文本

对于多行文本,换行符将按原始 PDF 中的显示方式保留。

How to Convert PDFs to Markdown Using PyMuPDFM and Its Evaluation


Markdown is a lightweight and versatile markup language favored by developers, writers, and bloggers alike

due to its simplicity in formatting text, enabling users to create readable and well-structured documents—

whether for documentation, blog posts, or articles—without the complexity of HTML, while also offering the

ability to convert content seamlessly into other formats like HTML, PDF, and even slideshows, making it an

ideal choice for projects that require both clarity and flexibility in presentation.




结论

尽管在准确转换列表和链接方面存在挑战,PyMuPDF4LLM 是将 PDF 转换为 Markdown 的有用工具。它可以在本地工作,无需外部语言模型,适合无法访问互联网的环境。

版本声明 本文转载于:https://dev.to/m_sea_bass/how-to-convert-pdfs-to-markdown-using-pymupdf4llm-and-its-evaluation-kg6?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何重新排列 MySQL 中的列以提高数据可视性和查询效率?
    如何重新排列 MySQL 中的列以提高数据可视性和查询效率?
    有效地重新排列 MySQL 列以增强可见性当列没有最佳排序时,查询大型数据库可能会很麻烦。本文提供了一个全面的解决方案,可以轻松地重新排列现有列,优化表的可见性而不影响其数据完整性。要修改列的位置,请使用“ALTER TABLE”命令,后跟“MODIFY”子句。此语法允许您通过在指定的引用列之后指定...
    编程 发布于2024-11-08
  • 如何正确使用 getElementsByClassName 并根据事件更改元素样式?
    如何正确使用 getElementsByClassName 并根据事件更改元素样式?
    使用 getElementsByClassName 更改元素样式getElementsByClassName 允许您选择具有相同类名的多个元素。在给出的示例中,代码旨在当事件发生在具有特定类名的所有 div 之外时更改这些 div 的背景颜色。问题诊断The提供的代码有一些问题: getElemen...
    编程 发布于2024-11-08
  • 为什么我的画布图像无法绘制?异步图像加载的重要性。
    为什么我的画布图像无法绘制?异步图像加载的重要性。
    绘图前等待图像加载尝试将图像添加到画布时,确保图像在绘制之前加载至关重要试图画它。您在代码中遇到的问题是由于图像加载的异步性质造成的。要解决此问题,您需要向图像的 onload 事件添加回调函数。该回调函数将在图像加载完成时执行,确保在尝试绘制图像之前图像数据可用。下面更正的代码将等待图像加载,然后...
    编程 发布于2024-11-08
  • Golang 中的 LeetCode:解析布尔表达式
    Golang 中的 LeetCode:解析布尔表达式
    这是我喜欢解决的 LeetCode 问题之一。我用 Golang 解决了这个问题,而且我已经是一个 Go 新手了,刚开始学习一周。 直觉 这个问题是实现计算器程序的另一个版本,该程序接受一个字符串并对其进行计算。您必须通过评估内部括号和外部括号来解决问题,直到得到最终结果。这些问题...
    编程 发布于2024-11-08
  • 预防 XSS 攻击的方法:综合指南
    预防 XSS 攻击的方法:综合指南
    1.什么是XSS? XSS(即跨站脚本)是 Web 应用程序中发现的一种安全漏洞。它允许攻击者将恶意脚本(通常是 JavaScript)注入到其他用户查看的网页中。这可能会导致未经授权的操作、数据盗窃或会话劫持。 1.1. XSS 攻击的类型 XSS攻击一般分为三...
    编程 发布于2024-11-08
  • Laravel 的新 Cache::flexible()
    Laravel 的新 Cache::flexible()
    每次点击路线时都等待大型数据集进行计算真是太糟糕了!而且用户不想等待,现在每个人的保留时间都很短,所以我们几年前就通过使用缓存修复了这个问题。 Laravel 有一个 Cache Fascad 来帮助我们缓存数据,我们一直在使用 Cache::remember(),这是一个很好的方法来缓存一些数据一...
    编程 发布于2024-11-08
  • 组装中的 Web 应用程序!
    组装中的 Web 应用程序!
    MOS 6502 是经济实惠计算领域的一大进步。感谢这个小家伙,我们了解了 Commodore64、Apple II、 Atari2600 和 NES。直到今天,人们仍在使用 6502 Assembly,为这些被遗忘的平台创建软件和游戏。 现在,让我介绍一下自己 - 我是Cassiopeia(但是,...
    编程 发布于2024-11-08
  • 使用 SCSS Mixins 和函数让你的 CSS 变得更好
    使用 SCSS Mixins 和函数让你的 CSS 变得更好
    SCSS 是 CSS 的扩展,可让您的代码更易于管理。借助 SCSS,您可以使用 mixin 和函数来帮助您避免一次又一次编写相同的代码。在本文中,我将向您展示一些有用的 SCSS mixins 和函数,它们可以节省您的时间并使您的代码更清晰。 为什么使用 Mixins 和 Functions? 编...
    编程 发布于2024-11-08
  • ## Scopelint 错误:在范围范围内使用变量 - 如何安全地引用函数文字中的循环变量?
    ## Scopelint 错误:在范围范围内使用变量 - 如何安全地引用函数文字中的循环变量?
    Scopelint 错误:在范围范围上使用变量在测试函数 TestGetUID 中,代码遇到了scopelint 报告的错误,该错误会发出警告使用函数字面量范围内的变量 x。考虑以下代码行:for _, x := range tests { t.Run(x.description, func...
    编程 发布于2024-11-08
  • 实现平滑滚动以获得更好的用户体验。
    实现平滑滚动以获得更好的用户体验。
    平滑滚动是一项现代微动画功能,可通过允许在页面各部分之间轻松导航来增强用户体验。平滑滚动不是立即跳到各个部分,而是创造流畅、引人入胜的过渡。这是一种保持用户参与度的好方法,而又不会因为突然的跳转而让他们不知所措。 在本文中,我们将探讨两种实现平滑滚动的方法: 使用 CSS 使用 JavaScript...
    编程 发布于2024-11-08
  • ## 使用 CURLOPT_RETURNTRANSFER 时,为什么 Curl 返回“18:传输已关闭,剩余未完成的读取数据”?
    ## 使用 CURLOPT_RETURNTRANSFER 时,为什么 Curl 返回“18:传输已关闭,剩余未完成的读取数据”?
    解决未完成读取数据的传输关闭错误使用curl执行数据检索有时可能会产生错误消息,特别是在使用CURLOPT_RETURNTRANSFER时存储数据以供以后检索。此错误“18:传输已关闭,剩余未完成的读取数据”可能会导致数据不完整。一个值得注意的方面是,当 CURLOPT_RETURNTRANSFER...
    编程 发布于2024-11-08
  • python 程序列表
    python 程序列表
    我的列表创建 mylist=["singam","山羊","rayyan","leo"] 打印(我的列表) 打印(我的列表[2]) mylist[1]="mersal" 打印(我的列表) mylist...
    编程 发布于2024-11-08
  • Apache 虚拟主机:添加反向代理
    Apache 虚拟主机:添加反向代理
    什么是反向代理? 反向代理充当将客户端请求转发到其他服务器的中介。它通常用于负载平衡、安全、缓存或将 HTTP 请求转发到后端服务器(例如,在 Node.js、Python、PHP 或其他服务器上运行的应用程序)。 Apache 允许您使用其 mod_proxy 和 mod_pr...
    编程 发布于2024-11-08
  • [已解决] Appwrite 用户角色缺失或缺失范围错误
    [已解决] Appwrite 用户角色缺失或缺失范围错误
    如果您想快速构建应用程序,Appwrite 是一个很棒的工具,但有时您可能会遇到令人沮丧的错误,对我来说,这些错误总是与“用户角色缺失”或“用户无权执行此操作”等。即使我可以完全访问我的应用程序的任何实例,执行任何操作。 但最终我找到了一种方法来修复所有这些问题(也许不是全部,但我想这样认为)。 所...
    编程 发布于2024-11-08
  • 如何使用 Pandas 在 Python 中读取 Excel 文件时修复 pd.io.parsers.ExcelFile.parse 错误
    如何使用 Pandas 在 Python 中读取 Excel 文件时修复 pd.io.parsers.ExcelFile.parse 错误
    使用 Pandas 在 Python 中读取 Excel 文件背景在 Python 中处理数据时,Excel 文件是常见的信息源。 Pandas 是一个强大的数据操作和分析库,使其成为读取和解析 Excel 文件的理想工具。使用 pd.ExcelFile在提供的代码片段中,您遇到错误因为 pd.io...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3