4.3 KiB
4.3 KiB
| name | description | version | author | license | metadata | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| office-text-extract | Extract text from .docx/.pptx/.xlsx/.pdf without pandoc. | 2.0.0 | Hermes Agent | Apache-2.0 (docx/pptx/xlsx engine from genspark-ai/genoffice) |
|
Office Text Extraction (headless)
从 .docx / .pptx / .xlsx / .pdf 提取纯文本,无需 pandoc / LibreOffice。统一入口一个命令覆盖四种格式:
.docx/.pptx/.xlsx→ GenOffice 引擎(github.com/genspark-ai/genoffice,Apache-2.0)的file-parse+docx-engine,esbuild 打成单文件 Node CLI.pdf(文本型)→ pymupdf(Python).pdf(扫描件/图片型,需 OCR)→ marker-pdf,见ocr-and-documents技能
何时用
- 需要读取已有 Office/PDF 文档内容(本机无 pandoc/LibreOffice 时尤其适用)
- 给 AI 附加 Office/PDF 附件前先转文本
- 快速抽取正文做检索、摘要、diff
工具位置
scripts/office-extract # 统一入口(bash,按扩展名分发)★ 主入口
scripts/genoffice-extract.mjs # docx/pptx/xlsx 引擎(Node,单文件,~1MB)
scripts/extract_pdf.py # pdf 文本提取(pymupdf)
scripts/build.sh # 可复现重建 Node 引擎(从 genoffice 源重新打包)
要求:Node 18+(docx/pptx/xlsx)+ pymupdf(pdf)。
用法
BIN=scripts/office-extract
# 统一入口,四种格式都行(纯文本到 stdout)
"$BIN" /path/to/file.docx
"$BIN" /path/to/file.pdf
# JSON 模式({ok,kind,ext,text|error}),便于程序化处理
"$BIN" --json /path/to/file.xlsx
也可以直接调底层:node scripts/genoffice-extract.mjs <docx|pptx|xlsx>、python3 scripts/extract_pdf.py <pdf>。
输出格式
- docx:标题转
#/##(按级别),列表项转-,有序列表转1. 2. 3.,表格行转cell1 | cell2 | ...,正文段落原样。接近 Markdown。 - pptx:每页一段
## Slide N,每段文字一行,按 slide 编号升序。 - xlsx:每个工作表一段
# SheetName,行内单元格用|连接(空单元格占位对齐),inlineStr/sharedStrings/布尔/数字均正确处理。 - pdf:每页文本用
\n\n分隔,中文/多页正常。 - 中文、ASCII 图、多列表格均无损(docx/pdf 实测通过)。
坑
- PDF 分两类:
- 文本型 PDF(有嵌入文本层)→
extract_pdf.py(pymupdf),即时返回。 - 扫描件/图片型 PDF(无文本层)→ pymupdf 提取为空,脚本会提示改用 marker-pdf OCR(
ocr-and-documents技能的extract_marker.py)。marker-pdf 需 ~5GB(PyTorch+模型)且首次运行下载模型。
- 文本型 PDF(有嵌入文本层)→
- 只有提取,没有生成/编辑:本工具只读文本。生成 docx 用
docx技能(docx-js)、md→docx 用markdown-to-docx技能;编辑已有 docx 的批注/修订/图表需docx-engine的 patch 能力(未封装)。 - Node 版本:bundle target 是 node18,老环境可能不兼容。
- 大文件:docx 解析会展开整个 OOXML;超大文件(>50MB)内存占用高。
重建 Node 引擎(genoffice 上游更新时)
bash scripts/build.sh
build.sh 从 genoffice main 分支重新下载 file-parse + docx-engine 源码、装依赖、esbuild 打包,覆盖 scripts/genoffice-extract.mjs。需网络可达 raw.githubusercontent.com(若被墙,先建 SOCKS5 隧道并设 PROXY=socks5h://127.0.0.1:1080)。
迁移到其他机器 / pipeline-app
- docx/pptx/xlsx:
genoffice-extract.mjs是纯 Node 单文件工具,只需 Node 18+,零依赖。拷过去node <path> <file>即用。 - pdf:需要目标机
pip install pymupdf(~25MB,一条命令)。 - pdf OCR:需要
pip install marker-pdf+ ~5GB 磁盘(首次运行下载模型)。
三者迁移成本递增:docx/pptx/xlsx(零依赖)< pdf 文本(pip 装 pymupdf)< pdf OCR(5GB)。
- 若 pipeline-app 服务器有 Node:拷
genoffice-extract.mjs即可在服务器 shell 用。 - 若要 pipeline-app 的 DSPY/前端调用:另写一个薄 Sage 模块,用
subprocess/child_process调对应 CLI 取 stdout(后续集成决策,本 skill 不涉及)。