如何快速导出 LiteParse 布局块(Layout Blocks):版面分类数据完整指南
【免费下载链接】liteparseA fast, helpful, and open-source document parser项目地址: https://gitcode.com/GitHub_Trending/li/liteparse
LiteParse 是一款快速、轻量、完全开源的本地文档解析工具。除了输出 Markdown 和纯文本,它还能把文档的版面分类结果——即布局块(Layout Blocks)——连同每个块在页面上的坐标一并导出为结构化 JSON。只需一个--extract-blocks开关,你无需再手动拼接零散的文字片段,就能拿到"标题在哪、表格在哪个区域、代码块边界是多少"的完整数据,非常适合 RAG 切分、视觉引用和版面校验场景。
上图是 LiteParse 集成测试使用的一份扫描收据样本,其中的表头行、分隔线和商品明细行,正是版面分类器要识别的典型布局块。
什么是布局块:8 种版面元素一览
LiteParse 的 Markdown 渲染器本身就在工作:它先把页面逐行分类为不同"块",再渲染成 Markdown。开启布局块导出后,你拿到的就是渲染器内部使用的同一份分类结果——同样的顺序、同样的块,只是从"渲染文本"变成了"可查询数据"。
每个块都有一个kind,共 8 种类型:
| 类型(kind) | 含义 | 附带的关键字段 |
|---|---|---|
heading | 标题 | text、level(1–6 级) |
paragraph | 段落 | text,可选bold/italic |
list_item | 列表项 | text、ordered、marker、level |
code | 代码块 | lines(逐行原文)、lang |
table | 表格 | header、rows(单元格均带独立坐标) |
grid_fallback | 无法确信分类的表格区域(原样保留) | lines |
rule | 水平分隔线 | 仅坐标 |
figure | 图片引用 | id、format |
重点提示:表格单元格不是裸字符串,而是带text和bbox的对象——这意味着你可以把"某个单元格"直接映射回它在页面上的具体区域,实现单元格级别的引用与高亮。
一条命令导出版面分类数据
无论通过npm、pip还是cargo安装,LiteParse 都提供同一个lit命令行工具。导出布局块只需一行:
lit parse document.pdf --format json --extract-blocks -o output.json生成的 JSON 中,每个页面会新增一个按阅读顺序排列的blocks数组。块内坐标采用与text_items一致的左上角原点、72-DPI 视口坐标系,方便直接叠加渲染。
例如一个表格块导出后长这样(节选自项目文档示例):
{ "kind": "table", "bbox": { "x": 72.0, "y": 310.5, "width": 468.0, "height": 96.0 }, "header": [ { "text": "Territory Code", "bbox": { "x": 72.0, "y": 310.5, "width": 120.0, "height": 24.0 } }, { "text": "Factor", "bbox": { "x": 192.0, "y": 310.5, "width": 96.0, "height": 24.0 } } ], "rows": [ [ { "text": "001", "bbox": { "x": 72.0, "y": 334.5, "width": 120.0, "height": 24.0 } }, { "text": "1.25", "bbox": { "x": 192.0, "y": 334.5, "width": 96.0, "height": 24.0 } } ] ] }关于坐标的两个细节值得注意:
- 块的
bbox是所有源行边界的并集——换行的标题或多行段落会报告它占据的完整带状区域; - 为"补齐参差网格"而存在的空单元格没有
bbox,因为它在页面上没有真实墨迹。
各语言开启方式速查
| 环境 | 开启方式 |
|---|---|
| CLI | --extract-blocks |
| Rust | extract_blocks: true |
| Python | extract_blocks=True |
| JavaScript / WASM | extractBlocks: true |
选项默认为关闭,不改变默认的 JSON 输出结构。官方文档中对应章节可参考docs/src/content/docs/liteparse/guides/extraction.mdx的 "Layout blocks" 小节,以及docs/src/content/docs/liteparse/guides/visual-citations.mdx中用布局块做整块引用的做法。
布局块导出的 3 个典型应用场景
📍视觉引用(Visual Citations)给 LLM Agent 回答做"划词高亮"时,逐个文字片段拼坐标非常繁琐;而每个布局块自带覆盖全部源行的bbox,直接圈出整个标题、段落或表格区域即可,表格还能细化到单元格。
🧩RAG 结构化切分按块而非按固定字数切分文档,每个 chunk 天然携带类型(段落 / 表格 / 代码)与位置信息,检索命中后可精确回溯到页面区域。
🔍版面解析质量审计把blocks与渲染截图叠画比对,快速定位分类器误判(比如把脚注误判成标题)的区域,适合构建评测集时做标注对齐。
核心实现位置导览
想了解或二次开发分类逻辑,可以从以下模块入手:
crates/liteparse/src/markdown_layout/mod.rs— 版面分类模块入口,导出Block、PositionedBlock与页面分类函数crates/liteparse/src/markdown_layout/blocks.rs#L82-L132—Block枚举定义,8 种版面元素的源头crates/liteparse/src/markdown_layout/classify.rs#L74-L81— 页面分类主流程classify_page_with_filterscrates/liteparse/src/layout.rs#L46-L95— 导出用的LayoutBlock结构体(JSON 中blocks数组的元素)crates/liteparse/src/config.rs#L75-L85—extract_blocks配置项定义crates/liteparse/src/parser.rs#L241-L269—apply_layout:分类一次、同时供给 Markdown 与 blocks 两个消费方crates/liteparse/tests/integration_test.rs#L349-L390— 验证"开启导出后 Markdown 不变、每个块均带坐标、块按阅读顺序排列"的集成测试
使用小贴士 ⭐
- 不影响 Markdown 输出:开启
--extract-blocks后渲染出的 Markdown 与关闭时逐字节一致,可放心同时导出两种产物; - 顺序即阅读顺序:单栏页面上
blocks按 y 坐标自上而下排列,多栏页面则遵循分类器重建的阅读流; - 坐标空间统一:
blocks、text_items、截图标注共用同一套左上原点 72-DPI 坐标,无需换算即可互相映射; - 空页返回空列表而非缺失:开启了导出但页面无可分解内容时,
blocks为空数组,便于下游代码统一处理。
从一条 CLI 命令到带坐标的结构化 JSON,LiteParse 的布局块导出让"版面分类"从渲染器的内部过程变成了可自由消费的数据——这正是构建下一代文档理解流水线所需要的底层原料。
【免费下载链接】liteparseA fast, helpful, and open-source document parser项目地址: https://gitcode.com/GitHub_Trending/li/liteparse
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考