run-llama/liteparse
GitHub: run-llama/liteparse
LiteParse 是一款快速、轻量的本地开源文档解析工具,提供带边界框的高质量空间文本解析和灵活的 OCR 能力,适用于 RAG 和 LLM 数据预处理。
Stars: 11727 | Forks: 792
# LiteParse
[](https://github.com/run-llama/liteparse/actions/workflows/ci.yml)
|
[](https://crates.io/crates/liteparse)
|
[](https://www.npmjs.com/package/@llamaindex/liteparse)
|
[](https://www.npmjs.com/package/@llamaindex/liteparse-wasm)
|
[](https://pypi.org/project/liteparse/)
|
[](https://opensource.org/licenses/Apache-2.0)
|
[文档](https://developers.llamaindex.ai/liteparse/)
English | [简体中文](README.zh-CN.md)
LiteParse 是一款独立的开源 PDF 解析工具,专注于**快速且轻量**的解析。它提供带有边界框的高质量空间文本解析,无需专有的 LLM 功能或云依赖。所有操作均在您的本地机器上运行。
**遇到了本地解析的瓶颈?**
对于复杂的文档(密集的表格、多列布局、图表、手写文本或扫描版 PDF),使用 [LlamaParse](https://developers.llamaindex.ai/python/cloud/llamaparse/?utm_source=github&utm_medium=liteparse) 将获得显著更好的效果。这是我们专为生产环境文档流水线构建的云端文档解析器。LlamaParse 负责处理棘手的部分,让您的模型能看到干净、结构化的数据和 markdown。
## 概述
- **快速文本解析**:使用 PDFium 进行空间文本解析
- **灵活的 OCR 系统**:
- **内置**:Tesseract(零配置,随库一起打包)
- **HTTP 服务器**:插入任何 OCR 服务器(EasyOCR、PaddleOCR 或自定义服务器)
- **标准 API**:简单、定义明确的 OCR API 规范
- **复杂度检测**:以极低成本检查文档是否需要 OCR 或更深度的解析——在进行完整解析之前进行路由、拒绝或估算成本
- **截图生成**:为 LLM 代理生成高质量页面截图
- **多种输出格式**:Markdown、JSON 和 Text
- **Markdown 输出**:包含标题、表格、列表、图像和链接的结构化 Markdown——非常适合用于输入给 LLM 和 RAG 流水线
- **边界框**:精确的文本定位信息
- **多语言支持**:可从 Rust、Node.js/TypeScript、Python 或浏览器 (WASM) 中使用
- **多平台支持**:Linux、macOS (Intel/ARM)、Windows
```
flowchart LR
subgraph Input["Input Formats"]
direction TB
PDF["PDF"]
DOCX["DOCX"]
XLSX["XLSX"]
PPTX["PPTX"]
IMG["Images"]
end
subgraph Core["Rust Core"]
direction TB
CONV["Format Conversion\nLibreOffice / ImageMagick"]
EXTRACT["Text Extraction\nPDFium C library"]
OCR["Selective OCR\nTesseract / HTTP / Custom"]
MERGE["OCR Merge\nNative text + OCR results"]
PROJ["Grid Projection\nSpatial layout reconstruction"]
CONV --> EXTRACT
EXTRACT --> OCR --> MERGE --> PROJ
EXTRACT --> MERGE
end
subgraph Output[" Output "]
direction TB
JSON["Structured JSON\ntext + bounding boxes"]
TEXT["Plain Text\nlayout-preserved"]
SCREEN["Screenshots\nPNG rendering"]
end
subgraph Bindings["Language Bindings"]
direction TB
NAPI["Node.js / TypeScript\nnapi-rs"]
PYO3["Python\nPyO3"]
WASM["Browser / WASM\nwasm-bindgen"]
CLI["CLI\ncargo / npm / pip"]
NAPI ~~~ PYO3 ~~~ WASM ~~~ CLI
end
PDF --> EXTRACT
DOCX & XLSX & PPTX & IMG --> CONV
PROJ --> JSON & TEXT & SCREEN
JSON & TEXT & SCREEN --> Bindings
style Input fill:#F5F5F5,color:#000000,stroke:#37D7FA,stroke-width:2px
style Core fill:#F5F5F5,color:#000000,stroke:#3E18F9,stroke-width:2px
style Output fill:#F5F5F5,color:#000000,stroke:#FF8705,stroke-width:2px
style Bindings fill:#F5F5F5,color:#000000,stroke:#FF8DF2,stroke-width:2px
style PDF fill:#96E7F9,color:#000000,stroke:#37D7FA,stroke-width:1px
style DOCX fill:#96E7F9,color:#000000,stroke:#37D7FA,stroke-width:1px
style XLSX fill:#96E7F9,color:#000000,stroke:#37D7FA,stroke-width:1px
style PPTX fill:#96E7F9,color:#000000,stroke:#37D7FA,stroke-width:1px
style IMG fill:#96E7F9,color:#000000,stroke:#37D7FA,stroke-width:1px
style CONV fill:#92AEFF,color:#000000,stroke:#4B72FE,stroke-width:1px
style EXTRACT fill:#92AEFF,color:#000000,stroke:#4B72FE,stroke-width:1px
style OCR fill:#92AEFF,color:#000000,stroke:#4B72FE,stroke-width:1px
style MERGE fill:#92AEFF,color:#000000,stroke:#4B72FE,stroke-width:1px
style PROJ fill:#4B72FE,color:#FFFFFF,stroke:#3E18F9,stroke-width:2px
style JSON fill:#FFBD74,color:#000000,stroke:#FF8705,stroke-width:1px
style TEXT fill:#FFBD74,color:#000000,stroke:#FF8705,stroke-width:1px
style SCREEN fill:#FFBD74,color:#000000,stroke:#FF8705,stroke-width:1px
style NAPI fill:#FFBFF8,color:#000000,stroke:#FF8DF2,stroke-width:1px
style PYO3 fill:#FFBFF8,color:#000000,stroke:#FF8DF2,stroke-width:1px
style WASM fill:#FFBFF8,color:#000000,stroke:#FF8DF2,stroke-width:1px
style CLI fill:#FFBFF8,color:#000000,stroke:#FF8DF2,stroke-width:1px
```
## 安装说明
通过您首选的包管理器进行安装。所有版本(WASM 除外)都提供相同的 `lit` CLI。
| 语言 | 安装 | 库文档 |
|----------|---------|--------------|
| **Node.js / TypeScript** | `npm i @llamaindex/liteparse` | [Node.js README](packages/node/README.md) |
| **Python** | `pip install liteparse` | [Python README](packages/python/README.md) |
| **Rust** | `cargo install liteparse` (CLI) / `cargo add liteparse` (库) | [Rust README (crates.io)](crates/liteparse/README.md) |
| **浏览器 (WASM)** | `npm i @llamaindex/liteparse-wasm` | [WASM README](packages/wasm/README.md) |
### Agent Skill
您可以将 `liteparse` 用作一种 agent skill,并使用 `skills` CLI 工具进行下载:
```
npx skills add run-llama/llamaparse-agent-skills --skill liteparse
```
或者直接将 [`SKILL.md`](https://github.com/run-llama/llamaparse-agent-skills/blob/main/skills/liteparse/SKILL.md) 文件复制粘贴到您自己的 skills 配置中。
## CLI 用法
所有安装方式(`npm`、`pip`、`cargo install`)的 CLI 均相同。
### 解析文件
```
# 基础解析
lit parse document.pdf
# 解析为 Markdown — 标题、表格、列表、图像、链接
lit parse document.pdf --format markdown -o output.md
# 使用特定格式解析
lit parse document.pdf --format json -o output.json
# 解析特定页面
lit parse document.pdf --target-pages "1-5,10,15-20"
# 不使用 OCR 解析
lit parse document.pdf --no-ocr
# 解析远程 PDF
curl -sL https://example.com/report.pdf | lit parse -
```
### Markdown 输出
LiteParse 可以将文档直接渲染为 Markdown。这意味着从空间布局中重建标题、表格、列表、图像和链接。这非常适合将文档输入给 LLM 和 RAG 流水线。此模式完全基于启发式方法和规则,因此复杂文档可能无法完美渲染,但速度会非常快。
```
# 渲染为 Markdown
lit parse document.pdf --format markdown -o output.md
# 移除图像而不是发出占位符
lit parse document.pdf --format markdown --image-mode off
# 将嵌入的图像提取到磁盘并从 markdown 中引用它们
lit parse document.pdf --format markdown --image-mode embed --image-output-dir ./images
# 将链接文本作为纯文本发出(不使用 [text](url) 语法)
lit parse document.pdf --format markdown --no-links
```
图像处理由 `--image-mode` 控制:
| 模式 | 行为 |
|------|----------|
| `placeholder` (默认) | 按阅读顺序输出 `` 引用 |
| `off` | 完全剔除图像 |
| `embed` | 将每个图像的 PNG 字节写入 `--image-output-dir` 并进行引用 |
### 检查复杂度
在进行完整解析之前,检查文档是否确实需要 OCR 或更深度的处理。这是一种仅针对文本层的低成本检查——适用于将文档路由到不同的流水线、拒绝无法处理的文档或估算成本。
```
# 打印复杂度判定结果和逐页 JSON
lit is-complex document.pdf
# 作为 shell 谓词使用 — 仅在文档简单时使用 --no-ocr 进行解析
lit is-complex document.pdf --quiet && lit parse document.pdf --no-ocr
# 列出需要 OCR 的页面
lit is-complex document.pdf --compact | jq '[.[] | select(.needs_ocr) | .page_number]'
```
它总是将逐页的 JSON 打印到 **stdout**,将人类可读的结论打印到 **stderr**,并在**任何页面需要 OCR 时以非零状态退出**。每一页都包含一个 `needs_ocr` 结论以及一系列 `reasons`(`scanned`、`no-text`、`sparse-text`、`embedded-images`、`garbled`、`vector-text`)。
### 批量解析
解析整个目录中的文档:
```
lit batch-parse ./input-directory ./output-directory
```
### 生成截图
截图对于 LLM 代理提取单凭文本无法捕获的视觉信息至关重要。
```
# 截取所有页面
lit screenshot document.pdf -o ./screenshots
# 截取特定页面
lit screenshot document.pdf --target-pages "1,3,5" -o ./screenshots
# 自定义 DPI
lit screenshot document.pdf --dpi 300 -o ./screenshots
```
### CLI 参考
#### 解析命令
```
lit parse [OPTIONS]
Options:
-o, --output Output file path
--format Output format: json|text|markdown [default: text]
--no-ocr Disable OCR
--ocr-language OCR language, Tesseract format [default: eng]
--ocr-server-url HTTP OCR server URL (uses Tesseract if not provided)
--tessdata-path Path to tessdata directory
--max-pages Max pages to parse [default: 1000]
--target-pages Pages to parse (e.g., "1-5,10,15-20")
--dpi Rendering DPI [default: 150]
--image-mode Markdown image handling: off|placeholder|embed [default: placeholder]
--image-output-dir Where to write images when --image-mode embed
--no-links Emit link anchor text as plain text (no [text](url)) in markdown
--preserve-small-text Keep very small text
--password Password for encrypted documents
--num-workers Concurrent OCR workers [default: CPU cores - 1]
-q, --quiet Suppress progress output
-h, --help Print help
```
#### 批量解析命令
```
lit batch-parse [OPTIONS]
Options:
--format Output format: json|text|markdown [default: text]
--no-ocr Disable OCR
--ocr-language OCR language [default: eng]
--ocr-server-url HTTP OCR server URL
--tessdata-path Path to tessdata directory
--max-pages Max pages per file [default: 1000]
--dpi Rendering DPI [default: 150]
--recursive Recursively search input directory
--extension Only process files with this extension (e.g., ".pdf")
--password Password for encrypted documents
--num-workers Concurrent OCR workers
-q, --quiet Suppress progress output
-h, --help Print help
```
#### 截图命令
```
lit screenshot [OPTIONS]
Options:
-o, --output-dir Output directory [default: ./screenshots]
--target-pages Pages to screenshot (e.g., "1,3,5" or "1-5")
--dpi Rendering DPI [default: 150]
--password Password for encrypted documents
-q, --quiet Suppress progress output
-h, --help Print help
```
#### Is-Complex 命令
```
lit is-complex [OPTIONS]
Options:
--compact Emit dense, whitespace-free JSON instead of pretty-printed
--max-pages Max pages to check [default: 1000]
--target-pages Pages to check (e.g., "1-5,10,15-20")
--password Password for encrypted documents
-q, --quiet Suppress the stderr verdict
-h, --help Print help
```
将逐页 JSON 打印到 stdout,并将 `COMPLEX`/`SIMPLE` 结论打印到 stderr;当任何页面需要 OCR 时以非零状态退出,因此它可以作为 shell 断言组合使用。
## OCR 设置
### 默认:Tesseract
Tesseract 已内置,开箱即用:
```
lit parse document.pdf # OCR enabled by default
lit parse document.pdf --ocr-language fra # Specify language
lit parse document.pdf --no-ocr # Disable OCR
```
对于离线或物理隔离的环境,请将 `TESSDATA_PREFIX` 设置为包含预下载 `.traineddata` 文件的目录:
```
export TESSDATA_PREFIX=/path/to/tessdata
lit parse document.pdf --ocr-language eng
```
或者直接传递路径:
```
lit parse document.pdf --tessdata-path /path/to/tessdata
```
### 可选:HTTP OCR 服务器
为了获得更高的准确性或更好的性能,您可以使用 HTTP OCR 服务器。我们为流行的 OCR 引擎提供了可直接使用的示例包装器:
- [EasyOCR](ocr/easyocr/README.md)
- [PaddleOCR](ocr/paddleocr/README.md)
您可以通过实现简单的 LiteParse OCR API 规范(参见 [`OCR_API_SPEC.md`](OCR_API_SPEC.md))来集成任何 OCR 服务。
该 API 要求:
- POST `/ocr` endpoint
- 接受 `file` 和 `language` 参数
- 返回 JSON:`{ results: [{ text, bbox: [x1,y1,x2,y2], confidence }] }`
## 多格式输入支持
LiteParse 支持在解析前将各种文档格式**自动转换**为 PDF。
### 支持的输入格式
#### Office 文档(通过 LibreOffice)
- **Word**: `.doc`, `.docx`, `.docm`, `.odt`, `.rtf`, `.pages`
- **PowerPoint**: `.ppt`, `.pptx`, `.pptm`, `.odp`, `.key`
- **电子表格**: `.xls`, `.xlsx`, `.xlsm`, `.ods`, `.csv`, `.tsv`, `.numbers`
安装 LibreOffice 以进行自动转换:
```
# macOS
brew install --cask libreoffice
# Ubuntu/Debian
apt-get install libreoffice
# Windows
choco install libreoffice-fresh
```
#### 图像(通过 ImageMagick)
- **格式**: `.jpg`, `.jpeg`, `.png`, `.gif`, `.bmp`, `.tiff`, `.webp`, `.svg`
安装 ImageMagick 以进行图像到 PDF 的转换:
```
# macOS
brew install imagemagick
# Ubuntu/Debian
apt-get install imagemagick
# Windows
choco install imagemagick.app
```
## 环境变量
| 变量 | 描述 |
|----------|-------------|
| `TESSDATA_PREFIX` | 包含 Tesseract `.traineddata` 文件的目录路径。用于离线/物理隔离环境。 |
## 开发
该项目是一个 Rust workspace,包含核心库和特定语言的 binding crate。
```
crates/
├── liteparse/ # Core library + CLI binary
├── liteparse-napi/ # Node.js bindings (napi-rs)
├── liteparse-python/ # Python bindings (PyO3)
├── liteparse-wasm/ # WASM bindings (wasm-bindgen)
├── pdfium/ # PDFium Rust wrapper
└── pdfium-sys/ # PDFium FFI bindings
packages/
├── node/ # npm package (TS wrapper + native binary)
├── python/ # PyPI package (Python wrapper + native binary)
└── wasm/ # WASM npm package
```
### 构建
```
# 构建 CLI
cargo build --release -p liteparse
# 构建 Node.js bindings
cd packages/node && npm run build
# 构建 Python bindings
cd packages/python && maturin develop --release
# 构建 WASM
cd packages/wasm && npm run build
```
我们提供了内容相当丰富的 `AGENTS.md`/`CLAUDE.md`,建议您使用它来辅助开发 + 编码代理。
## 许可证
Apache 2.0
## 鸣谢
基于以下项目构建:
- [PDFium](https://pdfium.googlesource.com/pdfium/) - PDF 渲染和文本提取
- [Tesseract](https://github.com/tesseract-ocr/tesseract) - OCR 引擎(通过 tesseract-rs)
- [EasyOCR](https://github.com/JaidedAI/EasyOCR) - HTTP OCR 服务器(可选)
- [PaddleOCR](https://github.com/PaddlePaddle/PaddleOCR) - HTTP OCR 服务器(可选)
- [napi-rs](https://napi.rs/) - Node.js 原生绑定
- [PyO3](https://pyo3.rs/) - Python 原生绑定
- [wasm-bindgen](https://github.com/wasm-bindgen/wasm-bindgen) - WebAssembly 绑定
标签:OCR, PDF解析, 二进制发布, 可视化界面, 开源工具, 文档解析, 通知系统