You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python从谷歌OCR导出的收银小票CSV中提取指定数据

收银小票指定信息提取解决方案

你之前操作的核心问题

  • 错误拆分结构:用re.split(r'\s+', text)直接把所有文本拆成独立单词,完全破坏了小票原有的行级布局和关键字的位置关联,不利于范围定位
  • 遍历方式错误:直接写for sentence in text是遍历字符串的单个字符,不会得到逐行内容,正确做法是先对原文本按换行符拆分得到行列表
  • 正则匹配逻辑不全:只匹配了SUBTOTAL、TOTAL关键字本身,没有关联捕获关键字前后的目标金额内容

具体实现代码

import re

# 先按行拆分原始文本,过滤空行保留有效内容
lines = [line.strip() for line in text.splitlines() if line.strip()]
extract_result = {}

# 1. 提取商品列表:ABN所在行之后、Qty字段所在行之前的所有内容
abn_idx = next(i for i, line in enumerate(lines) if "ABN" in line)
qty_idx = next(i for i, line in enumerate(lines) if line == "Qty")
extract_result["商品列表"] = lines[abn_idx+1 : qty_idx]

# 2. 提取SUBTOTAL前面的金额数字
subtotal_match = re.search(r"(\d+)\s*SUBTOTAL", text)
if subtotal_match:
    extract_result["SUBTOTAL金额"] = subtotal_match.group(1)

# 3. 提取TOTAL后面的总金额
total_match = re.search(r"TOTAL\s*[\n\s]*(\$\d+\.\d{2})", text)
if total_match:
    extract_result["TOTAL总金额"] = total_match.group(1)

# 输出最终提取结果
print(extract_result)

补充优化提示

如果需要清洗商品名里的OCR异常前缀(比如^H、*H、#M等),可以对每个商品行执行re.sub(r'^[\^*#]H?&?', '', 商品行内容)做批量清理;如果遇到ABN行匹配不准的情况,可以把ABN行的匹配逻辑调整为正则匹配re.search(r'ABN\s+\d{2}\s+\d{3}\s+\d{3}\s+\d{3}', line),匹配精度更高。

内容的提问来源于stack exchange,提问作者WMD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:06:05