SRS需求文档解析工具

一个基于大模型的SRS软件需求规格说明书文档解析工具支持PDF和Docx格式能够自动提取需求并生成结构化JSON输出。

特性

  • LLM增强:集成阿里云千问大模型,智能识别和提取需求
  • 多格式支持支持PDF和Docx格式的SRS文档
  • 非严格文档结构:支持不规范的文档结构
  • 智能过滤:自动过滤系统描述、重复需求等非需求内容
  • 结构化输出按章节层次组织的JSON格式输出
  • 表格需求识别:支持从表格中提取功能/接口/其他需求
  • PDF表格提取支持从PDF中提取表格并自动挂接到章节
  • 长句原子拆分:自动将包含多个需求点的长句拆分为多个可验证需求项
  • 章节筛选提取:支持按章节号提取(如输入3提取第3章及其全部子章节
  • LLM-only当前版本仅支持LLM提取链路不再提供规则提取模式

快速开始

安装依赖

pip install -r requirements.txt

# 如果使用LLM功能还需安装
pip install dashscope

# 若需增强PDF表格提取能力requirements.txt已包含
pip install pdfplumber

配置API密钥必需

# 方式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"

运行

# 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

需求类型说明

工具统计三类需求类型:

类型 描述
功能需求 系统应该提供的功能和行为
接口需求 系统的输入/输出接口规范、通信协议等
其他需求 性能、安全、可靠性等非功能性需求

接口需求扩展字段

接口需求除了基本的"需求编号"和"需求描述"外,还包含以下字段:

字段 说明
接口名称 接口的名称
接口类型 接口的类型
数据来源 数据或信号的来源/发送方
数据目的地 数据或信号的目的地/接收方

需求描述策略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               # 工具函数
Description
从Word/PDF文件中提取需求项
Readme 203 KiB
Languages
Python 100%