如何用Python借助Azure Form Recognizer提取PDF结构并生成DataFrame
使用Azure Form Recognizer提取PDF内容并转换为DataFrame
问题修正与实现
你之前的代码仅处理了页面行、单词和表格的基础输出,未利用prebuilt-layout模型提供的页眉、页脚、段落识别能力,也未做DataFrame转换。以下是完整实现代码:
import pandas as pd from azure.ai.formrecognizer import DocumentAnalysisClient from azure.core.credentials import AzureKeyCredential endpoint = "<你的Azure端点>" key = "<你的Azure密钥>" def extract_pdf_to_dataframe(): # 替换为目标PDF的URL或本地文件路径(本地文件请使用begin_analyze_document方法) target_pdf = "<你的PDF地址>" document_analysis_client = DocumentAnalysisClient( endpoint=endpoint, credential=AzureKeyCredential(key) ) # 启动文档分析任务 poller = document_analysis_client.begin_analyze_document_from_url( "prebuilt-layout", target_pdf) analysis_result = poller.result() # 初始化数据存储列表 page_data_list = [] for page in analysis_result.pages: page_number = page.page_number # 匹配当前页的页眉 page_headers = [h.content for h in analysis_result.headers if any(reg.page_number == page_number for reg in h.bounding_regions)] # 匹配当前页的页脚 page_footers = [f.content for f in analysis_result.footers if any(reg.page_number == page_number for reg in f.bounding_regions)] # 匹配当前页的段落 page_paragraphs = [p.content for p in analysis_result.paragraphs if any(reg.page_number == page_number for reg in p.bounding_regions)] # 匹配当前页的表格并结构化 page_tables = [] for table in analysis_result.tables: if any(reg.page_number == page_number for reg in table.bounding_regions): table_cells = [] for cell in table.cells: table_cells.append({ "行索引": cell.row_index, "列索引": cell.column_index, "单元格内容": cell.content }) page_tables.append(table_cells) # 整合单页数据 page_data = { "页码": page_number, "页眉": "\n".join(page_headers) if page_headers else "", "页脚": "\n".join(page_footers) if page_footers else "", "段落": "\n".join(page_paragraphs) if page_paragraphs else "", "表格": page_tables if page_tables else [] } page_data_list.append(page_data) # 转换为DataFrame result_df = pd.DataFrame(page_data_list) print(result_df) return result_df if __name__ == "__main__": extract_pdf_to_dataframe()
核心要点
- 直接调用
analysis_result.headers/footers/paragraphs属性获取对应内容,通过绑定区域的页码匹配到当前页 - 表格数据整理为结构化的单元格列表,便于后续处理
- 所有页数据整合后批量转换为Pandas DataFrame,符合预期输出格式
内容的提问来源于stack exchange,提问作者Niranjanp
相关产品推荐
相关产品推荐

