Skill: szzzcode/judgment-analyzer (version 1.2.1)

--- name: Judgment Analyzer 判决书分析 slug: judgment-analyzer version: 1.2.1 description: 分析判决书文档，提取关键信息并生成结构化分析报告。当用户提到「分析判决书」「解读判决书」「判决书总结」「生成判决书报告」「批量分析判决书」时使用。支持 PDF 和 Word (.docx/.doc) 格式，可处理单个文件或整个文件夹。 author: szzzcode homepage: https://github.com/szzzcode/judgment-analyzer --- # 判决书分析技能 分析本地判决书文档，提取案件关键信息，生成结构化的摘要报告和综合分析报告。 ## 工作流程 ### 步骤 1：接收输入 用户指定判决书路径，支持： - **单文件**：`/path/to/judgment.pdf` - **文件夹**：`/path/to/cases/`（批量处理所有 PDF/Word 文件） - 支持格式：PDF、Word (.docx/.doc) ### 步骤 2：文本提取（Python） 运行 `scripts/analyzer.py` 提取原始文本： ```bash python3 ~/.claude/skills/judgment-analyzer/scripts/analyzer.py <输入路径> ``` 脚本会： 1. 读取每个判决书文件（PDF 或 Word） 2. 提取纯文本内容 3. 将文本保存到 `输入路径/摘要/` 文件夹，文件名为 `原文件名.txt` ### 步骤 3：生成摘要（AI） 1. 读取 `摘要/` 文件夹中的所有 txt 文件 2. 按照输出格式模板，对每个案件生成结构化摘要 3. 将摘要保存为 `案件名_摘要.md` 4. 批量处理时，额外生成 `综合分析报告.md` ### 输出格式要求 在提取信息和生成报告时，**必须严格遵守**模板文件中的格式和要求设置。 具体格式以及各项指引，请读取并遵循此文件： `~/.claude/skills/judgment-analyzer/references/output-template.md` - **单案件摘要**：遵照模板文件中【摘要报告模式】的 6 个核心模块提取并输出。 - **批量综合报告**：遵照模板文件中【综合分析报告模式】的结构和表格要求输出。 ### 触发方式 - 「分析判决书 /path/to/case.pdf」 - 「批量分析 /Users/xxx/Desktop/cases/」 - 「生成判决书综合报告」 - 「对比分析这几份判决书」 ## 注意事项 - 脚本路径：`~/.claude/skills/judgment-analyzer/scripts/analyzer.py` - 首次使用需安装依赖：`pip install -r ~/.claude/skills/judgment-analyzer/scripts/requirements.txt` - 批量处理时，自动跳过非判决书文件（.pdf, .docx, .doc） - 摘要文件夹创建在输入文件夹同级目录 - 优先提取文本，如文本质量差可标记"扫描件，需OCR"

path: README.md
content: # 判决书分析技能

分析判决书文档，提取关键信息，生成结构化分析报告。

**当前版本：v1.2.0 (2026-04-02)**

## 设计思路

本技能采用 **「规则提取 + AI 智能分析」** 的混合模式：

```
Python 脚本 ──提取文本──> .txt 文件 ──AI 读取──> 智能分析 ──> 报告
```

### 为什么这样设计？

1. **扬长避短**
   - Python 适合：读取文件、批量处理、结构化提取（案号/日期等）
   - AI 适合：理解语义、识别案由、提炼争议焦点、归纳法律要点

2. **逻辑穿透 (v1.2.0 深度优化)**
   - **传统分析**：将“争议点”和“判定”分开，导致信息割裂。
   - **v1.2.0 优化**：将“争议焦点”与“法院认定”合并。这种“问题-主张-论证-结论”的链条式输出，能让用户一眼看清：针对某个具体问题，双方是怎么吵的，法院最后是怎么定性的。这种设计能更有效地穿透个案实质。

3. **避免硬编码**
   - 将分析逻辑和模板定义在专门的 `output-template.md` 中，AI 根据实际案由动态分析。

## 核心特色

| 特色 | 说明 |
|------|------|
| **逻辑穿透 (1.2.0新增)** | **合并“诉-辩-裁”逻辑，穿透争议深度，明确各方主张及采信逻辑** |
| 批量分析 | 支持文件夹批量处理，一次分析多份判决书 |
| 结构化提取 | 提取要求固定模板，输出格式统一规范 |
| 混合架构 | Python 提取 + AI 分析，分工明确 |
| 案由自适应 | AI 根据案件类型自动选择分析要点 |
| 纯净文本提取 | 先将 PDF/Word 转为统一 txt，避免格式干扰 |

### 为什么先转 txt？

判决书通常是 PDF 或 Word 格式，内部结构复杂、编码多样，直接给 AI 读取容易出现：
- 乱码、换行错位
- 表格、印章等元素干扰
- 编码不一致导致的信息丢失

本技能先用 Python 提取纯净文本，得到：
- **统一格式**：不管源文件是 PDF 还是 Word，输出都是纯文本
- **干净无噪**：无多余排版符号、无乱码
- **便于 AI 理解**：AI 读取和分析更稳定，信息提取更准确
- **便于存档**：提取后的 txt 可长期保存复用

## 支持的案由类型

AI 可自动识别并分析以下类型的案件：

- 合同纠纷（买卖、租赁、借款、委托理财等）
- 侵权纠纷（人身损害、财产损害、医疗事故等）
- 劳动争议（劳动关系、赔偿金、加班费等）
- 知识产权（专利、商标、著作权等）
- 婚姻家庭（离婚、抚养权、财产分割等）
- 交通事故
- 其他民商事案件

## 使用方案

### OpenClaw 中使用（智能体模式）

在 OpenClaw 平台配置为智能体技能：

```
技能名称：判决书分析
触发词：分析判决书、批量分析、生成判决书报告
```

配置后，用户发送「分析判决书 /path/to/case.pdf」即可自动执行完整流程。

### Claude Code 对话中使用

用户可以直接在 Claude Code 对话中发送指令：

```
分析判决书 ~/Desktop/case.pdf
批量分析 ~/Desktop/cases/
生成判决书综合报告
```

助手会自动：
1. 调用 Python 脚本提取文本
2. 读取提取的文本
3. 按照 references/output-template.md 中的格式要求生成分析报告

### 命令行直接调用

```bash
# 提取文本
python3 ~/.claude/skills/judgment-analyzer/scripts/analyzer.py <路径>

# 单文件
python3 ~/.claude/skills/judgment-analyzer/scripts/analyzer.py ~/Desktop/case.pdf

# 文件夹（批量）
python3 ~/.claude/skills/judgment-analyzer/scripts/analyzer.py ~/Desktop/cases/
```

## 工作流程

```
1. 用户指定判决书路径（单文件或文件夹）
2. Python 脚本批量提取文本
3. AI 读取文本，按 references/output-template.md 要求分析和排版
4. 生成逐案摘要 + 综合对比报告
```

## 文件结构

```
judgment-analyzer/
├── SKILL.md           # 技能定义（工作流程、触发条件）
├── scripts/
│   ├── analyzer.py    # 文本提取脚本
│   └── requirements.txt
├── references/
│   └── output-template.md # 输出格式核心控制模板
└── README.md          # 本文件
```

## 输出示例

详见 `references/output-template.md`

---

*设计理念：让工具做它擅长的事，让 AI 做它擅长的事。*

path: references/output-template.md
content: # 判决书分析报告模板与格式要求

本文件定义了判决书提取摘要报告和综合分析报告的具体格式。
在生成分析结时，**必须严格按照**以下模板结构执行，并且每部分都要有具体的内容描述，不能只有标题。

在生成分析报告前，请遵循以下核心信息定位与提取准则：

1. **基本元素定位**：
   - **案号**：匹配格式如`（年份）字第N号` 或 `（年份）民终N号`。
   - **法院**：提取法院全称。
   - **案由**：判决书中"案由"后的内容。
   - **当事人**：原告/被告 或 上诉人/被上诉人。
   - **裁判日期**：格式如`2023-01-01`。
2. **关键段落识别顺序**：
   - 首先找 **案件事实**（定位词："经审理查明"、"本院查明"）
   - 其次找 **争议焦点**（定位词："争议焦点"、"本案焦点"）
   - 然后找 **法院论证**（定位词："本院认为"、"本院审理认为"）
   - 最后看 **判决结果**（定位词："判决如下"及其后续具体内容）

---

## 一、摘要报告模式（针对单份文件）

每个案件摘要必须包含以下六个核心模块：

```text
================================================================================
                            案 件 摘 要
================================================================================

【基本信息】
案号：（年份）粤/京/鲁...民终/民申/民再N号
法院：XX省/市XX中级人民法院/高级人民法院/最高人民法院
案由：具体案由名称
程序：一审/二审/再审 | 日期：YYYY-MM-DD

【当事人】
上诉人/原告（原审身份）：当事人名称
被上诉人/被告（原审身份）：当事人名称
[第三人]

【案件事实】
详细描述：当事人于何时、因何事、采取何种行为、产生何种后果。
不仅要叙述“发生了什么”，还要说明案涉的核心法律关系性质（如：建设工程施工合同纠纷等）。
包含关键时间、金额、行为过程及证据采信情况。（至少3-5句话）

【争议焦点与法院认定】
焦点 1：[争议的具体法律或法律事实问题]
- 双方主张：原上诉人/原告认为...；被上诉人/被告辩称... [简述双方的核心争议点]
- 法院论证：本院经审理认为，结合证据...（详细引用法院的论证逻辑、适用的法律条款及核心事实认定）
- 认定结果：法院最终支持/不支持该主张，认定理由是...

[根据案件情况，按上述结构列出 1-3 个核心争议点]

【判决结果】
最终判决主文：支持/驳回哪些请求，责任如何划分，
具体金额或比例是多少。包含原审维持或撤销改判的具体情况。

【法律要点】
✓ 第一个法律要点（核心裁判规则：如果 A 情况发生，那么法院通常 B 处理）
✓ 第二个法律要点
[提炼2-5个与案由相关的法律裁判规则，具有实务参考价值]
```

**内容充实度要求**：
- 【案件事实】：必须包含时间、人物、行为、法律后果四要素，描述需专业严谨。
- 【争议焦点与法院认定】：每个焦点必须还原“原告诉请-被告抗辩-法院裁判”的逻辑链路，并明确引用的核心法律法规。
- 【判决结果】：必须准确概括各项请求的成立情况，细化责任比例、金额等。
- 【法律要点】：要提炼出可直接引用的裁判规则，而非简单的法律条文复述。

---

## 综合分析报告模式（针对批量分析多份判决书）

批量分析多份文件产生综合报告时，必须采用以下结构：

**一、案件概览**
以表格形式呈现：

| 案号 | 案由 | 法院 | 程序 | 判决结果 |
|------|------|------|------|----------|

统计信息：
- 案由分布：[列出每种案由及数量]
- 法院分布：[列出涉及的法院及数量]
- 时间范围：[最早日期] 至 [最晚日期]
- 程序分布：[一审/二审/再审 各多少件]

**二、案件类型分析**
根据主要案由类型，分类归纳该类案件的：
- 共同特征
- 核心争议焦点
- 裁判规则

**三、法律要点总结**
以表格形式对比各案：

| 案件 | 争议焦点 | 裁判规则 | 责任比例 |
|------|----------|----------|----------|

**四、结论与建议**
- 案件总体特征
- 风险提示
- 实践建议


path: scripts/analyzer.py
content: #!/usr/bin/env python3
"""
判决书文本提取脚本
功能：
1. 批量处理 PDF/Word 判决书
2. 提取纯文本内容
3. 保存到同名 .txt 文件
"""

import sys
import os
from pathlib import Path

try:
    import pdfplumber
    from docx import Document
except ImportError:
    print("缺少依赖库，请先运行: pip install -r requirements.txt")
    sys.exit(1)


def extract_from_pdf(file_path: str) -> str:
    """从 PDF 提取文本"""
    text_parts = []
    try:
        with pdfplumber.open(file_path) as pdf:
            for page in pdf.pages:
                page_text = page.extract_text()
                if page_text:
                    text_parts.append(page_text)
    except Exception as e:
        print(f"  警告：读取 PDF 时出错 ({file_path}): {e}")
        return ""
    return "\n".join(text_parts)


def extract_from_word(file_path: str) -> str:
    """从 Word 文档提取文本"""
    try:
        doc = Document(file_path)
        return "\n".join([p.text for p in doc.paragraphs])
    except Exception as e:
        print(f"  警告：读取 Word 时出错 ({file_path}): {e}")
        return ""


def process_file(file_path: str, output_dir: str) -> bool:
    """处理单个文件"""
    file_path = Path(file_path)
    ext = file_path.suffix.lower()

    # 提取文本
    if ext == ".pdf":
        text = extract_from_pdf(str(file_path))
    elif ext in [".docx", ".doc"]:
        text = extract_from_word(str(file_path))
    else:
        return False

    if not text or len(text.strip()) < 50:
        print(f"  警告：文本内容过少或为空 ({file_path.name})")
        if text:
            print(f"  前100字符: {text[:100]}...")

    # 保存文本文件
    output_path = os.path.join(output_dir, f"{file_path.stem}.txt")
    with open(output_path, 'w', encoding='utf-8') as f:
        f.write(text)

    print(f"  -> {file_path.stem}.txt ({len(text)} 字符)")
    return True


def main():
    if len(sys.argv) < 2:
        print("用法:")
        print("  单文件: python analyzer.py <文件路径>")
        print("  文件夹: python analyzer.py <文件夹路径>")
        sys.exit(1)

    input_path = Path(sys.argv[1])

    # 确定输出目录
    if input_path.is_file():
        output_dir = input_path.parent / "摘要"
    else:
        output_dir = input_path / "摘要"
    output_dir.mkdir(parents=True, exist_ok=True)

    # 处理输入
    if input_path.is_file():
        print(f"处理文件: {input_path.name}")
        success = process_file(str(input_path), str(output_dir))
        if success:
            print(f"完成！文本已保存到: {output_dir}")
        else:
            print("处理失败")
    elif input_path.is_dir():
        supported_ext = {'.pdf', '.docx', '.doc'}
        files = [f for f in input_path.iterdir()
                 if f.is_file() and f.suffix.lower() in supported_ext]

        print(f"找到 {len(files)} 份文件...")
        print(f"输出目录: {output_dir}\n")

        success_count = 0
        for i, f in enumerate(files, 1):
            print(f"[{i}/{len(files)}] {f.name}")
            if process_file(str(f), str(output_dir)):
                success_count += 1

        print(f"\n完成！成功处理 {success_count}/{len(files)} 份文件")
        print(f"文本已保存到: {output_dir}")
    else:
        print(f"错误：路径不存在 {input_path}")
        sys.exit(1)


if __name__ == "__main__":
    main()

path: scripts/requirements.txt
content: # 判决书分析 Skill - Python 依赖
# 安装方法: pip install -r requirements.txt

# PDF 解析
pdfplumber>=0.10.0

# Word 文档读写
python-docx>=0.8.11

# 可选：更好的 PDF OCR 支持（如果 PDF 是扫描件）
# PyMuPDF>=1.23.0


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)