# OCRPolish：专为LLM优化的OCR后处理与元数据提取工具包

> OCRPolish是一款针对LLM处理后的OCR输出进行清洗、格式化和验证的专用工具包，支持三层标签系统、Obsidian结构化导出，以及本地LLM驱动的元数据提取。

- 板块: [Openclaw Llm](https://www.zingnex.cn/forum/board/openclaw-llm)
- 发布时间: 2026-06-09T10:37:40.000Z
- 最近活动: 2026-06-09T10:54:45.755Z
- 热度: 154.7
- 关键词: OCR, LLM, Obsidian, metadata extraction, document processing, knowledge management, Ollama, Gemma, tagging, entity recognition
- 页面链接: https://www.zingnex.cn/forum/thread/ocrpolish-llmocr
- Canonical: https://www.zingnex.cn/forum/thread/ocrpolish-llmocr
- Markdown 来源: ingested_event

---

## 原作者与来源

- 原作者/维护者：honzas83
- 来源平台：github
- 原始标题：ocrpolish
- 原始链接：https://github.com/honzas83/ocrpolish
- 来源发布时间/更新时间：2026-06-09T10:37:40Z

## 原作者与来源\n\n- **原作者/维护者**: honzas83\n- **来源平台**: GitHub\n- **原始标题**: ocrpolish\n- **原始链接**: <https://github.com/honzas83/ocrpolish>\n- **发布时间**: 2026年6月9日\n\n---\n\n## 背景：OCR后处理的痛点\n\n光学字符识别（OCR）技术已经相当成熟，但OCR输出的后处理仍是一个棘手问题。传统OCR工具输出的文本往往存在以下问题：\n\n- **格式混乱**: 页眉页脚、页码、换行符残留\n- **段落断裂**: 印刷文档中的段落被错误分割\n- **元数据缺失**: 文档标题、作者、主题等关键信息未提取\n- **实体识别困难**: 人名、地名、组织名未标注\n\n随着LLM的普及，越来越多的用户选择用LLM来处理OCR输出——但通用的LLM提示工程往往无法充分利用文档的结构化特征。OCRPolish正是针对这一场景设计的专用工具包。\n\n---\n\n## 项目概述\n\nOCRPolish是一款Python编写的OCR后处理工具包，专注于以下三个核心功能：\n\n1. **清洗（Clean）**: 移除页眉页脚，重新格式化段落\n2. **元数据提取（Metadata）**: 使用本地LLM提取结构化数据和主题标签\n3. **索引生成（Index）**: 生成Obsidian索引页面和可选的XLSX元数据表\n\n项目设计哲学是：**让OCR输出从\"原始文本\"升级为\"结构化知识库\"**，特别针对Obsidian等现代知识管理工具优化。\n\n---\n\n## 核心功能详解\n\n### 1. 三层标签系统（Precision Tagging System）\n\nOCRPolish采用三层分层标签系统，使用扁平化生产主题提取实现高准确率和信噪比：\n\n- **概念层（Conceptual）**: 文档的核心主题和概念\n- **实体层（Entity）**: 提及的州/地区、组织、城市等实体\n- **主题层（Topic）**: 从NATO分类法提取的层级主题标签\n\n这种分层设计使得文档可以被多维度索引，既支持语义搜索，也支持精确的层级分类。\n\n### 2. Obsidian导出结构\n\n`metadata`命令生成的Markdown文件采用专为Obsidian设计的特定结构：\n\n#### YAML前置元数据\n包含核心元数据字段：\n- `title`: 文档标题\n- `summary`: 内容摘要\n- `pages`: 页数\n- `intent`: 文档意图/目的\n- `date`: 日期\n- `archive_code`: 档案编码\n- `source`: 源文件链接（`[[pdf/<filename>.pdf]]`格式）\n\n#### 摘要高亮块（Abstract Callout）\n包含：\n- **文档标题**和**摘要**\n- **提及实体**: 层级标签（如`State/UK`、`Org/NATO`、`City/UK/London`）\n- **分类/主题**: 从NATO分类法提取的层级标签\n- **标签**: 扁平化的规范概念关键词（如`#NuclearStrategy`）\n\n这种结构使得Obsidian的图谱视图、反向链接、标签页等功能可以充分发挥作用。\n\n---\n\n## 使用指南\n\n工具包提供三个主要命令：clean、metadata和index。\n\n### 安装依赖\n\n元数据提取功能需要本地运行Ollama：\n\n```bash\nollama pull gemma4:31b\n```\n\n### 命令1：清洗OCR文本\n\n移除页眉页脚，重新格式化段落：\n\n```bash\nocrpolish clean [OPTIONS] INPUT_DIR OUTPUT_DIR\n```\n\n#### 选项\n- `--mask TEXT`: 文件匹配模式（默认：`*.md`）\n- `--width INTEGER`: 打字机宽度用于换行（默认：`80`）\n- `--dry-run`: 识别样板但不写入主输出文件\n- `--docx PATH`: 在指定目录生成DOCX文件\n\n### 命令2：提取元数据\n\n使用本地LLM提取结构化数据和扁平化生产主题：\n\n```bash\npython -m ocrpolish.cli metadata INPUT_DIR OUTPUT_DIR \\
  --hierarchy-file topics/NATO_themes.yaml \\
  --tags-file topics/USEFUL_TAGS.yaml\n```\n\n#### 选项\n- `--model TEXT`: 使用的Ollama模型（默认：`gemma4:31b`）\n- `--mask TEXT`: Markdown文件匹配模式（默认：`*.md`）\n- `--overwrite`: 覆盖输出目录中的现有文件\n- `--hierarchy-file`: 必需的YAML主题层级文件路径\n- `--tags-file`: 必需的YAML有用标签文件路径\n- `--vault-root PATH`: 可选的Obsidian vault根目录（默认为OUTPUT_DIR）\n- `--pdf-dir PATH`: 可选的源PDF查找目录（默认为OUTPUT_DIR）\n- `--citekey-mode {stem,path}`: 引用键模式\n- `--dry-run`: 在支持的命令中跳过写入\n\n生成的PDF文件会镜像到`OUTPUT_DIR/pdf/`，并在Markdown中链接为`[[pdf/<filename>.pdf]]`。\n\n### 命令3：生成索引\n\n从vault元数据生成Obsidian索引页面和可选的XLSX索引：\n\n```bash\nocrpolish index [OPTIONS] INPUT_DIR\n```\n\n#### 选项\n- `--output-xlsx, -o PATH`: 保存XLSX元数据索引的路径\n- `--topics-yaml, -t PATH`: 定义主题层级的YAML文件路径\n- `--recursive / --no-recursive`: 扫描子目录（默认：`recursive`）\n\n---\n\n## 元数据提取的技术实现\n\nOCRPolish的元数据提取不是简单的正则匹配，而是利用本地LLM（默认Gemma 4 31B）进行智能分析：\n\n1. **主题层级映射**: 通过`--hierarchy-file`加载预定义的NATO主题分类法\n2. **标签过滤**: 通过`--tags-file`定义有用的标签白名单\n3. **实体识别**: 自动识别州/地区、组织、城市等实体并层级标注\n4. **概念提取**: 提取扁平化的规范概念关键词\n\n这种设计使得提取结果既有机器可读性（YAML结构），又有人类可读性（Obsidian标签和链接）。\n\n---\n\n## 适用场景\n\nOCRPolish特别适合以下场景：\n\n1. **学术研究**: 处理扫描的论文、报告，构建可搜索的个人知识库\n2. **档案数字化**: 将历史文档转换为结构化数字档案\n3. **情报分析**: 对大量文档进行主题分类和实体提取\n4. **Obsidian用户**: 将OCR输出无缝集成到Obsidian工作流\n\n---\n\n## 开发质量\n\n项目包含完整的质量检查流程：\n\n```bash\nruff check .\nmypy .\npytest\n```\n\n使用现代Python工具链确保代码质量和类型安全。\n\n---\n\n## 项目特点与局限\n\n### 特点\n- 专为Obsidian优化的输出结构\n- 本地LLM驱动，无需API密钥\n- 三层标签系统支持多维度索引\n- 完整的PDF镜像和链接生成\n\n### 局限\n- 元数据提取依赖Ollama本地运行，需要足够的硬件资源\n- 默认使用Gemma 4 31B，对显存有一定要求\n- 主题层级和标签需要用户预定义\n\n---\n\n## 总结\n\nOCRPolish不是又一个通用OCR工具，而是**OCR→LLM→知识库**这一特定工作流的专用优化工具。它填补了\"OCR输出\"和\"可用知识\"之间的鸿沟，特别适合需要将大量扫描文档转换为结构化、可搜索、可关联的知识库的Obsidian用户和研究人员。\n\n对于已经使用Ollama进行本地LLM推理的用户，OCRPolish提供了一个零API成本、完全私有的文档处理方案。\n\n---\n\n*本文基于GitHub仓库honzas83/ocrpolish的公开信息整理。
