SuperAPI AI 工具集

regex-vs-llm-structured-text

数据与分析

查看项目

更新于 10-15 08:38

技能介绍

用途

本文档提供一套实用决策框架,用于解析结构化文本,例如试卷题目、表单、发票、收据和文档。其核心观点是:正则表达式能以低成本、确定性的方式处理 95%-98% 的案例,应把昂贵的大语言模型(LLM)调用保留给剩余的边缘情况。

何时适用

  • 解析具有重复模式的结构化文本(题目、表单、表格)
  • 在正则表达式与 LLM 之间选择文本提取方案
  • 构建结合两种方法的混合流水线
  • 优化文本处理中的成本与准确率权衡

决策框架

判断文本格式是否一致且重复:

  • 是(超过 90% 遵循模式)→ 从正则开始
    • 正则覆盖 95% 以上 → 完成,无需 LLM
    • 正则覆盖低于 95% → 仅对边缘情况添加 LLM
  • 否(自由格式、高度多变)→ 直接使用 LLM

架构模式

源文本 → 正则解析器(提取结构,准确率 95%-98%)→ 文本清洗器(去除噪声,如标记、页码、伪影)→ 置信度评分器(标记低置信度提取结果)

  • 高置信度(≥0.95)→ 直接输出
  • 低置信度(<0.95)→ LLM 校验器 → 输出

实现

1. 正则解析器(处理大多数情况)

示例代码使用 Python 的 re 和 dataclasses,定义 ParsedItem 数据类,通过正则模式匹配编号、题干、选项和答案,并返回解析结果列表。代码中定义的字段包括 id、text、choices、answer 和 confidence,默认置信度为 1.0。

2. 置信度评分

对可能需 LLM 复核的条目进行标记。示例定义了 ConfidenceFlag 数据类,包含 item_id、score 和 reasons。评分函数在选项少于 3 个、缺少答案、题干文本过短等情况下扣分,并返回低置信度条目列表。

3. LLM 校验器(仅边缘情况)

对低置信度提取结果调用 LLM 修正。示例中使用 claude-haiku-4-5-20251001 作为最便宜的校验模型,将原文与当前提取结果一并发送,要求返回修正后的 JSON 或标注 CORRECT。

4. 混合流水线

process_document 函数整合完整流程:先用正则提取,再进行置信度评分,若存在低置信度条目且提供了 LLM 客户端,则仅对这些条目调用 LLM 校验,其余保持原样输出。

实际指标

来自一个生产环境的试卷解析流水线(共 410 个条目):

  • 正则成功率:98.0%
  • 低置信度条目:8 个(2.0%)
  • 需要 LLM 调用:约 5 次
  • 相比全部使用 LLM 的成本节省:约 95%
  • 测试覆盖率:93%

最佳实践

  • 从正则开始——即使正则不完美,也能提供可改进的基线
  • 使用置信度评分以程序化方式识别需要 LLM 帮助的内容
  • 使用最便宜的 LLM 做校验(Haiku 级别的模型足够)
  • 不要修改已解析的对象——清洗和校验步骤应返回新实例
  • TDD 适合解析器——先为已知模式编写测试,再覆盖边缘情况
  • 记录指标(正则成功率、LLM 调用次数)以跟踪流水线健康度

应避免的反模式

  • 在正则能处理 95% 以上案例时仍将所有文本发送给 LLM(昂贵且缓慢)
  • 对自由格式、高度多变的文本使用正则(此时 LLM 更合适)
  • 跳过置信度评分,指望正则“自然有效”
  • 在清洗或校验步骤中修改已解析对象
  • 不测试边缘情况(格式错误输入、缺失字段、编码问题)

适用场景

  • 试卷/考题题目解析
  • 表单数据提取
  • 发票/收据处理
  • 文档结构解析(标题、章节、表格)
  • 任何具有重复模式且对成本敏感的结构化文本