Marker:高效精准的 PDF 读取转换工具

Marker:高效精准的 PDF 读取转换工具

技术教程gslnedu2025-06-08 17:35:083A+A-

PDF 作为一种广泛使用的文件格式,承载着大量的信息和数据。然而,PDF 格式的不易编辑性,使得从中提取文本并不容易,这也使得大量的 PDF 文档难以参与到数据采集中,存在较大的数据真空。Marker 旨在提供一个高效精准的 PDF 文本提取和转换工具,使得 PDF 更容易参与到数据的流通和训练中来。


简介

Marker 是一个快速准确地把 PDF 和图片转换为 Markdown, JSON 和 HTML 的工具,代码仓库位于
https://github.com/VikParuchuri/marker 。项目使用 Python 语言编写,支持各种不同的语言,能格式化包括表格、表单、公式、链接、参考文献及代码块;能提取图像并保存至 Markdown 格式文档,能够去除页眉、页脚和其他冗余部分;可以轻松通过自定义格式与逻辑进行扩展;可选择借助大语言模型(LLM)提高准确性,并能在 GPU、CPU 或 MPS 上工作。

实现上,Marker 是一条串联深度学习模型的管道:

  • 提取文本,必要时进行 OCR 识别(采用启发式算法、Surya 工具)
  • 检测页面布局并确定阅读顺序(使用 Surya 工具)
  • 清理每个文本块并进行格式调整(采用启发式算法、Texify 工具、Surya 工具)
  • 可选择使用 LLM 大语言模型提升质量
  • 合并文本块并对完整文本进行后期处理


使用

Marker 需要 Python 3.10+ 和 Pytorch,并将利用 GPU 进行模型运行。安装 Marker-PDF 库:

pip install marker-pdf

安装完成后,首先进行环境的配置。Torch 会自动检测运行的设备,也可以直接指定设备,如 TORCH_DEVICE=cuda。某些 PDF 有一些难以提取的文本,可以通过 force_ocr 强制使用 OCR 识别。

Marker 也提供了 streamlit App 版本,可以交互式地进行使用,使用以下命令安装并启动:

pip install streamlit
marker_gui


Marker 提供了直接的命令行工具进行转换,可以直接转换一个单独的文件:

marker_single /path/to/file.pdf

命令提供了包括 --output_dir,--use_llm,--force_ocr,--languages 等命令行参数,可以提供不同的功能和配置。

Marker 也能同时转换多个文件:

marker /path/to/input/folder --workers 4

可以通过 --workers 参数指定进行转换的工作者数量,可以利用更多的 CPU / GPU 资源。


除了命令行之外,Marker 还可用作为 Python 库使用,一个简单的例子如下:

from marker.converters.pdf import PdfConverter
from marker.models import create_model_dict
from marker.output import text_from_rendered

converter = PdfConverter(
    artifact_dict=create_model_dict(),
)
rendered = converter("FILEPATH")
text, _, images = text_from_rendered(rendered)

通过 PdfConverter 提供主要的 PDF 转换提取功能。rendered 根据输出的格式不同而有不同的类型和属性,Markdown 格式的拥有属性包括 markdown, metadata 和 images,而 JSON 格式的则拥有 children, block_type 和 metadata。

Marker 还可以通过 ConfigParser 传递个性化的配置:

from marker.converters.pdf import PdfConverter
from marker.models import create_model_dict
from marker.config.parser import ConfigParser

config = {
    "output_format": "json",
    "ADDITIONAL_KEY": "VALUE"
}
config_parser = ConfigParser(config)

converter = PdfConverter(
    config=config_parser.generate_config_dict(),
    artifact_dict=create_model_dict(),
    processor_list=config_parser.get_processors(),
    renderer=config_parser.get_renderer()
)
rendered = converter("FILEPATH")

解析的每个文档中,包含1个或多个页,每个叶又包含多个块。开发者可以对这些块进行操作:

from marker.converters.pdf import PdfConverter
from marker.models import create_model_dict
from marker.schema import BlockTypes

converter = PdfConverter(
    artifact_dict=create_model_dict(),
)
document = converter.build_document("FILEPATH")
forms = document.contained_blocks((BlockTypes.Form,))

针对一些特别的元素,可以使用专有的转换器进行提取,如针对表格,可以使用 TableConverter:

from marker.converters.table import TableConverter
from marker.models import create_model_dict
from marker.output import text_from_rendered

converter = TableConverter(
    artifact_dict=create_model_dict(),
)
rendered = converter("FILEPATH")
text, _, images = text_from_rendered(rendered)


总结

Marker 作为一款高效精准的 PDF 转 Markdown 与 JSON 工具,为处理PDF文件中的数据和信息提供了极大的便利。通过深度学习模型的精准识别和转换,Marker不仅提高了转换速度,还确保了转换结果的准确性。

Marker 的应用方向非常广泛,可以用于学术研究、数据分析、文档编辑等多个领域。同时,Marker 作为一个开源项目,也欢迎更多的开发者加入进来,共同完善和发展这一工具。相信在不久的将来,Marker 将成为处理 PDF 文件不可或缺的重要工具之一。

点击这里复制本文地址 以上内容由朽木教程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

朽木教程网 © All Rights Reserved.  蜀ICP备2024111239号-8