接口#

PyMuPDF4LLM API#

property version#

打印库的版本。

to_markdown(doc: pymupdf.Document | str, *, pages: list | range | None = None, hdr_info: Any = None, write_images: bool = False, embed_images: bool = False, dpi: int = 150, image_path='', image_format='png', image_size_limit=0.05, force_text=True, margins=(0, 50, 0, 50), page_chunks: bool = False, page_width: float = 612, page_height: float = None, table_strategy='lines_strict', graphics_limit: int = None, ignore_code: bool = False, extract_words: bool = False, show_progress: bool = True) str | list[dict]#

读取文件的页面并以Markdown格式输出其页面的文本。具体如何实现可以通过多个参数进行影响。请注意,支持从Markdown文本构建页面块

Parameters:
  • doc (文档,字符串) – 文件,可以指定为文件路径字符串,或作为一个 PyMuPDF 文档(通过 pymupdf.open 创建)。为了使用 pathlib.Path 规范、Python 文件类似对象、内存中的文档等,你 必须 使用一个 PyMuPDF 文档。

  • 页面 (列表) – 可选,考虑用于输出的页面(注意:指定基于0的页面编号)。如果省略,则处理所有页面。

  • hdr_info – 可选。如果您想提供自己的标题检测逻辑,请使用此选项。这可以是一个可调用对象或一个具有名为 get_header_id 方法的对象。它必须接受一个文本片段(作为 extractDICT() 中包含的片段字典)和一个关键字参数“page”(这是拥有的 Page 对象)。它必须返回一个字符串“”或最多 6 个“#”字符,后跟 1 个空格。如果省略,将执行完整文档扫描,以查找最常用的字体大小并基于它们推导标题级别。要完全避免这种行为,请指定 hdr_info=lambda s, page=None: ""hdr_info=False

  • write_images (bool) – 当遇到图像或矢量图形时,将从相应的页面区域创建图像并存储在指定的文件夹中。将生成指向这些图像的Markdown引用。这些区域中包含的任何文本将不包含在文本输出中(但作为图像的一部分出现)。因此,如果例如您的文档在整个页面的图像上有文本,请确保将此参数设置为 False

  • embed_images (bool) – 类似于 write_images,但图像将作为 base64 编码的字符串包含在 markdown 文本中。如果使用,将忽略 write_imagesimage_path。这可能会显著增加您的 markdown 文本的大小。

  • image_size_limit (float) – 这必须是一个小于1的正值。如果 width / page.rect.width <= image_size_limitheight / page.rect.height <= image_size_limit,图像将被忽略。例如,默认值0.05意味着要被考虑在内,图像的宽度和高度必须大于页面宽度和高度的5%。

  • dpi (int) – 指定所需的图像分辨率,单位为每英寸点数。仅在 write_images=True 时相关。默认值为 150。

  • image_path (str) – 将图像存储在该文件夹中。相关的如果 write_images=True。默认是脚本目录的路径。

  • image_format (str) – 通过其扩展名指定所需的图像格式。默认值为“png”(可移植网络图形)。另一个流行的格式可能是“jpg”。可能的值是所有支持的输出格式

  • force_text (bool) – 即使在重叠的图像/图形时也生成文本输出。然后,这段文本将显示在相应的图像之后。如果 write_images=True,此参数可以是 False 以抑制在图像上重复文本。

  • 边距 (浮点数,列表) –

    一个浮点数或一个包含 2 个或 4 个浮点数的序列,指定页面边框。只有在边距内的对象将被考虑作为输出。

    • margin=f 产生 (f, f, f, f) 对应于 (左, 上, 右, 下)

    • (top, bottom) 产生 (0, top, 0, bottom)

    • 要始终读取完整页面,请使用 margins=0

  • page_chunks (bool) –

    如果 True 输出将会是一个 Document.page_count 字典的列表(每一页一个)。每个字典具有以下结构:

    • ”metadata” - 由文档的元数据 Document.metadata 组成的字典,增加了额外的键 “file_path”(文件名), “page_count”(文档中的页面数),以及 “page_number”(基于1的页码)。

    • ”toc_items” - 指向此页面的目录项的列表。该列表中的每一项格式为 [lvl, title, pagenumber],其中 lvl 是层级, title 是字符串, pagenumber 是基于1的页码。

    • ”tables” - 此页面上的表格列表。每个项是一个字典,包含键 “bbox”、“row_count” 和 “col_count”。键 “bbox” 是表格在页面上位置的 pymupdf.Rect,以元组格式表示。

    • ”images” - 页面上的图像列表。这是页面方法 Page.get_image_info() 的副本。

    • ”graphics” - 页面上的矢量图形矩形列表。这是由方法 Page.cluster_drawings() 传递的聚类矢量图形的边界框列表。

    • ”text” - 页面内容作为 Markdown 文本。

    • ”words” - 如果使用了 extract_words=True。这是一个元组列表 (x0, y0, x1, y1, "wordstring", bno, lno, wno),由 page.get_text("words") 提供。这些元组的 顺序 与在 markdown 文本字符串中生成的顺序相同,因此尊重多列文本。这对于表中的文本也适用:单词按表行单元格的顺序提取。

  • page_width (float) – 指定所需的页面宽度。这对于具有固定页面宽度的文档(如 PDF、XPS 等)是无效的。然而,可重排 文档,如电子书、办公文件或文本文件没有固定的页面尺寸,默认假设其宽度为信件格式(612)和一个“无限的” 页面高度。这意味着整个文档被视为一整页。

  • page_height (float) – 指定所需的页面高度。有关相关性,请参见 page_width 参数。如果使用默认的 None,文档将呈现为一个宽度为 page_width 的大页面。因此,在这种情况下,将不会发生 markdown 页面分隔符(除了最后一个),只会返回一个页面块。

  • table_strategy (str) – 表格检测策略。默认是 "lines_strict",它忽略背景颜色。在某些情况下,其他策略可能会更成功,例如 "lines",它使用所有矢量图形对象进行检测。

  • graphics_limit (int) – 使用此参数来限制处理过量的矢量图形元素。通常,科学文档或使用图形命令模拟文本的页面可能包含数万个这些对象。由于矢量图形主要用于表格检测,分析这类页面可能会导致过长的运行时间。您可以通过例如 graphics_limit=5000 或者更小的值来排除问题页面。相应的页面将被忽略,并在输出文本中以一条消息行表示。

  • ignore_code (bool) – 如果 True,则单间距文本不会受到特殊格式处理。代码块将不再生成。如果使用了 extract_words=True,则此值设置为 True

  • extract_words (bool) – 一个值为 True 会强制 page_chunks=True 并为每个页面字典添加键“words”。它的值是由 PyMuPDF 的 Page 方法 get_text("words") 提供的单词列表。这个列表中单词的顺序与提取的文本相同。

  • show_progress (bool) –

    一个值为 True(默认)时,在将页面转换为Markdown时会显示基于文本的进度条。它看起来类似于以下内容:

    处理中 input.pdf… [==================== ] (148/291)

Returns:

选定的所有文档页面的组合文本字符串,或一个字典列表。

LlamaMarkdownReader(*args, **kwargs)#

使用 pdf_markdown_reader.PDFMarkdownReader 创建一个 LlamaIndex 包。请注意,当安装 pymupdf4llm 时,此包不会自动安装

有关可能参数的详细信息,请查阅LlamaIndex文档 [1]

Raises:

NotImplementedError: 请安装所需的 LlamaIndex 包。

Returns:

a pdf_markdown_reader.PDFMarkdownReader 并发出消息“成功导入 LlamaIndex”。请注意,此方法需要几秒钟才能执行。有关使用 markdown 阅读器的详细信息,请参见下文。


class pdf_markdown_reader.PDFMarkdownReader#
load_data(file_path: Union[Path, str], extra_info: Optional[Dict] = None, **load_kwargs: Any) List[LlamaIndexDocument]#

这是您当前应该使用的唯一方法来提取markdown数据。在任何情况下,请忽略方法 aload_data()lazy_load_data()。其他方法如 use_doc_meta() 可能有意义,也可能没有。有关更多信息,请查阅LlamaIndex文档 [1]

在后台,该方法将执行 to_markdown()

Returns:

每个页面的LlamaIndexDocument文档列表。

脚注


本软件按原样提供,不作任何明示或暗示的担保。该软件根据许可证分发,除非按照该许可证的条款明确授权,否则不得复制、修改或分发。有关许可信息,请参阅artifex.com或联系Artifex Software Inc.,地址:39 Mesa Street, Suite 108A, San Francisco CA 94129, United States以获取更多信息。