完整性审查准确性验证测试
测试目的
验证完整性审查模块(completeness_reviewer.py)是否正确统计分类结果,
确保不会出现"分类结果中存在,但被误报为缺失"的情况。
测试数据
- 来源文件:
temp/construction_review/final_result/67d45692fb97aeef8f896e78475ce539-1773153034.json
- 数据内容: 包含65个已分类的文档块(chunks)
- 分类维度: 一级分类(chapter_classification)、二级分类(secondary_category_code)、三级分类(tertiary_category_code)
测试用例列表
| 测试用例 |
说明 |
关键验证点 |
test_data_file_exists |
测试数据文件存在性检查 |
数据文件可访问 |
test_standard_csv_exists |
标准CSV文件存在性检查 |
标准分类表可访问 |
test_extract_actual_categories |
测试分类提取功能 |
正确提取实际存在的分类 |
test_no_false_positives_for_existing_categories |
关键测试:确保存在的分类不会被误报为缺失 |
无分类误报 |
test_check_result_structure |
测试结果结构正确性 |
返回结果符合预期结构 |
test_secondary_stats_accuracy |
测试二级分类统计准确性 |
统计数据一致 |
test_category_code_consistency |
测试分类代码一致性 |
检查大小写问题 |
test_chunks_with_invalid_categories |
测试无效分类的处理 |
正确处理无效分类 |
test_completeness_accuracy_report |
完整性审查准确性测试报告 |
输出详细统计信息 |
运行测试
运行所有测试
python -m pytest utils_test/Completeness_Test/test_completeness_accuracy.py -v
运行关键测试(误报检测)
python -m pytest utils_test/Completeness_Test/test_completeness_accuracy.py::TestCompletenessAccuracy::test_no_false_positives_for_existing_categories -v -s
查看详细报告
python -m pytest utils_test/Completeness_Test/test_completeness_accuracy.py::TestCompletenessAccuracy::test_completeness_accuracy_report -v -s
测试统计概览
基于测试数据,各章节的完整性统计如下:
| 章节 |
块数 |
存在分类 |
标准分类 |
缺失 |
完整率 |
| basis |
5 |
5 |
16 |
11 |
31.2% |
| overview |
7 |
6 |
16 |
10 |
37.5% |
| plan |
5 |
5 |
11 |
6 |
45.5% |
| technology |
16 |
7 |
28 |
21 |
25.0% |
| safety |
12 |
4 |
20 |
16 |
20.0% |
| quality |
4 |
3 |
15 |
12 |
20.0% |
| environment |
3 |
3 |
10 |
7 |
30.0% |
| management |
4 |
0 |
0 |
0 |
0.0% |
| acceptance |
5 |
5 |
24 |
19 |
20.8% |
| other |
4 |
2 |
21 |
19 |
9.5% |
关键验证逻辑
1. 误报检测逻辑
# 获取实际存在的分类
actual_tertiary = {...}
# 获取检查器报告的缺失项
reported_missing = {...}
# 计算交集(误报)
false_positives = reported_missing & actual_tertiary
# 验证无交集
assert len(false_positives) == 0, f"存在 {len(false_positives)} 个误报"
2. 分类提取逻辑
# 从 chunks 中提取三级分类
cat1 = chunk.get("chapter_classification")
cat2 = chunk.get("secondary_category_code")
cat3 = chunk.get("tertiary_category_code")
# 排除无效值
if cat3 and cat3 not in ["", "none", "non_standard"]:
actual.add((cat1, cat2, cat3))
测试结果
- 测试状态: 全部通过
- 误报情况: 0个
- 结论: 完整性审查模块工作正常,没有出现"分类结果中存在但被误报为缺失"的情况
注意事项
- 测试数据依赖: 测试依赖于
temp/construction_review/final_result/ 目录下的JSON文件
- 标准CSV依赖: 测试依赖于
core/construction_review/component/doc_worker/config/StandardCategoryTable.csv
- 分类代码匹配: 确保 chunk 中的分类代码与标准CSV中的代码大小写一致