Python提取PDF购物小票文本后如何解析为结构化数据存储?
购物小票非结构化文本解析落地思路
第一步:先做文本预处理,不要上来就写解析规则
你现在用PdfReader.extract_text()拿到的原始文本首先要做标准化清洗,这步做不好后面规则全错:
- 按行拆分整段文本:调用
text.splitlines()拿到逐行内容的列表,过滤掉全是空格/不可见字符的空行,把每行首尾的空白、小票机打印带的控制符(换页符、错位制表符)全部清掉 - 提前锚定固定标识:REWE超市的小票排版是完全固定的,先扫一遍所有行,把你确定含义的固定特征串位置先记下来,比如
SUMME(总金额)、VISA(支付记录)、USt-IdNr.(UID编号)、Pfand(退瓶费)这些固定关键字的行号,后面切分区块直接用这些锚点,不用逐行猜。
注意:如果你的扫描版PDF直接提取文本错位率超过20%(比如文字串行、缺字),别硬补规则,直接换OCR流程:用
pdf2image把PDF转成图片,再用pytesseract做德语+英语识别,比硬调错位文本的规则省至少一半时间。
第二步:头部元数据提取,用正则就能全覆盖
头部字段全是带固定前缀或者固定格式的内容,不需要复杂逻辑:
- 商户名称、地址:小票最顶部带
REWE字样的第一行就是商户名,后面连续到Tel:(联系电话)之前的行拼接起来就是地址 - 联系电话:匹配前缀为
Tel:/Telefon:的行,提取后面的数字串即可 - UID编号:匹配前缀为
USt-IdNr.的行,提取前缀后的字符串就是对应编号 - 交易日期、时间:直接用正则匹配
DD.MM.YYYY HH:MM格式的字符串,REWE的交易时间一般在支付记录行附近 - 总金额、支付信息:匹配
SUMME开头的行抓后面的欧元数值,匹配VISA开头的行抓支付金额即可,注意德国地区的小数是用逗号分隔的,提取后要替换成点再转浮点数
基础正则示例:
import re # 提取总金额 total_match = re.search(r"SUMME\s+([0-9]+,[0-9]{2})\s*€", cleaned_full_text) total = float(total_match.group(1).replace(",", ".")) if total_match else None # 提取日期时间 dt_result = re.search(r"(\d{2}\.\d{2}\.\d{4})\s+(\d{2}:\d{2})", cleaned_full_text) trade_date, trade_time = dt_result.groups() if dt_result else (None, None)
第三步:商品明细提取,按区块切分后逐行解析
商品明细区的边界非常好判断:就是头部信息结束后,到SUMME总金额行之前的所有行,把这块单独切出来之后逐行匹配规则即可:
- REWE的正常商品行特征是行尾为
X,XX €格式的价格,价格前面的文本就是商品名,价格旁的单个大写字母(A/B)就是税率标识(A对应7%食品低税率,B对应19%标准税率) - 带
Pfand关键字的行就是退瓶费,直接记为对应上一件商品的附加费用即可 - 带
Rabatt关键字、数值前带负号的行就是折扣行,记为对应商品的扣减金额 - 转pandas DataFrame的逻辑非常简单:每解析完一条完整商品,就存为一个结构固定的字典,比如
{"goods_name": "Vollmilch", "price": 1.19, "tax_tag": "A", "pfand": 0.25, "discount": 0.0},所有商品解析完后把字典列表直接传入pd.DataFrame()就能生成结构化表,不需要额外转换工具。
存储方案选择
- 个人归档场景优先存JSON:每张小票对应一个字典,外层放所有元数据字段,内层加
goods_list字段放解析好的商品明细列表,读写无依赖,备份也方便 - 如果后续要做多小票统计、筛选查询,直接用Python内置的sqlite3模块搭本地库就行,建两张表:一张存小票元数据(主键小票ID、商户名、总金额、交易时间等),一张存商品明细(外键关联小票ID、商品名、价格、税费、退瓶费等),不需要额外安装数据库服务,维护成本极低。
效率提升方案
如果后续需要处理不同商户的小票,不用自己从零写所有规则,可以直接用receiptparser库,内置了大部分欧洲商超的小票排版规则,传入清洗好的文本就能直接输出结构化结果。个人场景不建议一开始就接入大模型做解析,固定排版下正则+规则的准确率能到100%,速度比大模型快几十倍,也没有额外成本,遇到规则实在覆盖不了的特殊小票再用大模型做兜底解析就行。
内容的提问来源于stack exchange,提问作者ziazo
相关产品推荐
相关产品推荐

