如何将Document AI批量OCR生成的JSON与原PDF文件名关联?
解决Document AI批量OCR后原文件与输出JSON关联的问题
这里提供三种可行方案,根据你的实际场景选择:
方案一:批量请求时传递自定义元数据(推荐)
在创建批量处理请求时,给每个输入PDF添加包含原文件名的自定义元数据,处理后的JSON输出会保留这个元数据字段,直接读取即可完成关联。
Python客户端代码示例:
from google.cloud import documentai_v1 as documentai def batch_process_with_metadata(): client = documentai.DocumentProcessorServiceClient() # 替换为你的项目ID、区域、处理器ID processor_name = client.processor_path("你的项目ID", "你的区域", "处理器ID") # 构造输入文档列表,为每个文件添加原文件名元数据 gcs_docs = [] # 示例原文件名列表,可根据实际需求批量生成 original_files = ["79169_FATTURA FORNITURA_73090036581301A 2.215,52.pdf"] for filename in original_files: gcs_uri = f"gs://你的存储桶名/输入文件夹/{filename}" gcs_docs.append( documentai.GcsDocument( gcs_uri=gcs_uri, mime_type="application/pdf", metadata={"original_filename": filename} ) ) input_config = documentai.BatchDocumentsInputConfig( gcs_documents=documentai.GcsDocuments(documents=gcs_docs) ) # 设置输出路径 output_config = documentai.DocumentOutputConfig( gcs_output_config=documentai.DocumentOutputConfig.GcsOutputConfig( gcs_uri="gs://你的存储桶名/输出文件夹/" ) ) # 发送批量处理请求 request = documentai.BatchProcessRequest( name=processor_name, input_documents=input_config, document_output_config=output_config ) operation = client.batch_process_documents(request) # 等待任务完成,可根据文件数量调整超时时间 operation.result(timeout=3600)
处理完成后,打开输出的JSON文件,在document.metadata字段下即可找到你设置的original_filename,直接关联对应原文件。
方案二:解析输出文件名的规律
观察你提供的文件名示例,输出文件名包含原文件名的核心内容,仅对特殊字符做了替换(比如原文件中的逗号2.215,52被改为2.21552)。可以写脚本批量提取并匹配:
import os from pathlib import Path def map_output_to_original(output_dir): # 遍历输出文件夹下的所有JSON文件 for json_path in Path(output_dir).glob("*.json"): filename = json_path.name # 分割文件名,提取中间的原文件核心部分 parts = filename.split("-") if len(parts) >= 2: # 还原逗号格式 original_core = parts[1].replace("2.21552", "2.215,52") original_filename = f"{original_core}.pdf" # 可将映射关系保存到CSV或数据库,方便后续使用 print(f"输出文件: {filename} → 原文件: {original_filename}") # 调用示例,替换为你的本地输出文件夹路径 map_output_to_original("/本地输出文件夹路径")
如果所有文件的特殊字符替换规律一致,这个方法可以快速完成关联,无需重新跑OCR任务。
方案三:预处理原文件名
在上传PDF到存储桶前,先将原文件名中的特殊字符(比如逗号、多空格)替换为统一格式(如下划线),同时记录原文件名与新文件名的映射关系(保存到CSV或表格)。
比如:
- 原文件名:
79169_FATTURA FORNITURA_73090036581301A 2.215,52.pdf - 新文件名:
79169_FATTURA_FORNITURA_73090036581301A_2.215_52.pdf
处理后的输出文件名会包含这个新文件名,通过映射表就能快速关联回原文件名。
内容的提问来源于stack exchange,提问作者Camillo
相关产品推荐
相关产品推荐

