AI 训练文本怎么提取结构字段?用正则保留原文和解析失败原因

为 AI 分类或结构化抽取准备文本时,先用可解释规则建立一个小型基线。格式固定的编号和金额可以用正则提取,但匹配失败、同字段出现多次时必须保留原文与原因。下面只解析严格约定的“编号=数字; 金额=数值”格式。

为 AI 分类或结构化抽取准备文本时,先用可解释规则建立一个小型基线。格式固定的编号和金额可以用正则提取,但匹配失败、同字段出现多次时必须保留原文与原因。下面只解析严格约定的“编号=数字; 金额=数值”格式。

环境与运行方法

本文代码在 Windows、Python 3.11 的本地独立环境执行通过。以下数据全部为人为构造的教学样本,不是客户数据,也不是业务效果测试。

AI 训练文本怎么提取结构字段?用正则保留原文和解析失败原因

新建一个空目录,在终端执行安装命令,把后面的完整代码保存为 demo.py,再执行 python demo.py。文件输出均保存在运行目录,请先在空目录练习。

python --version  # 本例只使用 Python 标准库

先写输入契约

样本编号用字符串保存,001 不转成整数1。金额允许非负整数或最多两位小数;本例不接受负数、千分位、货币单位和任意附加字段。fullmatch 要求整段文本符合模板,避免只截取其中看似正确的一小块。

示例采用 Decimal 解析金额,再保存成两位小数字符串。这是为了保留明确的小数表示,并不表示已经完成所有财务规则核对。若输入契约改变,应先增加相应样本和检查。

成功与失败一起保存

每条结果都有 row、raw、ok 与 reason。成功记录额外包含 record_id 和 amount;失败保留完整文本,不以零金额伪装成功,也不自动丢弃。

这类规则基线可以与 AI 提取结果对照:在相同文本上比较字段值、缺失和错误。格式不固定的自然语言应另建抽取与复核流程,不要把正则没命中理解为原文没有该信息。

可复制的完整代码

import re, json
from decimal import Decimal
pattern = re.compile(r"编号=(?P<id>\d+);\s*金额=(?P<amount>\d+(?:\.\d{1,2})?)")
texts = ["编号=001; 金额=12.50", "编号=002; 金额=未填写", "编号=003; 金额=7; 金额=9"]
results = []
for row, raw in enumerate(texts, 1):
    m = pattern.fullmatch(raw.strip())
    item = {"row": row, "raw": raw, "ok": bool(m), "reason": "parsed" if m else "format_mismatch"}
    if m:
        item.update(record_id=m["id"], amount=format(Decimal(m["amount"]), ".2f"))
    results.append(item)
assert results[0]["record_id"] == "001" and results[0]["amount"] == "12.50"
assert sum(r["ok"] for r in results) == 1
with open("extraction_results.json", "w", encoding="utf8") as f:
    json.dump(results, f, ensure_ascii=False, indent=2)
print(json.dumps(results, ensure_ascii=False, indent=2))

运行结果与核对方法

下面是本文教学代码在上述本地环境中的实际输出。浮点数末位可能随依赖版本变化。

[
  {
    "row": 1,
    "raw": "编号=001; 金额=12.50",
    "ok": true,
    "reason": "parsed",
    "record_id": "001",
    "amount": "12.50"
  },
  {
    "row": 2,
    "raw": "编号=002; 金额=未填写",
    "ok": false,
    "reason": "format_mismatch"
  },
  {
    "row": 3,
    "raw": "编号=003; 金额=7; 金额=9",
    "ok": false,
    "reason": "format_mismatch"
  }
]

核对第一条保留 record_id=001、amount=12.50;第二条与第三条都应为 format_mismatch,raw 保留原始文本。修改模板前,把缺值、重复字段和不支持的数字格式加入失败样本,确保程序继续明确拒绝。

使用边界与常见问题

示例只覆盖约定的固定格式,不是通用语言理解,也没有调用大模型。Unicode 数字、编码和不同金额写法在正式数据里需要进一步限制;不能声称所有提取字段都已核实正确。

匹配失败可以改用搜索吗?

只有任务允许从大段文字中取一个片段时才考虑 search。存在多个编号或金额时,必须先定义对应关系;改用 search 可能掩盖重复字段和附加内容。

官方资料

接口与参数依据以下官方资料核对(2026年10月1日)。示例验证只覆盖本文输入和步骤。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30267.html

赞 (0)
AI小管家的头像AI小管家
Milvus Lite 怎么接入智能体?先用 Python 跑通本地向量检索
上一篇 1天前
AI 语料长度怎么分析?统计分位数、长文本占比与空文本
下一篇 1天前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部