ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

PaddleOCR doc2md:无需 OCR 即可将 Word、Excel 与 PowerPoint 一键转换为 Markdown

PaddleOCR doc2md:无需 OCR 即可将 Word、Excel 与 PowerPoint 一键转换为 Markdown PaddleOCR doc2md无需 OCR 即可将 Word、Excel 与 PowerPoint 一键转换为 Markdown【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCRdoc2md 是 PaddleOCR 内置的轻量级 Office 文档结构化转换功能它绕开 OCR 推理链路直接解析 OOXML 文档结构并输出规范的 Markdown 文本。本文以官方教程 docs/version3.x/doc2md.en.md 为核心骨架结合仓库源码深入讲解其架构、命令行与 Python API 用法、各格式支持细节及常见问题排查帮助你在知识库构建、文档检索与内容提取场景中直接落地使用。1. 功能定位不跑模型的结构化转换器doc2md 的核心设计理念是无需 OCR 推理。与 OCR 对图片/扫描件做像素级文字识别不同doc2md 直接读取 Office 文件的 XML 内部结构.docx/.xlsx/.pptx本质上是 ZIP 打包的 OOXML 文档将段落、表格、图片、公式等结构化元素映射为 Markdown 语法。因此它速度极快、零 GPU 依赖适合拥有原始 Office 文件的场景。从源码看整个功能收敛在 paddleocr/_doc2md 包内对外暴露两个核心入口见 paddleocr/init.pydoc2md_convert(source, **kwargs)转换文档并返回结果对象doc2md_supported_formats()列出当前支持的扩展名。支持格式.docxWord、.xlsxExcel、.pptxPowerPoint。三种格式的核心能力对比如下功能Word (.docx)Excel (.xlsx)PowerPoint (.pptx)标题层级✅ 内置样式 字号启发式 中文编号——文本格式化粗体/斜体/下划线/删除线✅✅✅上标 / 下标✅✅✅超链接✅✅✅列表有序 / 无序 / 嵌套✅——表格含合并单元格✅ HTML table✅ HTML table✅ HTML table图片✅ 按比例宽度✅ 浮动图片✅ 按比例宽度数学公式OMML → LaTeX✅ 行内 / 显示公式✅ drawing 层公式✅代码块✅ 等宽字体自动识别——文本框✅——图表Chart✅ → HTML table—✅ 14 种图表类型页眉 / 页脚✅ 多节 奇偶页——多 sheet / 多幻灯片—✅✅---分隔演讲者备注——✅2. 安装与依赖使用 doc2md 前请先按照安装教程完成 PaddleOCR 基础安装然后安装 doc2md 可选依赖pip install paddleocr[doc2md]该 extra 依赖在 pyproject.toml 中定义四类解析库缺一不可包名版本约束用途python-docx0.8.11Word (.docx) 文档解析python-pptx0.6.21PowerPoint (.pptx) 文档解析openpyxl3.0.0Excel (.xlsx) 文档解析pylatexenc2.10,3数学公式 Unicode → LaTeX 符号映射值得注意的实现细节是doc2md 采用延迟导入lazy import策略三个转换器模块docx.py、xlsx.py、pptx.py在真正转换时才引入对应解析库。若缺失依赖会抛出如RuntimeError: DOCX conversion requires python-docx: pip install paddleocr[doc2md]之类的明确错误参见 docx.py 与 xlsx.py这也是 FAQ 中转换时报 python-docx is required的根因。3. 命令行快速上手doc2md 以paddleocr doc2md子命令形式集成在 CLI 中注册逻辑见 paddleocr/_cli.py。基础用法# 转换 Word 文档输出到文件 paddleocr doc2md -i report.docx -o output.md # 转换 Excel 表格输出到文件 paddleocr doc2md -i data.xlsx -o output.md # 转换 PowerPoint 演示文稿输出到文件 paddleocr doc2md -i slides.pptx -o output.md # 不指定输出路径结果打印到终端stdout paddleocr doc2md -i report.docx # 查看支持的格式列表后退出 paddleocr doc2md --formats完整命令行参数如下参数说明类型默认值-i,--input输入文件路径必填使用--formats时可省略支持.docx、.xlsx、.pptxstr必填-o,--output输出 Markdown 文件路径不设置则打印到 stdout设置后图片自动保存到同目录images/子目录strNone-q,--quiet静默模式不打印耗时、保存路径等提示flagFalse--formats打印支持的文件格式列表并退出此时无需--inputflagFalse--no-drawings跳过文本框docx与 drawing 层数学公式xlsx的提取仅适用于 docx / xlsxflagFalse--no-headers-footers跳过页眉页脚提取仅适用于 docxflagFalse--sheet-name仅转换指定名称的 sheet不设置则转换全部仅适用于 xlsxstrNone--max-rows每个 sheet 的最大转换行数用于限制大表格输出仅适用于 xlsxintNone这些 flag 在 CLI 内部被一一映射为 Python API 的 kwargs见 paddleocr/_cli.py--no-drawings对应extract_drawingsFalse--no-headers-footers对应extract_headers_footersFalse--sheet-name与--max-rows直接透传。转换完成且未开启--quiet时CLI 会打印耗时毫秒与输出/图片保存路径。4. Python API 详解Python API 的顶层入口是paddleocr._doc2md.convert其底层实现见 paddleocr/_doc2md/core.py先校验文件存在性再通过注册表按扩展名/MIME 类型选出转换器实例执行convert_file后若指定output则自动写入 Markdown 文件并落盘images/图片。基础用法from paddleocr._doc2md import convert # 转换文档返回结果对象 result convert(report.docx) # 访问 Markdown 文本 print(result.markdown) # 查看提取的图片字典key 为相对路径value 为图片字节 print(list(result.images.keys())) # 查看文档标题 print(result.title) # 查看元信息格式、sheet 数量等 print(result.metadata)ConvertResult字段说明数据结构定义见 paddleocr/_doc2md/base.py字段类型说明markdownstr转换后的 Markdown 文本imagesdict[str, bytes]提取的图片字典key 为相对路径如images/image1.pngvalue 为图片原始字节titleOptional[str]文档标题可能为Nonemetadatadict文档元信息如格式类型、sheet 数量等指定输出路径自动保存 Markdown 与图片from paddleocr._doc2md import convert # 指定 output 后Markdown 写入文件图片保存到同目录 images/ 下 result convert(report.docx, outputoutput/report.md)图片落盘逻辑由convert统一处理result.images中的每个相对路径都被拼接到输出文件所在目录逐一以二进制写入见 core.py因此 Markdown 中的图片引用天然是相对路径。各格式可用的 kwargs 参数参数类型默认值适用格式说明extract_drawingsboolTruedocx, xlsx是否提取文本框docx/ drawing 层数学公式xlsxextract_headers_footersboolTruedocx是否提取页眉页脚sheet_nameOptional[str]Nonexlsx仅转换指定名称的 sheetNone表示全部max_rowsOptional[int]Nonexlsx每个 sheet 的最大转换行数按格式传入 kwargs 示例from paddleocr._doc2md import convert # Word不提取文本框和页眉页脚 result convert(report.docx, extract_drawingsFalse, extract_headers_footersFalse) # Excel仅转换名为 Sheet1 的 sheet最多 100 行 result convert(data.xlsx, sheet_nameSheet1, max_rows100)5. 各格式支持特性深度解析5.1 Word (.docx)标题识别采用三种互补策略内置 Heading 样式Word 内置 Heading 1–6 样式直接映射为#–######字号启发式字号大于正文 1.5 倍且段落较短时自动提升为标题中文编号一、格式识别为 H2一格式识别为 H3。对应正则见 docx.py_RE_H2 re.compile(r^[一二三四五六七八九十百千][、.])、_RE_H3 re.compile(r^[一二三四五六七八九十百千])。文本格式化粗体**、斜体*、下划线u、删除线~~、上标sup、下标sub。样式解析时遵循run 级 字符样式 段落样式的优先级链见 docx.py 中的_effective_bold/_effective_italic/_effective_underline辅助函数确保继承样式不被漏掉。列表有序、无序、嵌套列表缩进层级自动识别。表格输出为 HTMLtable格式合并单元格用rowspan/colspan还原。图片按文档内容区宽度计算百分比输出img width75%形式。数学公式OMML 格式公式转为 LaTeX行内公式用$...$显示公式用$$...$$。代码块自动检测等宽字体Courier New、Consolas 等 9 种输出为 fenced code block。其他文本框内容wps:txbx对应 Word 2010 wordprocessingShape 命名空间见 docx.py、图表Chart → HTML table、超链接支持普通链接与HYPERLINK域代码两种格式域代码正则_RE_FIELD_HYPERLINK见 docx.py、页眉页脚多节 奇偶页。页眉页脚中仅含页码的文本如- 3 -、Page of会被_RE_PAGE_ONLY正则过滤避免污染正文见 docx.py。5.2 Excel (.xlsx)多 sheet每个 sheet 输出一个以## sheet名称开头的章节。数据边界裁剪通过_find_data_bounds自动定位非空单元格区域去除尾部空行/空列只输出有效数据范围实现见 xlsx.py 起。合并单元格使用rowspan/colspan还原合并结构。字体格式化粗体、斜体、下划线、删除线、上标、下标。超链接支持单元格级超链接。浮动图片同时支持OneCellAnchor与TwoCellAnchor两种锚定方式——OneCellAnchor可从ext.cx直接读取图片显示宽度EMU 单位TwoCellAnchor则回退为默认处理见 xlsx.py。列宽换算按1 字符 ≈ 7px、1px 9525 EMU计算见 xlsx.py。数学公式解析 sheet 关联的 drawing 层 XML在mc:AlternateContent/mc:Choice下遍历a:p段落提取 OMML 公式并转为 LaTeX见 xlsx.py。5.3 PowerPoint (.pptx)多幻灯片每张幻灯片内容以---分隔。文本格式化粗体、斜体、下划线、删除线、上标、下标删除线通过 DrawingML 命名空间下的a:strike元素检测见 pptx.py。图片按幻灯片宽度计算百分比输出带宽度的img标签。表格HTMLtable格式支持合并单元格与带背景图片的表格。图表支持 14 种图表类型面积图、折线图、饼图、气泡图、柱状图、条形图、圆环图、雷达图、散点图等类型枚举映射见 pptx.py 的_CHART_TYPE_NAMES全部转换为 HTML table 输出。分组形状GroupShape递归处理嵌套的形状组合。数学公式从mc:AlternateContent中提取 OMML 公式并转为 LaTeX。演讲者备注附加在每张幻灯片内容末尾。6. 架构原理注册表驱动的转换器doc2md 的内部架构遵循注册表 策略模式代码结构清晰、易于扩展base.py定义ConvertResult数据类与BaseConverter抽象基类后者声明supported_extensions/supported_mimetypes类属性与抽象的convert_file方法registry.pyConverterRegistry维护扩展名 → 转换器类和MIME 类型 → 转换器类两张映射表。register支持作为装饰器使用get_converter先按扩展名匹配、再按 MIME 兜底均未命中时抛出带支持列表的ValueError——这正是 FAQ 中格式不支持报 ValueError的来源见 registry.pyconverters/docx、xlsx、pptx 三个转换器分别实现对应格式的 XML 解析与 Markdown 渲染math/OMML 公式解析与 Unicode → LaTeX 符号映射依赖pylatexenc供三种格式复用。convert()入口通过from . import converters触发全部内置转换器的注册见 core.py随后交由default_registry.get_converter(file_path)分发见 core.py。用户如需新增自定义格式可自行继承BaseConverter并注册到注册表无需改动核心流程。7. FAQ常见问题与排查Q转换时提示RuntimeError: python-docx is requireddoc2md 采用延迟导入缺少对应格式解析库时会抛出此错误。按需安装依赖pip install python-docx # Word (.docx) pip install python-pptx # PowerPoint (.pptx) pip install openpyxl # Excel (.xlsx) pip install pylatexenc # 数学公式支持或一次安装全部pip install paddleocr[doc2md]。Q格式不支持提示ValueError运行paddleocr doc2md --formats查看当前支持的扩展名。doc2md 仅支持.docx、.xlsx、.pptx不支持.doc旧版 Word、.csv、.pdf等格式。QExcel 转换后表格行数很多输出太长使用--max-rows限制每个 sheet 的行数paddleocr doc2md -i data.xlsx -o output.md --max-rows 100Q只想转换 Excel 中的某一个 sheet使用--sheet-name指定 sheet 名称paddleocr doc2md -i data.xlsx -o output.md --sheet-name Sheet1QWord 文档中的页眉页脚不需要如何跳过使用--no-headers-footers参数paddleocr doc2md -i report.docx -o output.md --no-headers-footersQ图片输出到哪里使用-o指定输出文件时图片自动保存在输出文件同目录的images/文件夹下Markdown 中的图片引用路径同步更新为相对路径。Qdoc2md 与 PaddleOCR 的 OCR 功能有什么区别doc2md 直接解析 Office 文档的 XML 结构不使用任何 OCR 模型速度快、零 GPU 依赖适用于拥有原始 Office 文件的场景PaddleOCR 的 OCR 功能则针对图片或扫描件进行文字识别适用于没有原始文档的场景。两者互为补充前者负责结构化文档 → 文本后者负责图像 → 文本。【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表