Files
Extract_reqs/README.md

126 lines
4.3 KiB
Markdown
Raw Normal View History

2026-02-03 22:48:22 +08:00
# SRS需求文档解析工具
一个基于大模型的SRS软件需求规格说明书文档解析工具支持PDF和Docx格式能够自动提取需求并生成结构化JSON输出。
2026-02-03 22:48:22 +08:00
## 特性
- **LLM增强**:集成阿里云千问大模型,智能识别和提取需求
- **多格式支持**支持PDF和Docx格式的SRS文档
2026-02-03 22:54:12 +08:00
- **非严格文档结构**:支持不规范的文档结构
2026-02-03 22:48:22 +08:00
- **智能过滤**:自动过滤系统描述、重复需求等非需求内容
- **结构化输出**按章节层次组织的JSON格式输出
- **表格需求识别**:支持从表格中提取功能/接口/其他需求
- **PDF表格提取**支持从PDF中提取表格并自动挂接到章节
- **长句原子拆分**:自动将包含多个需求点的长句拆分为多个可验证需求项
- **章节筛选提取**:支持按章节号提取(如输入`3`提取第3章及其全部子章节
- **LLM-only**当前版本仅支持LLM提取链路不再提供规则提取模式
2026-02-03 22:48:22 +08:00
## 快速开始
### 安装依赖
```bash
pip install -r requirements.txt
# 如果使用LLM功能还需安装
pip install dashscope
# 若需增强PDF表格提取能力requirements.txt已包含
pip install pdfplumber
2026-02-03 22:48:22 +08:00
```
### 配置API密钥必需
2026-02-03 22:48:22 +08:00
```bash
# 方式1环境变量推荐
# Linux/Mac
export DASHSCOPE_API_KEY="your-api-key"
# Windows PowerShell
$env:DASHSCOPE_API_KEY="your-api-key"
# 方式2在config.yaml中配置
2026-02-03 22:54:12 +08:00
llm:
api_key: "your-api-key"
2026-02-03 22:48:22 +08:00
```
### 运行
```bash
# LLM增强模式唯一模式
python main.py -i ".\input\DC-SRS.pdf" -o ".\output\output.json"
2026-02-03 22:48:22 +08:00
# 按章节提取输入3表示提取第3章及3.x子章节
python main.py -i ".\input\DC-SRS.pdf" -o ".\output\output_ch3.json" --chapters 3
2026-02-03 22:48:22 +08:00
```
<!-- ```bash
# 查看顶级章节编号
python -c "from src.document_parser import DocxParser; parser = DocxParser('test.docx'); sections = parser.parse(); print('所有顶级章节:'); [print(f'{i+1}. [{s.number}] {s.title}') for i, s in enumerate(sections)]"
``` -->
## 需求类型说明
工具统计**三类**需求类型:
| 类型 | 描述 |
|------|------|
| **功能需求** | 系统应该提供的功能和行为 |
| **接口需求** | 系统的输入/输出接口规范、通信协议等 |
| **其他需求** | 性能、安全、可靠性等非功能性需求 |
### 接口需求扩展字段
接口需求除了基本的"需求编号"和"需求描述"外,还包含以下字段:
| 字段 | 说明 |
|------|------|
| **接口名称** | 接口的名称 |
| **接口类型** | 接口的类型 |
| **数据来源** | 数据或信号的来源/发送方 |
| **数据目的地** | 数据或信号的目的地/接收方 |
2026-02-03 22:48:22 +08:00
### 需求描述策略LLM驱动
2026-02-03 22:48:22 +08:00
- **功能需求**:以原文为主,必要时轻微补全语义
- **接口需求**:允许适度改写润色,并补齐接口字段
- **其他需求**:以原文为主,避免无意义改写
### 表格处理策略
- **系统功能要求表、性能要求表**:默认忽略,不提取需求
- **接口要求表**:可提取接口需求,且接口字段优先从表格列提取
- **硬件/软件/运行环境表**:按“一表一条”生成需求,避免拆成多条
### 润色约束
- 除接口需求外,需求描述尽量保持原文
- 非接口需求的润色改动上限为20个字超限则回退原描述
## 运行约束
- 必须配置可用的 `DASHSCOPE_API_KEY`(或在 `config.yaml` 中配置 `llm.api_key`
- 当LLM初始化失败或调用失败时程序会直接报错退出不会降级为规则提取
- `--chapters` 为空时提取全量;设置为 `3` 时仅提取第3章及其子章节
2026-02-03 22:48:22 +08:00
## 目录结构
```
SRS_reqs_qwen/
├── main.py # 主程序入口
├── config.yaml # 配置文件
├── requirements.txt # 依赖
2026-02-03 22:54:12 +08:00
├── json_to_excel.py # JSON转Excel工具
├── README.md # 项目说明
├── input/ # 输入文档目录
├── output/ # 输出结果目录
└── src/ # 源代码目录
├── __init__.py
├── document_parser.py # 文档解析器
├── requirement_extractor.py # 需求提取器
├── json_generator.py # JSON生成器
├── llm_interface.py # LLM接口
└── utils.py # 工具函数
2026-02-03 22:48:22 +08:00
```