返回 Skill 列表
extension
分类: 内容与媒体无需 API Key

各类文件内容提取助手

支持各种格式的文件内容提取,支持PDF、Word、Excel、PPT、WPS、图片、HTML、JSON、Markdown、CSV、XML、YAML等结构化/半结构化文件

person作者: nice696hubModelScope

文件内容提取专家 (File Content Extractor) v1.1.1

功能概述

专业的多格式文件内容提取工具,支持图片OCR、PDF表格提取、Office/WPS文档解析等功能。能够完整提取文档中的文本、表格结构、嵌套图片、图片中的文字内容

何时使用

当用户需要从以下场景提取内容时调用本Skill:

  • 从PDF/Word/Excel/PPT/WPS等办公文档中提取文字、表格、图片
  • 从图片(扫描件、照片)中识别文字(OCR)
  • 解析网页HTML、JSON、Markdown、CSV、XML、YAML等结构化/半结构化文件
  • 批量处理目录中的多种格式文件
  • 需要保留表格格式、图片内容识别的完整提取

核心特性

📋 支持的文件格式(15+类,100+扩展名)

| 类别 | 格式/扩展名 | 提取能力 | |------|------------|---------| | 🖼️ 图片 | .jpg .jpeg .png .gif .bmp .tiff .webp .ico .heic .svg 等 | ✅ OCR文字识别 ✅ 元数据 ✅ 尺寸 | | 📄 PDF | .pdf | ✅ 全文 ✅ 精确表格 ✅ 内嵌图片+OCR ✅ 目录 ✅ 加密检测 | | 📊 Excel | .xlsx .xls .xlsm .xlsb .csv 等 | ✅ 多Sheet ✅ 合并单元格 ✅ 公式值 | | 📝 Word | .docx .doc .docm 等 / WPS .wps .wpt | ✅ 段落+样式 ✅ 表格 ✅ 插图+OCR ✅ 页眉页脚 | | 🎬 PPT | .pptx .ppt .pptm 等 / WPS .dps | ✅ 逐页文本 ✅ 备注 ✅ 表格+图片+OCR | | 🌐 网页 | .html .htm .xhtml .mhtml | ✅ 正文提取 ✅ 表格 ✅ 图片+OCR ✅ 链接 | | 📚 Markdown | .md .markdown | ✅ 结构保留 ✅ 表格解析 ✅ 代码块 | | 🔧 结构化 | .json .xml .yml .yaml | ✅ 格式化输出 ✅ 层级保留 | | 📄 纯文本 | .txt .log .ini .cfg 等 | ✅ 多编码自动检测(UTF-8/GBK等) |

⚙️ 核心技术能力

  1. 表格结构完整提取

    • PDF表格:使用pdfplumber多策略精准提取
    • Word/PPT/HTML表格:保留表头、行列关系
    • Excel:多Sheet、合并单元格、公式结果
    • 自动输出Markdown/JSON/CSV格式
  2. 文档内嵌图片提取 + OCR

    • PDF内嵌图片:直接提取图像流
    • Word/PPT插图:从压缩包结构提取
    • 自动识别图片文字(多OCR后端)
    • 支持:Tesseract / PaddleOCR / EasyOCR
  3. 图片OCR文字识别

    • 中文简体+英文(默认chi_sim+eng)
    • 多后端自动选择,无需手动配置
    • 支持返回识别框坐标和置信度

安装依赖

# 基础依赖(必装)
pip install pdfplumber pdf2image pytesseract Pillow openpyxl xlrd python-docx python-pptx beautifulsoup4 lxml markdownify pandas pyyaml

# 可选:增强OCR(推荐)
brew install tesseract tesseract-lang  # macOS
# 或
pip install paddleocr paddlepaddle     # PaddleOCR中文效果好
# 或
pip install easyocr                    # EasyOCR GPU版更快

# 可选:.doc旧格式支持
brew install antiword catdoc           # macOS
# 或安装LibreOffice用于格式转换

使用方法

1. 命令行 CLI

# 进入Skill目录
cd .trae/skills/file-content-extractor

# 查看帮助
python cli.py --help

# 基础:提取PDF,终端输出结果
python cli.py /path/to/document.pdf

# 图片OCR识别
python cli.py /path/to/scanned_image.png --ocr-lang chi_sim+eng

# Excel表格提取,输出JSON文件
python cli.py /path/to/data.xlsx -f json -o result.json

# 批量处理目录,保存到outputs文件夹
python cli.py ./documents/ --output-dir ./outputs -f markdown

# 查看所有支持格式
python cli.py --formats

# 禁用OCR(速度更快)
python cli.py document.pdf --no-ocr

# 详细模式(含调试信息)
python cli.py files/ -v

2. Python API

import sys
sys.path.insert(0, ".trae/skills/file-content-extractor")

from src import FileContentExtractor

# 初始化提取器
extractor = FileContentExtractor(
    enable_ocr=True,         # 启用OCR识别图片文字
    ocr_lang="chi_sim+eng",  # OCR语言:中文+英文
    extract_images=True,     # 提取文档内嵌图片
    extract_tables=True,     # 提取表格结构
    save_image_raw=False,    # 是否保存图片字节数据
)

# 提取单个文件
result = extractor.extract("/path/to/your/file.pdf")

# 获取结果的多种格式
print(result.text)                    # 纯文本
print(result.markdown)                # Markdown格式(含格式化表格)
print(result.to_json(indent=2))       # 完整结构化JSON

# 遍历提取到的表格
for table in result.tables:
    print(f"表格: {table.title} ({table.row_count}x{table.col_count})")
    print(f"表头: {table.headers}")
    print(table.to_markdown())        # 输出Markdown表格
    # table.to_dict()                 # 转为字典

# 遍历提取到的图片(含OCR结果)
for img in result.images:
    print(f"图片: {img.name} ({img.width}x{img.height})")
    print(f"OCR文字: {img.ocr_text}")

# 文档元数据
print(f"作者: {result.metadata.author}")
print(f"页数: {result.metadata.page_count}")
print(f"字数: {result.metadata.word_count}")

# 批量提取
results = extractor.batch_extract(
    ["file1.pdf", "file2.docx", "file3.xlsx"],
    progress_callback=lambda i, t, f, ok: print(f"{i}/{t} {f}")
)

更多示例见:examples.py

输出结果结构 (ExtractionResult)

ExtractionResult
├── metadata: DocumentMetadata    # 文档元数据(文件名、作者、页数等)
├── text: str                      # 纯文本拼接
├── markdown: str                  # 格式化Markdown输出
├── tables: TableContent[]         # 表格数组
│   ├── title, page, index
│   ├── headers: str[]             # 表头
│   ├── rows: str[][]              # 数据行
│   ├── to_markdown()
│   └── to_dict()
├── images: ImageContent[]         # 图片数组
│   ├── name, format, width, height
│   ├── ocr_text: str              # OCR识别文字
│   ├── page, caption, position
│   ├── raw_data: bytes            # (可选)原始字节
│   └── to_dict()
├── structured_data                # 额外结构化信息
├── raw_json                       # JSON/YAML/XML原始结构
├── warnings[]                     # 处理警告
└── errors[]                       # 致命错误

最佳实践

🎯 针对PDF扫描件

  • 扫描件PDF本身没有文字层,需要先用OCR识别
  • 可先用pdf2image转图片,再逐张OCR
  • 使用PaddleOCR中文效果通常优于Tesseract

🎯 大批量处理

  • 设置 enable_ocr=False 可大幅提速(如无需图片文字识别)
  • 目录扫描建议使用CLI的 --output-dir 参数
  • 对结果使用 result.errorsresult.warnings 检查异常

🎯 加密/受损文件

  • 受密码保护的PDF/Office会抛出 PasswordProtectedError
  • 受损文件建议先用LibreOffice重新保存
  • .doc 旧格式需要安装 antiword/catdoc 或 LibreOffice

目录结构

file-content-extractor/
├── SKILL.md                    # 本说明文件
├── requirements.txt            # 依赖列表
├── cli.py                      # 命令行入口
├── examples.py                 # API使用示例(8个完整场景)
└── src/
    ├── __init__.py             # 版本、入口导出
    ├── extractor.py            # 核心:FileContentExtractor 主类
    ├── ocr_handler.py          # OCR处理器(Tesseract/Paddle/EasyOCR)
    ├── models.py               # 数据结构定义
    ├── utils.py                # 工具函数、格式检测
    └── exceptions.py           # 自定义异常类

版本信息

  • 当前版本: v1.1.1
  • 设计原则: 完整提取 > 精确格式 > 处理速度(日常办公文档优先使用--fast极速模式)
  • 迭代记录:
    • v1.1.1: OCR极致提速 — 预处理裁白边(减少det扫描空白区)+灰度化PNG量化+文档内嵌图先收集后批量OCR(flush_pending_ocr)+移除内联OCR的ocr_handler.available访问避免重复探测
    • v1.1.0: 文档解析大提速 — FileContentExtractor全局单例共享OCRHandler模型;CLI取消OCR.available探测;批量提取性能显著提升
    • v1.0.3: OCR性能大幅优化 — RapidOCR use_det智能选择、use_cls=False、图片预处理管线、CLI新增--ocr-fast/--ocr-accurate模式
    • v1.0.2: OCR方案重构 — 新增rapidocr-onnxruntime(零root首选)+ EasyOCR + PaddleOCR;新增 --check-ocr / --install-ocr / --install-all-ocr
    • v1.0.1: 性能全面优化 — Excel openpyxl快路径、OCR/重型依赖彻底懒加载、detect_format O(1)、--fast极速模式
    • v1.0.0: 初始版本,支持15+类格式、多OCR后端、URL输入、结构化结果输出