327 lines
7.8 KiB
Markdown
327 lines
7.8 KiB
Markdown
|
|
# API参考
|
|||
|
|
|
|||
|
|
本文档提供给开发者使用的API参考。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 规范检查器 API
|
|||
|
|
|
|||
|
|
### `GaokaoSpecCheckerV2` 类
|
|||
|
|
|
|||
|
|
用于检查志愿方案的规范性。
|
|||
|
|
|
|||
|
|
#### 构造函数
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
from spec_checker_v2 import GaokaoSpecCheckerV2
|
|||
|
|
|
|||
|
|
checker = GaokaoSpecCheckerV2(province=None)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**参数**:
|
|||
|
|
|
|||
|
|
- `province` (str, 可选): 省份名称,如"湖南"、"浙江"。如果未指定,会自动检测。
|
|||
|
|
|
|||
|
|
#### 方法
|
|||
|
|
|
|||
|
|
##### `auto_detect_and_check(text)`
|
|||
|
|
|
|||
|
|
自动检测省份并检查方案。
|
|||
|
|
|
|||
|
|
**参数**:
|
|||
|
|
|
|||
|
|
- `text` (str): 志愿方案文本
|
|||
|
|
|
|||
|
|
**返回值**:
|
|||
|
|
|
|||
|
|
- `str`: 检查报告(Markdown格式)
|
|||
|
|
|
|||
|
|
**示例**:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
checker = GaokaoSpecCheckerV2()
|
|||
|
|
report = checker.auto_detect_and_check("我是湖南考生,578分...")
|
|||
|
|
print(report)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
##### `check_volunteer_unit(text)`
|
|||
|
|
|
|||
|
|
检查志愿单位是否正确。
|
|||
|
|
|
|||
|
|
**检测条件**:
|
|||
|
|
|
|||
|
|
- 省份模式为"院校专业组"时,应使用"院校专业组"而非"学校"
|
|||
|
|
- 省份模式为"专业+学校"时,不应使用"组内服从"
|
|||
|
|
|
|||
|
|
##### `check_volunteer_count(text)`
|
|||
|
|
|
|||
|
|
检查志愿数量是否合规。
|
|||
|
|
|
|||
|
|
**检测条件**:
|
|||
|
|
|
|||
|
|
- 是否超过本省最大志愿数
|
|||
|
|
- 是否填满建议志愿数
|
|||
|
|
|
|||
|
|
##### `check_majors_per_group(text)`
|
|||
|
|
|
|||
|
|
检查每组专业数。
|
|||
|
|
|
|||
|
|
**检测条件**:
|
|||
|
|
|
|||
|
|
- 院校专业组模式:每组最多6个
|
|||
|
|
- 专业+学校模式:每组1个
|
|||
|
|
|
|||
|
|
##### `check_adjustment_rule(text)`
|
|||
|
|
|
|||
|
|
检查调剂规则。
|
|||
|
|
|
|||
|
|
**检测条件**:
|
|||
|
|
|
|||
|
|
- 调剂范围是否符合本省模式
|
|||
|
|
- 是否提到"组内专业"
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🗺️ 省份规则 API
|
|||
|
|
|
|||
|
|
### `PROVINCE_RULES` 字典
|
|||
|
|
|
|||
|
|
包含27个省份的志愿填报规则。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
from spec_checker_v2 import PROVINCE_RULES
|
|||
|
|
|
|||
|
|
# 获取湖南规则
|
|||
|
|
hunan_rule = PROVINCE_RULES["湖南"]
|
|||
|
|
|
|||
|
|
print(hunan_rule["mode"]) # "院校专业组"
|
|||
|
|
print(hunan_rule["max_volunteers"]) # 45
|
|||
|
|
print(hunan_rule["adjustment_scope"]) # "组内专业"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 规则字段
|
|||
|
|
|
|||
|
|
| 字段 | 类型 | 说明 | 示例 |
|
|||
|
|
| ---------------------- | ---- | ---------- | ----------------------------------- |
|
|||
|
|
| `mode` | str | 志愿模式 | "院校专业组" / "专业+学校" / "传统" |
|
|||
|
|
| `max_volunteers` | int | 最大志愿数 | 45 |
|
|||
|
|
| `max_majors_per_group` | int | 每组专业数 | 6 |
|
|||
|
|
| `has_adjustment` | bool | 是否有调剂 | True |
|
|||
|
|
| `adjustment_scope` | str | 调剂范围 | "组内专业" / "全部专业" / "无" |
|
|||
|
|
| `retrieval_rule` | str | 检索规则 | "分数优先、遵循志愿、一次投档" |
|
|||
|
|
| `collection_count` | int | 征集次数 | 2 |
|
|||
|
|
| `subject_mode` | str | 选科模式 | "3+1+2" / "3+3" / "传统" |
|
|||
|
|
| `official_url` | str | 官方网址 | "http://jyt.hunan.gov.cn/" |
|
|||
|
|
| `exam_subject_total` | int | 总分 | 750 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔍 省份检测 API
|
|||
|
|
|
|||
|
|
### `detect_province(text)`
|
|||
|
|
|
|||
|
|
从文本中自动检测省份。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
from spec_checker_v2 import detect_province
|
|||
|
|
|
|||
|
|
province = detect_province("我是湖南考生...")
|
|||
|
|
print(province) # "湖南"
|
|||
|
|
|
|||
|
|
province = detect_province("浙江省,620分")
|
|||
|
|
print(province) # "浙江"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**支持检测形式**:
|
|||
|
|
|
|||
|
|
- 全称:"湖南"、"浙江省"
|
|||
|
|
- 简称:"湘"、"浙"
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔤 错误模式 API
|
|||
|
|
|
|||
|
|
### 错误分类
|
|||
|
|
|
|||
|
|
#### 🔴 致命错误
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
{
|
|||
|
|
"rule": "错误名称(省份)",
|
|||
|
|
"description": "问题描述",
|
|||
|
|
"fix": "修正建议"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**检测函数**: `_check_volunteer_unit()`
|
|||
|
|
|
|||
|
|
#### 🟡 严重错误
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
{
|
|||
|
|
"rule": "错误名称",
|
|||
|
|
"description": "问题描述",
|
|||
|
|
"fix": "修正建议"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**检测函数**: `_check_data_accuracy()`
|
|||
|
|
|
|||
|
|
#### 🟢 一般警告
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
{
|
|||
|
|
"rule": "警告名称",
|
|||
|
|
"description": "建议描述",
|
|||
|
|
"fix": "补充建议"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**检测函数**: `_check_risk_disclosure()`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📝 报告生成 API
|
|||
|
|
|
|||
|
|
### 检查报告格式
|
|||
|
|
|
|||
|
|
检查器返回的Markdown格式报告:
|
|||
|
|
|
|||
|
|
```markdown
|
|||
|
|
╔══════════════════════════════════════════════════════════════════╗
|
|||
|
|
║ ✅ 志愿方案规范检查报告 ║
|
|||
|
|
╠══════════════════════════════════════════════════════════════════╣
|
|||
|
|
║ 检测省份:湖南 ║
|
|||
|
|
║ 志愿模式:院校专业组 ║
|
|||
|
|
║ ...
|
|||
|
|
╚══════════════════════════════════════════════════════════════════╝
|
|||
|
|
|
|||
|
|
🔴 【致命错误】
|
|||
|
|
└──────────────────────────────────────────────────────────────────────
|
|||
|
|
|
|||
|
|
1. 错误名称
|
|||
|
|
❌ 问题:...
|
|||
|
|
✅ 修正:...
|
|||
|
|
|
|||
|
|
🟡 【严重错误】
|
|||
|
|
└──────────────────────────────────────────────────────────────────────
|
|||
|
|
|
|||
|
|
1. 错误名称
|
|||
|
|
⚠️ 问题:...
|
|||
|
|
🔧 修正:...
|
|||
|
|
|
|||
|
|
🟢 【一般警告】
|
|||
|
|
└──────────────────────────────────────────────────────────────────────
|
|||
|
|
|
|||
|
|
1. 警告名称
|
|||
|
|
💡 建议:...
|
|||
|
|
📌 做法:...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🧪 测试 API
|
|||
|
|
|
|||
|
|
### `test_hunan_bad_plan()`
|
|||
|
|
|
|||
|
|
测试湖南错误版方案检测能力。
|
|||
|
|
|
|||
|
|
**预期**: 检测出1个致命错误("45个学校")
|
|||
|
|
|
|||
|
|
### `test_hunan_good_plan()`
|
|||
|
|
|
|||
|
|
测试湖南修正版方案合规性。
|
|||
|
|
|
|||
|
|
**预期**: 通过基础检查
|
|||
|
|
|
|||
|
|
### `test_zhejiang_wrong_mode()`
|
|||
|
|
|
|||
|
|
测试浙江模式错误检测。
|
|||
|
|
|
|||
|
|
**预期**: 检测出E005模式错误
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔧 扩展开发
|
|||
|
|
|
|||
|
|
### 添加新省份
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 在 PROVINCE_RULES 中添加
|
|||
|
|
PROVINCE_RULES["新省份"] = {
|
|||
|
|
"mode": "院校专业组", # 或 "专业+学校" / "传统"
|
|||
|
|
"batch": "本科批", # 或 "本科一批" / "普通批"
|
|||
|
|
"max_volunteers": 45,
|
|||
|
|
"max_majors_per_group": 6,
|
|||
|
|
"has_adjustment": True,
|
|||
|
|
"adjustment_scope": "组内专业",
|
|||
|
|
"retrieval_rule": "分数优先、遵循志愿、一次投档",
|
|||
|
|
"collection_count": 2,
|
|||
|
|
"subject_mode": "3+1+2", # 或 "3+3" / "传统"
|
|||
|
|
"official_url": "http://...", # 官方网址
|
|||
|
|
"exam_subject_total": 750,
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 添加新错误检测
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 在 GaokaoSpecCheckerV2 类中添加方法
|
|||
|
|
|
|||
|
|
def _check_new_error(self, text):
|
|||
|
|
"""检查新错误类型"""
|
|||
|
|
error_pattern = r'错误正则'
|
|||
|
|
if re.search(error_pattern, text):
|
|||
|
|
self.errors["fatal"].append({
|
|||
|
|
"rule": "新错误名称",
|
|||
|
|
"description": "问题描述",
|
|||
|
|
"fix": "修正建议"
|
|||
|
|
})
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📦 导入路径
|
|||
|
|
|
|||
|
|
### 从项目根目录
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
import sys
|
|||
|
|
sys.path.insert(0, '/home/long/project/gaokao-volunteer-system/skills/gaokao-spec-checker/scripts')
|
|||
|
|
|
|||
|
|
from spec_checker_v2 import GaokaoSpecCheckerV2, PROVINCE_RULES, detect_province
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 从Skill目录
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 相对路径(在Skill内使用)
|
|||
|
|
from scripts.spec_checker_v2 import GaokaoSpecCheckerV2
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎨 输出格式
|
|||
|
|
|
|||
|
|
### 返回类型
|
|||
|
|
|
|||
|
|
所有API返回标准的Python数据类型:
|
|||
|
|
|
|||
|
|
- `str`: Markdown格式的检查报告
|
|||
|
|
- `dict`: 省份规则配置
|
|||
|
|
- `list`: 错误列表
|
|||
|
|
- `bool`: 检测结果
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📞 更多信息
|
|||
|
|
|
|||
|
|
- 完整实现: [skills/gaokao-spec-checker/scripts/spec_checker_v2.py](skills/gaokao-spec-checker/scripts/spec_checker_v2.py)
|
|||
|
|
- 规则文档: [rules/provinces.md](rules/provinces.md)
|
|||
|
|
- 错误模式: [rules/errors/ERRORS.md](rules/errors/ERRORS.md)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**版本**: v2.0
|
|||
|
|
**最后更新**: 2026-06-11
|