☰
MonkeyOCRv2 输出格式完全指南:Markdown、JSON 与 OTSL 表格怎么读、怎么用
2026/10/11 13:03:53 网站建设 项目流程

【免费下载链接】MonkeyOCRv2

MonkeyOCRv2 Vision Encoder — A Document-Native Visual Backbone

项目地址:https://gitcode.com/gh_mirrors/mo/MonkeyOCRv2
点击查看免费下载

使用 MonkeyOCRv2 做文档解析时,你会同时得到 Markdown、JSON 和图片三类产物,其中的表格还会用 OTSL 格式表示。这篇指南带你快速读懂这三种解析输出格式,并说明各自适合什么场景、怎么用起来。

一、一次解析会生成什么?

用parse.py解析一个目录后,输出目录下每个文档会包含以下产物:

产物位置用途
Markdownmarkdowns/<文档名>.md人类阅读、直接二次编辑
结构化 JSONjsons/<文档名>.json程序化处理、取坐标和分类
汇总 JSONall_results.json批量结果聚合
裁出的图片images/<文档名>_subN.jpg文档中识别出的插图
版式可视化加--draw-layout后生成 layout PDF检查 bbox 是否画对

可以浏览仓库中真实解析结果:docs/parsing/id_exampaper_23_results/,其中markdowns、jsons、all_results.json三个位置与上面的说明一一对应。

二、JSON 输出:机器可读的完整结构

每个 JSON 文件顶层包含 4 个字段:

{ "image_name": "id_exampaper_23.jpg", "image_path": "id_exampaper_23.jpg", "image_size": [1700, 2200], "layouts": [ { "bbox": [196, 101, 945, 139], "label": "Page-header", "page_num": 1, "content": "CONTOH SOAL UJIAN CHARTERED ACCOUNTANT 2025" } ] }
  • bbox:元素在原图中的坐标[x1, y1, x2, y2],结合image_size可还原位置,也方便在原图上回画框。
  • label:元素类别,包括Title、Section-header、Text、List-item、Formula、Table、Picture、Caption、Footnote、Page-header、Page-footer等。
  • content:该块识别出的文本内容,按阅读顺序排列。

📌 实用技巧:做下游开发(如入库、RAG、版面分析)时,以 JSON 为准;做阅读和校对时再看 Markdown。示例可参考 id_exampaper_23.json。

三、Markdown 输出:给"人"看的版本

同一份文档的 Markdown(id_exampaper_23.md)大致长这样:

CONTOH SOAL UJIAN CHARTERED ACCOUNTANT 2025 18. Pernyataan berikut tidak tepat tentang faktor-faktor yang mempengaruhi keputusan penetapan harga:

与 JSON 相比有 3 个关键差异:

  1. 不保留坐标和类别标签,只保留内容文本;
  2. 默认丢弃页眉页脚(Page-header/Page-footer)。加--keep-header-footer参数后 Markdown 也会保留;
  3. 图片用相对路径引用:识别出的插图会存到output/images/,Markdown 里写作image;加--use-base64则改为 base64 内嵌。

四、表格怎么表示:OTSL + HTML 双格式

这是最容易困惑的部分。当label为Table时,JSON 块里同时有两个字段:

  • otsl:模型原始输出的 OTSL(Open Table Structure Language)字符串;
  • content:由 core_runner.py 中otsl_to_html()自动转换成的HTML 表格。

4.1 读懂 OTSL 记号

OTSL 用尖括号标签描述单元格结构,常见标签:

标签含义
<fcel>文本普通单元格,后跟内容
<lcel>本单元格向右跨列(对应 colspan 的延续)
<ucel>本单元格向上跨行(对应 rowspan 的延续)
<xcel>同时向上、向右跨(rowspan+colspan)
<ecel>空单元格
<nl>换行,一行单元格结束

一个真实例子(节选自 zh_financialpaper_43.json):

<fcel>渠道<fcel>品牌<fcel>销额同比<lcel><fcel>销量同比<lcel>...<nl><ucel><ucel><fcel>23M11<fcel>2023累计...

逐段翻译:

  • 第一行:渠道、品牌,销额同比向右跨 2 列(后面跟<lcel>);
  • 第二行:前两个<ucel>表示"被上方单元格纵向合并占用",然后是 23M11、2023累计 等子表头。

4.2 实际使用时看哪个?

绝大多数场景直接用content里的 HTML 即可,例如:

<table><tr><td rowspan="2">渠道</td><td rowspan="2">品牌</td> <td colspan="2">销额同比</td>...</tr>

OTSL 更适合两类场景:训练/评测数据准备(仓库提供 html2otsl.py 做 HTML↔OTSL 互转),以及调试模型原始输出。转换规则的单测见 test_otsl_to_html.py,里面覆盖了空单元格、跨行跨列、非法输入兜底等行为——也就是说,即使模型偶发出错,content字段也总能得到一个合法的<table>。

五、公式与其他块

Formula块的content是标准 LaTeX,Markdown 中以$$...$$呈现,例如:

$$J ^ { q } / J ^ { q + 1 } = S _ { 1 } \oplus S _ { 2 } \oplus \cdots \oplus S _ { p }$$

Picture块则不输出文本,content为图片的 Markdown 引用路径;Caption与Footnote与普通文本一样按阅读顺序进入 Markdown。

六、常用参数速查

在 parse.py 中,与输出格式相关的常用参数:

参数作用
-o输出目录(md/json/images 都写在这里)
--draw-layout额外生成版式可视化 PDF,肉眼检查 bbox
--keep-header-footerMarkdown 中保留页眉页脚(JSON 默认总是保留)
--use-base64图片内嵌 base64,不再生成images/目录
--skip-processed已生成 Markdown 的文档自动跳过,适合断点续跑
-t text / formula / table单任务模式,直接对裁剪块做文本/公式/表格识别

批量任务建议始终保留 JSON 输出作为"唯一事实来源",需要给人看时再渲染 Markdown;程序接口则可以参考 fastapi/main.py,它直接暴露了与本地 CLI 一致的解析结果。

小结

  • Markdown→ 阅读、校对、轻量编辑;
  • JSON→ 下游程序消费,bbox/label/content三要素齐全;
  • OTSL→ 表格原始结构语言,日常使用看自动转换出的 HTML 即可。

掌握这三层解析输出格式,你就能把 MonkeyOCRv2 的解析结果灵活接入自己的文档处理流水线。

【免费下载链接】MonkeyOCRv2

MonkeyOCRv2 Vision Encoder — A Document-Native Visual Backbone

项目地址:https://gitcode.com/gh_mirrors/mo/MonkeyOCRv2
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询