Python开发:序列化/反序列化DocumentAI的Document对象需自行编写.proto吗?
关于DocumentAI Document对象序列化/反序列化的解决方案
不需要自行编写.proto文件,Google官方已提供现成的Protocol Buffers定义,且Python SDK中已封装好对应工具,直接用即可。
具体实现方式
- 利用
google.cloud.documentai库的原生方法:Document对象本身支持Protobuf序列化与反序列化- 序列化:调用Document对象的
SerializeToString()方法,将对象转为二进制Protobuf格式,可保存到文件或缓存 - 反序列化:使用
Document.FromString()方法,从二进制数据恢复出Document对象
- 序列化:调用Document对象的
- 若使用
documentai-toolbox的Document包装类,可先通过包装类的document属性获取底层原生Document实例,再执行上述序列化/反序列化操作
示例代码
from google.cloud import documentai_v1 as documentai from google.cloud.documentai_toolbox.wrappers.document import Document as ToolboxDocument # 假设已通过API获取toolbox的Document对象 toolbox_doc = ToolboxDocument.from_document_path(...) # 序列化:将原生Document转为二进制 native_doc = toolbox_doc.document serialized_data = native_doc.SerializeToString() # 保存到本地文件(可选) with open("document_cache.bin", "wb") as f: f.write(serialized_data) # 反序列化:从二进制数据恢复Document with open("document_cache.bin", "rb") as f: serialized_data = f.read() restored_native_doc = documentai.Document.FromString(serialized_data) # 转回toolbox的Document对象(按需使用) restored_toolbox_doc = ToolboxDocument(document=restored_native_doc)
注意事项
- 确保安装兼容版本的依赖:
google-cloud-documentai和google-cloud-documentai-toolbox - 序列化后的二进制数据体积小、解析快,适合本地存储或缓存,能有效减少重复调用DocumentAI API的次数
内容的提问来源于stack exchange,提问作者anonaka
相关产品推荐
相关产品推荐

