Files
Extract_reqs/README.md

126 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# SRS需求文档解析工具
一个基于大模型的SRS软件需求规格说明书文档解析工具支持PDF和Docx格式能够自动提取需求并生成结构化JSON输出。
## 特性
- **LLM增强**:集成阿里云千问大模型,智能识别和提取需求
- **多格式支持**支持PDF和Docx格式的SRS文档
- **非严格文档结构**:支持不规范的文档结构
- **智能过滤**:自动过滤系统描述、重复需求等非需求内容
- **结构化输出**按章节层次组织的JSON格式输出
- **表格需求识别**:支持从表格中提取功能/接口/其他需求
- **PDF表格提取**支持从PDF中提取表格并自动挂接到章节
- **长句原子拆分**:自动将包含多个需求点的长句拆分为多个可验证需求项
- **章节筛选提取**:支持按章节号提取(如输入`3`提取第3章及其全部子章节
- **LLM-only**当前版本仅支持LLM提取链路不再提供规则提取模式
## 快速开始
### 安装依赖
```bash
pip install -r requirements.txt
# 如果使用LLM功能还需安装
pip install dashscope
# 若需增强PDF表格提取能力requirements.txt已包含
pip install pdfplumber
```
### 配置API密钥必需
```bash
# 方式1环境变量推荐
# Linux/Mac
export DASHSCOPE_API_KEY="your-api-key"
# Windows PowerShell
$env:DASHSCOPE_API_KEY="your-api-key"
# 方式2在config.yaml中配置
llm:
api_key: "your-api-key"
```
### 运行
```bash
# LLM增强模式唯一模式
python main.py -i ".\input\DC-SRS.pdf" -o ".\output\output.json"
# 按章节提取输入3表示提取第3章及3.x子章节
python main.py -i ".\input\DC-SRS.pdf" -o ".\output\output_ch3.json" --chapters 3
```
<!-- ```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)]"
``` -->
## 需求类型说明
工具统计**三类**需求类型:
| 类型 | 描述 |
|------|------|
| **功能需求** | 系统应该提供的功能和行为 |
| **接口需求** | 系统的输入/输出接口规范、通信协议等 |
| **其他需求** | 性能、安全、可靠性等非功能性需求 |
### 接口需求扩展字段
接口需求除了基本的"需求编号"和"需求描述"外,还包含以下字段:
| 字段 | 说明 |
|------|------|
| **接口名称** | 接口的名称 |
| **接口类型** | 接口的类型 |
| **数据来源** | 数据或信号的来源/发送方 |
| **数据目的地** | 数据或信号的目的地/接收方 |
### 需求描述策略LLM驱动
- **功能需求**:以原文为主,必要时轻微补全语义
- **接口需求**:允许适度改写润色,并补齐接口字段
- **其他需求**:以原文为主,避免无意义改写
### 表格处理策略
- **系统功能要求表、性能要求表**:默认忽略,不提取需求
- **接口要求表**:可提取接口需求,且接口字段优先从表格列提取
- **硬件/软件/运行环境表**:按“一表一条”生成需求,避免拆成多条
### 润色约束
- 除接口需求外,需求描述尽量保持原文
- 非接口需求的润色改动上限为20个字超限则回退原描述
## 运行约束
- 必须配置可用的 `DASHSCOPE_API_KEY`(或在 `config.yaml` 中配置 `llm.api_key`
- 当LLM初始化失败或调用失败时程序会直接报错退出不会降级为规则提取
- `--chapters` 为空时提取全量;设置为 `3` 时仅提取第3章及其子章节
## 目录结构
```
SRS_reqs_qwen/
├── main.py # 主程序入口
├── config.yaml # 配置文件
├── requirements.txt # 依赖
├── 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 # 工具函数
```