2026-02-03 22:48:22 +08:00
|
|
|
|
# SRS需求文档解析工具
|
|
|
|
|
|
|
|
|
|
|
|
一个智能的SRS(软件需求规格说明书)文档解析工具,支持PDF和Docx格式,能够自动提取需求并生成结构化JSON输出。
|
|
|
|
|
|
|
|
|
|
|
|
## 特性
|
|
|
|
|
|
|
|
|
|
|
|
- **LLM增强**:集成阿里云千问大模型,智能识别和提取需求
|
|
|
|
|
|
- **多格式支持**:支持PDF和Docx格式的SRS文档
|
2026-02-03 22:54:12 +08:00
|
|
|
|
- **非严格文档结构**:支持不规范的文档结构
|
2026-02-03 22:48:22 +08:00
|
|
|
|
- **智能过滤**:自动过滤系统描述、重复需求等非需求内容
|
|
|
|
|
|
- **结构化输出**:按章节层次组织的JSON格式输出
|
|
|
|
|
|
- **表格需求识别**:支持从表格中提取功能/接口/其他需求
|
2026-04-12 21:45:55 +08:00
|
|
|
|
- **PDF表格提取**:支持从PDF中提取表格并自动挂接到章节
|
|
|
|
|
|
- **长句原子拆分**:自动将包含多个需求点的长句拆分为多个可验证需求项
|
2026-02-03 22:48:22 +08:00
|
|
|
|
|
|
|
|
|
|
## 快速开始
|
|
|
|
|
|
|
|
|
|
|
|
### 安装依赖
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
pip install -r requirements.txt
|
|
|
|
|
|
|
|
|
|
|
|
# 如果使用LLM功能,还需安装:
|
|
|
|
|
|
pip install dashscope
|
2026-04-12 21:45:55 +08:00
|
|
|
|
|
|
|
|
|
|
# 若需增强PDF表格提取能力(requirements.txt已包含)
|
|
|
|
|
|
pip install pdfplumber
|
2026-02-03 22:48:22 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 配置API密钥(LLM模式)
|
|
|
|
|
|
|
|
|
|
|
|
```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增强模式
|
2026-04-12 21:45:55 +08:00
|
|
|
|
python main.py -i ".\input\DC-SRS.pdf" -o ".\output\output.json"
|
2026-02-03 22:48:22 +08:00
|
|
|
|
|
|
|
|
|
|
# 纯规则模式(不使用LLM)
|
|
|
|
|
|
python main.py -i DC-SRS.pdf -o output.json --no-llm
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
<!-- ```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:54:12 +08:00
|
|
|
|
| **接口类型** | 接口的类型
|
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
|
|
|
|
```
|
|
|
|
|
|
|