API#
PyMuPDF4LLM API#
The 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| 文本构建页面块。
- 参数:
doc (Document,str) – 需要处理的文件,可指定为文件路径字符串,或 PyMuPDF Document (通过
pymupdf.open
创建) 。若要使用pathlib.Path
规范、Python 文件对象、内存中的文档等,必须 使用 PyMuPDF Document。pages (list) – 可选参数,指定要输出的页面 (注意:使用 0-based 页码) 。如果省略,则处理所有页面。
hdr_info – 可选参数。如果要提供自定义的标题检测逻辑,可以使用此参数。它可以是一个可调用对象,或者是一个包含
get_header_id
方法的对象。该方法必须接受一个文本片段 (即extractDICT()
返回的 span 字典) ,以及一个关键字参数"page"
(其值为所属的 Page 对象) 。它应返回一个字符串""
或 1 到 6 个"#"
号后跟一个空格。如果省略,将对整个文档进行扫描,以找到最常见的字体大小,并基于此推导标题级别。若要完全禁用此行为,可指定hdr_info=lambda s, page=None: ""
或hdr_info=False
。write_images (bool) – 当遇到图片或矢量图形时,将从相应页面区域创建图片,并存储在指定的文件夹中。同时,Markdown 中会生成指向这些图片的引用。此选项会导致该区域的文本不被包含在文本输出中 (但会出现在图片中) 。因此,如果文档中包含整页图片上的文本,请确保此参数设为
False
。embed_images (bool) – 类似于
write_images
,但图片会被嵌入到 Markdown 文本中,以 base64 编码字符串的形式存储。如果使用该选项,则会忽略write_images
和image_path
。此选项可能会显著增加 Markdown 文本的大小。image_size_limit (float) – 该值必须为小于 1 的正数。当
width / page.rect.width <= image_size_limit
或height / page.rect.height <= image_size_limit
时,图片将被忽略。例如,默认值 0.05 表示图片的宽度和高度必须大于页面宽度和高度的 5%,才能被考虑纳入。dpi (int) – 指定图片的分辨率 (DPI) 。仅当
write_images=True
时有效。默认值为 150。image_path (str) – 指定存储图片的文件夹。仅当
write_images=True
时有效。默认值为脚本目录的路径。image_format (str) – 指定图片的格式 (扩展名) 。默认值为
"png"
(便携式网络图形格式) 。常见的替代格式包括"jpg"
。所有可能的值详见 支持的文件类型。force_text (bool) – 生成文本输出,即使文本与图片/图形重叠。这些文本会在相应图片之后出现。如果
write_images=True
,此参数可以设为False
以避免重复输出图片上的文本。margins (float,list) –
以浮点数或浮点数序列指定页面边距。只有位于边距内的对象才会被输出。
margin=f
等价于(f, f, f, f)
,表示(left, top, right, bottom)
。(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"
(表格在页面上的位置,格式为pymupdf.Rect
元组) 、"row_count"
(行数) 和"col_count"
(列数) 。”images” - 该页面的图片列表,与
Page.get_image_info()
方法返回值相同。”graphics” - 该页面的矢量图形矩形列表,包含由
Page.cluster_drawings()
方法返回的矢量图形边界框。”text” - 以 Markdown 格式存储的页面内容。
”words” - 若
extract_words=True
,则包含page.get_text("words")
方法返回的单词列表。格式为(x0, y0, x1, y1, "wordstring", bno, lno, wno)
,其顺序与 Markdown 文本中的顺序一致,并且支持多栏文本和表格文本的正确顺序。
page_width (float) – 指定页面宽度。对于 PDF、XPS 等固定页面宽度的文档,此参数会被忽略。对于 可重排 文档 (如电子书、办公文档或纯文本文件) ,默认假设其宽度为信纸宽度 (612) ,高度为“无限大”,即整个文档被视为一页。
page_height (float) – 指定页面高度。仅当
page_width
适用时才相关。默认值None
表示文档被视为单页,其宽度为page_width
,此时不会有 Markdown 页面分隔符 (除最后一页外) ,并且返回的page_chunks
仅包含一个页面。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"
键,其值为Page.get_text("words")
返回的单词列表。show_progress (bool) –
若设为
True
(默认) ,则在转换为 Markdown 期间显示进度条,例如:处理 input.pdf… [==================== ] (148/291)
- 返回:
返回选定页面文本的合并字符串,或包含页面信息的字典列表。
- LlamaMarkdownReader(*args, **kwargs)#
使用 LlamaIndex 包创建一个
pdf_markdown_reader.PDFMarkdownReader
。请注意,安装 pymupdf4llm 时 不会自动安装 此包。有关可能的参数详情,请参考 LlamaIndex 文档 [2]。
- Raises:
NotImplementedError
: 请安装所需的 LlamaIndex 包。- 返回:
一个
pdf_markdown_reader.PDFMarkdownReader
,并输出消息 “Successfully imported 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 文档 [2]。在内部,该方法会执行
to_markdown()
。- 返回:
一个
LlamaIndexDocument
文档列表——每个页面对应一个文档。
Footnotes