PDF-OCR文件识别篇(八):配置、运维与排错

8.1 配置清单

application.yml(或配置中心)中配置:

java 复制代码
pdf:
  baidu:
    ocr:
      api-key: 你的百度应用 API Key
      secret-key: 你的百度应用 Secret Key
      # token-url / doc-parse-task-url / doc-parse-query-url 一般用默认
      doc-parse-poll-interval-ms: 5000
      doc-parse-max-attempts: 40
      expire-buffer: 86400            # Token 提前 1 天刷新
  ai:
    api-key: "{id}.{secret}"          # 大模型 API Key
    model: glm-4-flash                # 性价比;要更准用 glm-4-plus
    base-url: https://open.bigmodel.cn/api/paas/v4/chat/completions
    temperature: 0.1
    stream: true
    use-file: false                   # true=文件抽取路径
    max-tokens: 16384                 # 大表防截断
    timeout: 300000                   # 单次调用超时 5 分钟
    concurrency: 4                    # 并行线程数
    chunk-page-size: 2
    chunk-char-threshold: 2147483647  # 默认不分块
    poll-interval-ms: 8000            # 异步结果轮询间隔
    pdf-save-dir:  D:/files/ai-split
    data-json-dir: D:/files/ai-json
    ocr-json-dir:  D:/files/ocr-json
    schema-path:                      # 外部字段定义文件(可选,优先于内置)
    split-headings:                   # 除了按照表号外 按照标题也分割
      - 补充说明
      - 附录信息

8.2 运维要点

  • Redis 必须可用 :Access Token 缓存依赖 RedisCache
  • @Scheduled 必须开启 :启动类加 @EnableScheduling,否则异步抽取结果永远停在「抽取中」。
  • 落盘目录需有写权限 :生产建议挂持久卷;pdf-save-dir / data-json-dir / ocr-json-dir 三处。
  • 超时联动 :百度大文件解析慢,doc-parse-max-attempts × interval 决定最长等待;大模型长输出时 timeoutmax-tokens 要同步放大。
  • 字段定义可热调 :把 schema-path 指到外部文件,改字段不必重启/重打包。

8.3 实操:如何新增一张表的抽取

抽取与还原(第 3、5、6 章)是通用 的,新增一张表通常只动下面五处:

  1. 加字段定义table-schema.json 增加以「表标题」为 key 的 example(或 fields),决定 AI 输出结构。
  2. 建业务 VO + 库表domain/XxxImportVoresources/sql/ 加建表脚本,mapper/ + resources/mapper/ 加 Mapper。
  3. 写装配器convert/ 新增 XxxImportAssembler.assemble(dataJson),解包 rootKey、归并明细、字段别名兜底,输出 VO。
  4. 加导入方法IImportService / ImportServiceImpl 增加 importXxx(vo) 落库。
  5. 接分派ExtractionRecordServiceImpl.importToLibrary 的表号 switch 接上新装配器与导入方法。

验证:上传含该表的 PDF → ocr-parse(百度 OCR 识别成 JSON)→ 调AI → 看 data_jsonimportToLibrary

8.4 常见问题与排错

现象 可能原因 处理
百度OCR鉴权失败:未配置 apiKey/secretKey 配置缺失 pdf.baidu.ocr.api-key/secret-key
文档解析一直超时 文件过大或网络慢 调大 doc-parse-max-attempts / interval
调接口报 error_code=110/111 Token 失效 已自动刷新重试一次;持续失败检查 Key 是否被禁用
AI输出超长被截断(finish_reason=length) 大表 JSON 超 max-tokens 调大 max-tokens,或对该表降低 chunk-char-threshold 启用分块
抽取结果列名/层级与库不符 模型输出波动 table-schema.json 补/收紧 example,或在装配器加兜底映射
状态一直「抽取中」 未开启定时任务 启动类加 @EnableScheduling;检查 poll-interval-ms
合并单元格只有首行有值 提示词未生效或 OCR 识别结构丢失 检查 SYSTEM_PROMPT 第 4 条;核对 OCR 识别 JSON 是否还原了合并结构
标题未被识别为表 标题不匹配 ^表\d+ 检查 PDF 文本提取结果;必要时用 split-headings 配关键词
同一张表被切成多段 跨页标题去重失效 检查 normalizeTitle 是否覆盖该标题格式

8.5 全系列回顾

一句话
01 总览 两模块组成「PDF → 结构化数据」流水线,按表为最小单元
02 选型 baiduocr 零额外依赖;pdf-extraction 用 PDFBox + 模型SDK(Tabula 已废弃)
03 PDF切分 PDFBox 按「表N」切段(Markdown 还原已废弃)
04 百度OCR 提前过期缓存 Token + 异步任务轮询 + 失效重试
05 提示词 铁律定下限、结构示例定上限、对齐输入降难度
06 抽取 客户端四形态 + 切表/并行/合并编排,失败隔离
07 入库 异步提交 + 定时轮询 + 按表号装配器落库
08 运维 配置、新增表五步、排错对照表

核心立场:没有银弹。模型、OCR、技术栈都可替换,真正沉淀下来的是这套「切分 → 提示 → 抽取 → 装配」的处理范式。

替换方案与测试方式

经过测试可替换的方案有 paddleocr 开源模型 + DeepSeek模型组合

1、paddleocr 识别pdf文件输出json

2、将json与关键词发送给deepseek模型

3、输出结果

相关推荐
彦为君2 小时前
Redis最新版本特性
java·数据库·redis·算法·bootstrap
爱码少年2 小时前
Docker如何一次查看多个容器日志
运维·docker·容器
WI8LbH7882 小时前
Ubuntu 部署Harbor
linux·运维·ubuntu
格子软件2 小时前
2026年GEO优化系统源码解构:核心状态机与高并发流控深度剖析
java·vue.js·spring boot·vue·geo
weixin199701080162 小时前
[特殊字符]《京东订单API(jd.order.detail.get)对接ERP:企业认证+OAuth授权避坑指南》(附Python源码)
java·数据库·python
huainingning2 小时前
华三ACL单向TCP互通组网-通过Established状态回包实现
运维·网络·tcp/ip
pW3g3lLuu2 小时前
在 VS Code 里直接改 JAR,我复刻了JarEditor
java·pycharm·jar
researcher-Jiang2 小时前
高性能计算之MPI:第一次MPI并行程序设计练习
linux·运维·服务器
Promise微笑3 小时前
工业微量水分监测:精密露点仪选型逻辑与行业应用实证深度报告
大数据·运维