PDF文字提取
任务目标
- 本 Skill 用于:从用户上传的 PDF 文档中识别并提取文字内容
- 能力包含:PDF 文字提取、扫描页面自动检测、OCR 文字识别、格式保留、结构化输出、Markdown 文件生成
- 触发条件:用户上传 PDF 并要求提取文字,或询问文档中的文字内容
前置准备
依赖说明
脚本所需的依赖包及版本:
pymupdf>=1.23.0
requests
pydantic-settings
安装命令:
pip install pymupdf>=1.23.0 requests pydantic-settings
支持的文件格式
- PDF(支持文字版和扫描版)
操作步骤
标准流程
PDF 文字提取流程
-
接收 PDF 文件
- 确认用户已上传 PDF 文件
- 获取 PDF 文件的本地路径
-
调用脚本提取文字
- 执行命令:
python scripts/pdf_text_extractor.py <pdf_file_path> - 脚本会自动提取所有页面的文本,并检测扫描页面
- 对于扫描页面,脚本会将其渲染为图片并保存到同级目录的
{pdf_name}_images文件夹中
- 执行命令:
-
处理提取结果
- 如果提取失败:告知用户错误信息,任务结束
- 如果提取成功:进入步骤 4
-
OCR 识别扫描页面(自动调用)
- 检查返回结果中的
scanned_pages列表 - 如果存在扫描页面,对每个扫描页面执行以下操作:
- 读取页面图片文件,转为 base64 编码
- 调用
scripts.ocr_tools.ocr_for_data_base64(dataBase64=base64_string)进行 OCR 识别 - 将 OCR 识别结果替换原占位符,合并到最终文本中
- 如果
scanned_pages为空,跳过此步骤
- 检查返回结果中的
-
生成输出结果
- 合并所有页面的文字内容
- 根据用户需求生成 Markdown 文件
- 包含文件来源、提取状态、文字内容等信息
- 使用清晰的标题和结构组织内容
可选分支
- 当用户仅需查看文字内容:直接输出文字,不生成文件
- 当用户要求保存结果:生成
.md文件 - 当 PDF 页面为扫描图片:自动进行 OCR 处理,无需用户额外操作
- 当 OCR 识别失败:保留占位符并告知用户该页面识别失败
资源索引
-
必要脚本:见 scripts/pdf_text_extractor.py
- 用途:从 PDF 文件中提取文本内容,检测扫描页面并导出图片
- 参数:PDF 文件路径
- 输出:JSON 格式结果,包含提取的文本、扫描页面信息和元信息
-
OCR 工具:见 scripts/ocr_tools.py
- 用途:对扫描页面图片进行 OCR 文字识别
- 参数:图片 base64 编码或图片 URL
- 输出:JSON 格式结果,包含识别的文字内容
-
API 配置:见 scripts/config.py
- 用途:管理 OCR API 密钥
- 注意:首次使用 OCR 功能时,如果未配置 API 密钥,需要使用 AskUserQuestion 询问用户
注意事项
PDF 文字提取
- 格式保留:脚本会尽量保留原文的段落结构和标题层级
- 扫描版 PDF:自动检测扫描页面并进行 OCR 识别
- 复杂布局:表格、多栏等复杂布局的提取效果可能不佳
- 加密 PDF:不支持加密或受密码保护的 PDF 文件
OCR 识别
- 识别准确性:文字识别结果受图片清晰度、字体、背景等因素影响,可能存在误差
- API 密钥:OCR 功能需要配置 API 密钥,首次使用时需要通过 AskUserQuestion 询问用户
- 禁止在缺少 API 密钥时自行搜索或编造数据
通用注意事项
- 隐私保护:处理的文件不会被存储,仅在当前会话中使用
- 文件大小:建议处理小于 50MB 的文件,过大文件可能导致处理缓慢
使用示例
示例 1:PDF 文字提取
用户操作:上传 PDF 并要求"提取这个 PDF 的文字"
智能体处理:
- 确认 PDF 文件路径
- 执行脚本:
python scripts/pdf_text_extractor.py ./document.pdf - 获取提取结果,包含 10 页内容,其中第 3 页为扫描页面
- 读取第 3 页图片,转为 base64
- 调用
scripts.ocr_tools.ocr_for_data_base64(dataBase64=base64_string)识别该页面 - 合并所有页面文字,生成 Markdown 文件:
./extracted_from_pdf.md
示例 2:处理扫描版 PDF
用户操作:上传扫描版 PDF
智能体处理:
- 执行脚本提取文字
- 发现所有页面均为扫描页面,已导出为图片
- 对所有页面图片依次进行 OCR 识别
- 合并 OCR 结果,输出完整文字内容
Scan to join WeChat group