如何通过Streamlit将本地PDF上传至Document AI摘要处理器?
如何用Streamlit上传PDF到Document AI Summarizer Processor
你当前代码的核心问题是:Streamlit st.file_uploader 返回的是 UploadedFile 对象,不是本地文件路径,直接传给 process_document_sample 的 file_path 参数会报错,而且不需要用 with open() 去读取——因为 UploadedFile 本身就是类文件对象,可以直接读取内容。
以下是修正后的完整实现步骤:
1. 调整Document AI处理函数
原函数如果是基于本地文件路径设计的,需要改成接受文件二进制内容:
import streamlit as st from google.cloud import documentai_v1 as documentai def process_document_sample( project_id: str, location: str, processor_id: str, file_content: bytes, mime_type: str, ): # 初始化Document AI客户端 client = documentai.DocumentProcessorServiceClient() processor_name = client.processor_path(project_id, location, processor_id) # 构造处理请求,直接传入文件二进制内容 request = documentai.ProcessRequest( name=processor_name, raw_document=documentai.RawDocument(content=file_content, mime_type=mime_type) ) # 调用API处理文档 result = client.process_document(request=request) return result.document.text # 根据Summarizer Processor的实际返回结构调整,比如可能需要提取特定摘要字段
2. Streamlit上传与处理逻辑
直接读取上传文件的内容,传入调整后的处理函数:
st.title("PDF 摘要生成工具") uploaded_file = st.file_uploader('选择你的 .pdf 文件', type="pdf") if uploaded_file is not None: # 直接读取上传文件的二进制内容 file_content = uploaded_file.read() # 配置你的Document AI参数 PROJECT_ID = "XXXX" LOCATION = "us" PROCESSOR_ID = "XXX" MIME_TYPE = "application/pdf" try: # 调用处理函数生成摘要 summary = process_document_sample( project_id=PROJECT_ID, location=LOCATION, processor_id=PROCESSOR_ID, file_content=file_content, mime_type=MIME_TYPE ) st.subheader("生成的摘要") st.write(summary) except Exception as e: st.error(f"处理失败: {str(e)}")
关键说明
UploadedFile.read()直接返回文件的二进制数据,替代了本地文件的open()读取逻辑- Document AI的
ProcessRequest支持通过raw_document直接传入二进制内容,无需先保存文件到本地 - 注意根据Summarizer Processor的实际返回结构调整结果提取逻辑(比如部分处理器会把摘要放在特定的实体或字段中,而非直接返回
document.text)
内容的提问来源于stack exchange,提问作者budionosan
相关产品推荐
相关产品推荐

