文件内容提取专家 (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等) |
⚙️ 核心技术能力
-
表格结构完整提取
- PDF表格:使用pdfplumber多策略精准提取
- Word/PPT/HTML表格:保留表头、行列关系
- Excel:多Sheet、合并单元格、公式结果
- 自动输出Markdown/JSON/CSV格式
-
文档内嵌图片提取 + OCR
- PDF内嵌图片:直接提取图像流
- Word/PPT插图:从压缩包结构提取
- 自动识别图片文字(多OCR后端)
- 支持:Tesseract / PaddleOCR / EasyOCR
-
图片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.errors和result.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输入、结构化结果输出
微信扫一扫