基于字符串值从OCR识别的收据文本中提取总支付金额的实现方法
收据总金额提取解决方案
你之前用split(' ')拆分失败的核心原因是OCR输出的文本行内空白数量不固定,还可能混入制表符等非空格空白字符,按单个空格拆分无法稳定定位金额位置,下面提供两种鲁棒性更高的实现方案:
方案1:正则匹配(推荐)
直接匹配固定前缀Total后的金额格式,不需要额外处理行内空白逻辑:
import re # 你的OCR识别结果 ocr_content = """THE FOOD CLUB 78990 SOUTH STREET AVE ALBANY, NYC, 343434 08/11/2020 05:43 PM CHECK: 307859 CUST: 59 1 CHICKEN MEALS $9.99 EXTRA SPYCIES $0.00 2 PIDIA $25.98 Subtotal $39.57 Tax $3.86 Total $43.43 """ # 匹配Total后跟随的美元金额 result = re.search(r"Total\s+\$(\d+\.\d{2})", ocr_content) if result: # 提取纯数字金额 total_num = result.group(1) # 如需带$符号可自行拼接为 f"${total_num}" print(total_num) # 输出:43.43
方案2:逐行遍历定位
适合不想引入正则依赖的场景,通过行前缀和$符号定位金额:
ocr_content = """THE FOOD CLUB 78990 SOUTH STREET AVE ALBANY, NYC, 343434 08/11/2020 05:43 PM CHECK: 307859 CUST: 59 1 CHICKEN MEALS $9.99 EXTRA SPYCIES $0.00 2 PIDIA $25.98 Subtotal $39.57 Tax $3.86 Total $43.43 """ for line in ocr_content.splitlines(): stripped_line = line.strip() # 定位Total开头的行 if stripped_line.startswith("Total"): # 找到$符号的位置,直接截取后续内容即为金额 dollar_idx = stripped_line.index("$") total_num = stripped_line[dollar_idx+1:] print(total_num) # 输出:43.43 break
两种方案都不受行内空格数量的影响,即使后续OCR识别出的Total和金额之间的空格数有变化,也能正常提取。
内容的提问来源于stack exchange,提问作者sirimiri
相关产品推荐
相关产品推荐

