# 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 ``` ## 需求类型说明 工具统计**三类**需求类型: | 类型 | 描述 | |------|------| | **功能需求** | 系统应该提供的功能和行为 | | **接口需求** | 系统的输入/输出接口规范、通信协议等 | | **其他需求** | 性能、安全、可靠性等非功能性需求 | ### 接口需求扩展字段 接口需求除了基本的"需求编号"和"需求描述"外,还包含以下字段: | 字段 | 说明 | |------|------| | **接口名称** | 接口的名称 | | **接口类型** | 接口的类型 | | **数据来源** | 数据或信号的来源/发送方 | | **数据目的地** | 数据或信号的目的地/接收方 | ### 需求描述策略(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 # 工具函数 ```