主题
LiteParse 提供一个完全运行在浏览器里的 WebAssembly 包 —— 不需要服务端,也不发起云端调用。它支持 PDF 解析,以及用 JavaScript 实现的自定义 OCR 引擎。
安装
终端窗口
npm install @llamaindex/liteparse-wasm快速开始
import init, { LiteParse } from "@llamaindex/liteparse-wasm";
// Load the WASM module
await init();
const parser = new LiteParse({
ocrEnabled: false,
outputFormat: "json",
});
// data is a Uint8Array (e.g. from <input type="file"> or fetch)
const bytes = new Uint8Array(await file.arrayBuffer());
const result = await parser.parse(bytes);
console.log(result.text);
console.log(result.pages[0]);浏览器里能用的是什么
- 从
Uint8Array输入解析 PDF(例如用file.arrayBuffer()从文件选择器取到字节) - 自定义 OCR,通过
ocrEngine回调接口(见下文) - 文本、JSON 与 markdown 三种输出格式
- 文档复杂度,用
parser.isComplex(bytes)—— 见复杂度指南 - 各项抽取选项 —— 批注、表单字段、结构树、矢量图形等,全部可用。见抽取选项
浏览器里用不了的是什么
- 文件路径输入 —— 请改传
Uint8Array - DOCX/XLSX/PPTX 转换 —— 需要 LibreOffice,而浏览器里没有它
- 内置 Tesseract 或 HTTP OCR —— 请改用自定义的
ocrEngine接口 - 页面截图 —— WASM 构建不提供
imageOutputDir—— 没有可写入的文件系统。请改用extractImages,从结果里读字节
浏览器里的 OCR
原生 Tesseract 与 HTTP OCR 后端在 WASM 下都不可用。要用 OCR,请传入一个带 recognize 方法的自定义 ocrEngine 对象:
const parser = new LiteParse({
ocrEnabled: true,
ocrLanguage: "eng",
// Use more than 1 only if the engine supports concurrent jobs.
numWorkers: 2,
ocrEngine: {
/**
* @param imageData PNG-encoded image bytes
* @param width rendered page width in pixels
* @param height rendered page height in pixels
* @param language e.g. "eng"
* @returns array of { text, bbox: [x1, y1, x2, y2], confidence }
*/
async recognize(imageData, width, height, language) {
// e.g. call a Web Worker wrapping tesseract.js, or a remote OCR service
return [
{ text: "Hello", bbox: [10, 20, 80, 40], confidence: 0.98 },
];
},
},
});这让你可以接入任何 OCR 实现 —— 跑在 Web Worker 里的 tesseract.js、某个云端 OCR API,或任何能返回带边界框文字的东西。
LiteParse 最多同时保持 numWorkers 次 recognize 调用在进行中。某次调用结束后,LiteParse 不会等其余调用,而是直接准备并启动下一页。OCR 引擎可以把这些调用派发给 Web Worker 池,或并发的 HTTP 请求。任务乱序完成时,结果仍然归属它们各自的来源页。进行中的调用最多会在内存里持有 numWorkers 张已渲染页面的位图,因此高 DPI 文档要把该值设小一些。
在 WASM 下,PDF 解析与渲染仍是单线程的。numWorkers 默认为 1,用于限制并发 OCR 调用数。LiteParse 自己不会创建 Web Worker。若要并行处理 OCR 任务,请提供一个支持并发作业的引擎。
配置项
全部可选,命名采用 camelCase:
| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
ocrLanguage | string | "eng" | 传给 OCR 引擎的语言代码 |
ocrEnabled | boolean | false | 对文字稀疏的页运行 OCR。WASM 下默认关闭 —— 没有内置引擎,所以没有 ocrEngine 时它什么都不做 |
ocrEngine | object | — | 自定义的 JS 侧 OCR 引擎(见上文) |
numWorkers | number | 1 | 最大并发 OCR 调用数 |
ocrFailureFatal | boolean | true | 为 false 时,OCR 失败返回部分结果而不是抛错 |
ocrHedgeDelaysMs | number[] | [] | 针对远程 ocrEngine 的请求对冲时间表 |
maxPages | number | 1000 | 到该页数后停止 |
targetPages | string | — | 例如 "1-5,10,15-20" |
dpi | number | 150 | OCR 用的渲染 DPI |
outputFormat | "json" | "text" | "markdown" | "json" | result.text 的形态。也接受 "md"。传其他值会抛错 |
preserveVerySmallText | boolean | false | 保留通常会被过滤掉的极小文字 |
skipDiagonalText | boolean | false | 丢弃与最近直角偏离超过 2° 的文字 |
cropBox | { top, right, bottom, left } | — | 从每页四边各裁掉的比例 |
pageOrientationCorrections | { page, angle }[] | — | 对列出的页(从 1 开始)按其内容在视口中呈现的顺时针 angle(0/90/180/270)做反向旋转 |
password | string | — | 受保护 PDF 的密码 |
quiet | boolean | false | 抑制进度日志 |
imageMode | "off" | "placeholder" | "embed" | "placeholder" | 图片引用在 markdown 里的呈现方式。off 也可写作 "none" |
extractLinks | boolean | true | 在 markdown 里渲染 [text](url) |
keepHeadersFooters | boolean | false | 在 markdown 里保留滚动的页眉/页脚 |
emitWordBoxes | boolean | false | 为每个文字项输出逐词的子框 |
抽取选项里的 extractImages、extractVectorGraphics、extractAnnotations、extractFormFields、extractStructureTree、extractContentBounds、extractXfaPackets、extractTextMetadata、includeComplexity 与 renderFormFields 在这里同样可用,camelCase 命名一致,默认值也都是 false。