Databricks上Apache Spark如何将Python for循环页码结果纳入输出
问题根因
你现有代码的问题有两个:
- 遍历页码时仅做了print输出,没有把页码和对应页的文本做关联存储
- 最终
mydf = result.content的写法,只会拿到循环中最后一个处理完的PDF的全量无分页文本,既丢失了前面所有PDF的提取结果,也没有任何分页标记可以关联页码。
Azure Form Recognizer返回的result.pages数组中,每个page对象自带page_number页码属性,单页的文本内容可以通过拼接page下所有line的content拿到——result.content是服务端提前拼好的全文档纯文本,本身不保留分页边界,没法直接拆分出单页对应内容。
可直接运行的修正代码
核心思路是提前初始化一个列表,逐PDF、逐页收集「文件名、页码、单页文本」的结构化记录,最后一次性转成DataFrame:
import pandas as pd from azure.ai.formrecognizer import DocumentAnalysisClient from azure.core.credentials import AzureKeyCredential document_analysis_client = DocumentAnalysisClient( endpoint=endpoint, credential=AzureKeyCredential(key) ) # 初始化存储容器,收集所有提取结果 extract_result = [] for blob in container.list_blobs(): blob_url = f"{container_url}/{blob.name}" poller = document_analysis_client.begin_analyze_document_from_url( "prebuilt-read", blob_url ) result = poller.result() print(f"Scanning {blob.name}...") # 逐页关联页码和文本 for page in result.pages: # 拼接当前页所有行的文本内容 page_text = "\n".join([line.content for line in page.lines]) print(f"----Analyzing Read from page #{page.page_number}----") # 写入结构化记录 extract_result.append({ "pdf_filename": blob.name, "page_num": page.page_number, "content": page_text }) # 转换为DataFrame,每行对应一个PDF的一页内容 mydf = pd.DataFrame(extract_result)
补充说明
- 最终生成的
mydf有三列:pdf_filename存PDF文件名、page_num存对应页码、content存该页提取到的全部文本,直接满足页码关联需求 - 如果需要保留全文档维度的提取结果,可以在遍历完单个PDF的所有页之后,额外加一条记录存全量的
result.content,对应页码标记为「全文档」即可 - 如果需要提取PDF中的表格内容,可以在遍历page时额外读取
page.tables字段做解析,和当前文本提取逻辑不冲突
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

