Azure Form Recognizer导出发票结果到CSV报KeyError: 'text'如何解决
Azure Form Recognizer发票识别脚本KeyError: 'text'报错解决方案
报错原因
这个错误触发的核心原因是:当Azure Form Recognizer预构建发票模型无法识别某一个发票字段时,返回的字段结构体中不会携带text键,原始脚本未做容错处理,直接访问不存在的键就会抛出KeyError。
排查步骤
- 首先检查生成的
.invoice.json缓存文件,打开后定位到analyzeResult.documentResults[0].fields节点,确认是否存在缺少text属性的字段 - 确认你使用的Form Recognizer接口版本和代码适配的版本一致:当前代码适配的是v2.1版本,如果你将endpoint中的版本号改为v3.0+,返回结构会发生变化,也会触发该报错
修复方案
修改parseInvoiceResults函数中的字段取值逻辑,使用dict.get()方法替代直接按键取值,不存在的键默认返回空字符串即可,修改后的代码段如下:
def parseInvoiceResults(resp_json): docResults = resp_json["analyzeResult"]["documentResults"] invoiceResult = {} for docResult in docResults: for fieldName, fieldValue in sorted(docResult["fields"].items()): valueFields = list(filter(lambda item: ("value" in item[0]) and ("valueString" not in item[0]), fieldValue.items())) # 新增容错逻辑:不存在text键则默认返回空字符串 field_text = fieldValue.get("text", "") invoiceResult[fieldName] = field_text if len(valueFields) == 1: print("{0:26} : {1:50} NORMALIZED VALUE: {2}".format(fieldName , field_text, valueFields[0][1])) invoiceResult[fieldName + "_normalized"] = valueFields[0][1] else: print("{0:26} : {1}".format(fieldName , field_text)) print("") return invoiceResult
其他注意事项
- 如果之前运行过脚本生成了
.invoice.json缓存文件,建议先删除所有缓存文件后重新运行,避免旧的错误结构文件导致重复报错 - 如果你需要使用v3.0+版本的Form Recognizer接口,需要完全调整解析逻辑,适配新版本的返回字段结构
- 可以额外增加置信度校验逻辑,对于
confidence字段低于阈值的识别结果,直接置为空,降低错误数据的占比
内容的提问来源于stack exchange,提问作者user9855045
相关产品推荐
相关产品推荐

