Google Document AI API OCR响应pages数组为空,无法提取单页文本求助
问题
使用Google Document AI API进行PDF文本OCR提取时,OCR操作执行成功,能通过document.text获取完整文档内容,但document.pages数组始终为空,无法按页提取文本。
简化代码如下:
from google.cloud import documentai_v1beta3 as documentai @classmethod def extract_text(cls, book_link: str): """Extract text from book using OCR""" # Upload the book to GCS filename = cls._upload_file_to_gcs(book_link=book_link) # Create the Batch Process Request gcs_input_uri = f"gs://{BUCKET}/input/{filename}" operation = cls._create_batch_process_request(gcs_input_uri=gcs_input_uri) # Wait for the operation to finish try: operation.result(timeout=300) # Catch exception when operation doesn't finish before timeout except (RetryError, InternalServerError) as e: raise exceptions.APIException( detail={e.message} ) metadata = documentai.BatchProcessMetadata(operation.metadata) if metadata.state != documentai.BatchProcessMetadata.State.SUCCEEDED: raise exceptions.APIException( detail={metadata.state_message} ) output_documents = cls._get_output_documents(metadata=metadata) # Delete the input file from GCS cls.gcs_bookmapping_bucket.delete_blob(blob_name=f"input/{filename}") # Extract text from the output documents book_text = [] for document in output_documents: for page in document.pages: # **here document.pages is always empty** book_text.append( cls._layout_to_text(layout=page.layout, text=document.text) ) return book_text
已确认输入PDF包含多页,排除输入数据问题;先后尝试过documentai_v1beta3和documentai_v1版本,问题仍未解决。如何实现按页提取文本?
解决方法
- 配置批量请求的分页输出参数:在创建
BatchProcessRequest时,必须设置document_output_config.split_pages=True。未开启该参数时,API会将所有页面文本合并到document.text中,但不会填充pages数组。开启后,API会为每个页面生成独立的输出文档,或在主文档中正确填充pages数组(取决于具体输出配置),这样就能按页处理内容。 - 检查输出文档读取逻辑:如果开启了
split_pages,输出会生成多个对应单页的文档文件,需确保_get_output_documents方法能正确遍历所有输出文件并加载每个页面的document对象。若之前只读取了单个输出文件,会导致无法获取分页数据。 - 验证处理器配置:确保使用的是支持分页输出的最新OCR处理器(如官方"Document OCR"处理器),避免使用旧版或功能受限的处理器。同时检查处理器设置中是否启用了页面级数据返回选项。
另外,也可以先通过单文件非批量请求测试,确认pages数组是否正常填充,以此排查是否为批量请求的配置问题。
内容的提问来源于stack exchange,提问作者Raja Rehan
相关产品推荐
相关产品推荐

