关于 sn-da-non-spreadsheet-analysis
用于分析 Word、PDF 和 PPT 文档的技能,面向需要提取并核对文档内容的工作流。它按文件格式加载对应子技能,并要求扫描全部页面、表格及图像内容。
主要功能
- 01按格式加载解析子技能
- 02遍历所有页面、段落和幻灯片
- 03提取文档中的全部表格
- 04检测图像内容并调用 caption.py
- 05核验统计与计算结果
适用场景
- 01汇总目录中的多份文档
- 02检查 PDF 扫描页的图像内容
- 03提取演示文稿和 Word 文件的表格
- 04回答需要核验数字的文档问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ opensensenova/ sensenova-skills --skill sn-da-non-spreadsheet-analysis安装后在 Claude Code 中输入/sn-da-non-spreadsheet-analysis确认已加载。
详细介绍
文档分析技能 — Word / PDF / PPT
用于解析 Word、PDF 和 PPT 文档的端到端工作流。每种格式都有特定的解析注意事项——请严格遵循对应格式的子技能。
工作流
步骤 0 — 确定文件类型和输入范围
import os
input_path = "/mnt/data/..." # from user
# Detect single file vs directory (multi-file scenario)
if os.path.isdir(input_path):
all_files = [
os.path.join(input_path, f)
for f in os.listdir(input_path)
if f.lower().endswith(('.docx', '.doc', '.pdf', '.pptx', '.ppt'))
]
print(f"Found {len(all_files)} documents: {all_files}")
else:
all_files = [input_path]
# Route by extension
ext = os.path.splitext(all_files[0])[-1].lower()
print(f"File type: {ext}")
重要规则:当
input_path是目录,或用户说“这些文件”/“所有文档”时, 处理所有文件并汇总结果。绝不要只处理第一个文件。
步骤 1 — 按格式加载子技能
| 扩展名 | 要加载的子技能 |
|---|---|
.docx / .doc | capability/word-analysis/SKILL.md |
.pdf | capability/pdf-analysis/SKILL.md |
.pptx / .ppt | capability/ppt-analysis/SKILL.md |
read_file(path="<skills_root>/sn-da-non-spreadsheet-analysis/capability/<format>-analysis/SKILL.md")
只加载所需的子技能——不要一次加载全部三个。
步骤 2 — 解析和提取
遵循子技能的提取模式。对于所有格式:
- 完整扫描:遍历所有页面/幻灯片/段落——绝不要提前停止
- 表格提取:提取每一个表格,而不只是第一个
- 图像/图表检测:如果页面/幻灯片未提取到文本,则将其视为基于图像的内容,并调用
caption.py
步骤 3 — 核验后作答
提取数据后,回答前进行核验:
# For count/statistics questions: spot-check 3-5 items
sample = result_list[:3]
print(f"Sample check: {sample}")
print(f"Total count: {len(result_list)}")
# For numeric calculations: print intermediate values
print(f"Max={max_val}, Min={min_val}, Range={max_val - min_val}")
# For unit-sensitive answers: always include the unit
print(f"Answer: {value} {unit}") # e.g., "475 千港元" not just "475"
通用规则
必须执行
- 始终遍历所有页面/幻灯片/段落——
for page in doc、for slide in prs.slides、for para in doc.paragraphs - 输入为目录时:收集并处理所有匹配文件,然后汇总结果
- 对于扫描版 PDF:检测文本是否为空 → 调用
caption.py进行 OCR - 对于仅含图像的幻灯片:文本提取结果为空 → 将幻灯片渲染为 PNG → 调用
caption.py - 进行计算时:展示中间值;确认单位与问题相符
绝不可执行
- 不要将
pytesseract或easyocr用作主要 OCR 工具——它们未安装;请使用caption.py - 不要使用 PIL 像素分析来推断图表数值——请改用视觉模型生成说明
- 不要只处理第一个文件、第一页或第一个表格
- 不要根据文件名猜测内容——始终解析实际文件
- 问题询问绝对值时,不要输出百分比(反之亦然)
说明脚本(用于任何文档中的图像/图表内容)
当页面、幻灯片或嵌入图像需要视觉理解时,请先加载
sn-da-image-caption 技能,然后使用其 scripts/caption.py:
read_file(path="<skills_root>/sn-da-image-caption/SKILL.md")
import subprocess, json
CAPTION = "/path/to/skills/sn-da-image-caption/scripts/caption.py"
def caption_image(image_path, prompt=None):
cmd = ["python3", CAPTION, image_path, "--json"]
if prompt:
cmd += ["--prompt", prompt]
result = subprocess.run(cmd, capture_output=True, text=True, timeout=60)
if result.returncode != 0:
raise RuntimeError(f"caption failed: {result.stderr[:200]}")
return json.loads(result.stdout)["description"]
# Example prompts by content type:
# Table: "提取表格所有内容,Markdown 表格格式,保持行列结构,数值不四舍五入。"
# Chart: "提取图表标题、坐标轴标签、每个数据点的数值。Markdown 表格输出。"
# Diagram: "描述所有节点和连接关系。"
可用子技能
sn-da-non-spreadsheet-analysis/capability/word-analysis/SKILL.md — .docx/.doc
sn-da-non-spreadsheet-analysis/capability/pdf-analysis/SKILL.md — .pdf
sn-da-non-spreadsheet-analysis/capability/ppt-analysis/SKILL.md — .pptx/.ppt
评论
支持 Markdown