修改Python版Azure Cognitive Form Recognizer代码提取PDF页码
Azure 表单识别器提取文本附带页码修改方案
核心修改逻辑
原代码直接取result.content拿到的是全文档拼好的纯文本,不带任何分页标记。实际上Azure表单识别器返回的结果里自带pages数组,每个元素对应PDF里的单独一页,自带页码属性和当前页的全部文本,遍历这个数组就能拿到文本和页码的对应关系。
另外原代码漏了AzureKeyCredential的导入,修改的时候一并补上,不然跑的时候会报名称错误。
修改后可直接运行的代码
import pandas as pd from azure.ai.formrecognizer import DocumentAnalysisClient from azure.core.credentials import AzureKeyCredential # 请提前替换为你自己的endpoint、key、存储容器相关配置 document_analysis_client = DocumentAnalysisClient( endpoint=endpoint, credential=AzureKeyCredential(key) ) # 存储所有文件的分页提取结果,方便后续转DataFrame extract_result = [] for blob in container.list_blobs(): blob_url = container_url + "/" + blob.name poller = document_analysis_client.begin_analyze_document_from_url( "prebuilt-read", blob_url ) result = poller.result() print(f"正在扫描文件: {blob.name} ...") # 逐页遍历提取页码和对应文本 for page in result.pages: page_num = page.page_number page_content = page.content.strip() print(f"=== 第 {page_num} 页内容 ===") print(page_content) # 单页结果存入列表 extract_result.append({ "file_name": blob.name, "page_number": page_num, "page_content": page_content }) # 转换为DataFrame,后续可直接导出为csv、excel等格式 mydf = pd.DataFrame(extract_result)
补充说明
- 返回的
page_number从1开始计数,和日常PDF阅读器显示的页码完全一致,不需要手动做偏移处理 - 如果需要定位到更细粒度的行、单个词汇的位置,还可以遍历
page.lines或者page.words属性,每个行/词对象除了文本内容,还自带所在页码、坐标位置信息,可以满足更精准的提取需求 - 如果需要保留原有的全文档文本输出,
result.content依然可以正常调用,和分页提取的逻辑不冲突
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

