【免费下载链接】MonkeyOCRv2
MonkeyOCRv2 Vision Encoder — A Document-Native Visual Backbone
使用 MonkeyOCRv2 做文档解析时,你会同时得到 Markdown、JSON 和图片三类产物,其中的表格还会用 OTSL 格式表示。这篇指南带你快速读懂这三种解析输出格式,并说明各自适合什么场景、怎么用起来。
一、一次解析会生成什么?
用parse.py解析一个目录后,输出目录下每个文档会包含以下产物:
| 产物 | 位置 | 用途 |
|---|---|---|
| Markdown | markdowns/<文档名>.md | 人类阅读、直接二次编辑 |
| 结构化 JSON | jsons/<文档名>.json | 程序化处理、取坐标和分类 |
| 汇总 JSON | all_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 个关键差异:
- 不保留坐标和类别标签,只保留内容文本;
- 默认丢弃页眉页脚(
Page-header/Page-footer)。加--keep-header-footer参数后 Markdown 也会保留; - 图片用相对路径引用:识别出的插图会存到
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-footer | Markdown 中保留页眉页脚(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
相关推荐
Tiled导出格式全景指南:TMX、JSON、tBIN、TSCN怎么选并对接游戏引擎
Tiled导出格式全景指南:TMX、JSON、tBIN、TSCN怎么选并对接游戏引擎 Tiled 是一款功能强大的 2D 关卡编辑器,支持将地图导出为 TMX、
游戏开发桌面应用开发工具Headset开发者指南:如何基于Electron构建现代化音乐播放器应用
Headset开发者指南:如何基于Electron构建现代化音乐播放器应用 Headset是一款基于Electron构建的跨平台音乐播放器,支持Mac、Wind
OpenCode 报 ProviderModelNotFoundError 怎么检查模型引用格式
OpenCode 报 ProviderModelNotFoundError 怎么检查模型引用格式 在使用 OpenCode(TUI 或 CLI)时,如果报出 P
人工智能AI 应用AI Agent代码智能体CLI开发者工具
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考