# RVW V2.0 开发记录 - 2026-02-18 > **日期:** 2026-02-18 > **阶段:** Week 3 - 统计验证扩展与用户体验优化 > **开发者:** AI Assistant > **状态:** ✅ 完成 --- ## 📋 今日完成内容 ### 1. 负号归一化功能 ✅ **问题背景:** - Word 文档中的负号可能是多种 Unicode 字符(数学减号 `\u2212`、En Dash `\u2013`、Em Dash `\u2014` 等) - Python 的 `float()` 无法解析这些特殊字符,导致验证失败 **实现内容:** | 文件 | 修改 | |------|------| | `extraction_service/forensics/extractor.py` | 新增 `_clean_statistical_text()` 方法,在提取单元格时自动清洗 | | `extraction_service/forensics/validator.py` | 新增 `_clean_number_string()` 和 `_safe_float()` 辅助函数 | **覆盖的特殊字符:** | Unicode | 字符 | 名称 | 清洗为 | |---------|------|------|--------| | `\u2212` | − | 数学减号 | `-` | | `\u2013` | – | En Dash | `-` | | `\u2014` | — | Em Dash | `-` | | `\u2264` | ≤ | 小于等于 | `<=` | | `\u2265` | ≥ | 大于等于 | `>=` | | `\u00d7` | × | 乘号 | `x` | | `\u200b` | | Zero-Width Space | (删除) | --- ### 2. 统计验证方法扩展 ✅ #### 2.1 T 检验验证增强 **改进点:** - 智能样本量提取:支持 `(n=50)`、`n=50`、`(50例)` 等多种格式 - 新增 `_extract_sample_sizes_from_header()` 和 `_extract_sample_sizes_from_row()` 方法 - 支持括号格式的 SD:`45.2 (12.3)` - 支持多行单元格 subrow 精确高亮 #### 2.2 SE 三角验证增强 **改进点:** - 支持多行单元格的 subrow 精确定位 - 遍历 P 值列每一行,分别验证 - 显示友好的行描述(如变量名) #### 2.3 CI vs P 值一致性验证增强 **改进点:** - 支持多行单元格 subrow 精确定位 - 支持多个 CI/P 值对的验证 - 使用 `_parse_pvalue_flexible` 灵活解析 --- ### 3. 前端翻译映射更新 ✅ **文件:** `frontend-v2/src/modules/rvw/components/ForensicsReport.tsx` 新增/完善的问题类型中文翻译: | 代码 | 中文描述 | |------|----------| | `ARITHMETIC_TOTAL` | 总计行错误 | | `STAT_CI_PVALUE_CONFLICT` | CI 与 P 值矛盾 | | `STAT_SD_GREATER_MEAN` | SD 大于均值 | | `STAT_REGRESSION_CI_P` | 回归 CI-P 不一致 | | `EXTRACTION_WARNING` | 提取警告 | | `TABLE_SKIPPED` | 表格跳过 | --- ### 4. 文件格式提示功能 ✅ **用户反馈:** 上传 PDF 文件后没有数据验证 Tab,需要提示用户 **实现内容:** | 文件 | 修改 | |------|------| | `Header.tsx` | 上传按钮下方添加蓝色提示框,推荐 .docx 格式 | | `ReportDetail.tsx` | 非 docx 文件时显示黄色警告,解释为什么没有数据验证 | | `TaskDetail.tsx` | 同上 | **提示内容:** - **上传时:** "推荐上传 .docx 格式文件,可获得完整的数据验证功能。PDF 和 .doc 格式仅支持稿约和方法学评审。" - **查看报告时:** "当前文件为 PDF/.doc 格式,无法进行数据验证。如需数据验证功能,请上传 .docx 格式文件。" --- ## 📊 当前统计验证能力总览 | 验证类型 | 方法 | 状态 | |----------|------|------| | **L1 算术** | 百分比 n(%) | ✅ | | **L1 算术** | Sum/Total 校验 | ✅ | | **L2 统计** | 卡方检验 P 值逆向验证 | ✅ + subrow | | **L2 统计** | T 检验 P 值逆向验证 | ✅ + subrow | | **L2 统计** | CI vs P 值逻辑一致性 | ✅ + subrow | | **L2.5 取证** | SE 三角验证 | ✅ + subrow | | **L2.5 取证** | SD > Mean 检查 | ✅ | --- ## 📁 修改的文件清单 ### Python 后端 - `extraction_service/forensics/extractor.py` - 负号归一化 - `extraction_service/forensics/validator.py` - 统计验证扩展 ### Node.js 后端 - (无修改) ### 前端 - `frontend-v2/src/modules/rvw/components/ForensicsReport.tsx` - 翻译映射 - `frontend-v2/src/modules/rvw/components/Header.tsx` - 上传提示 - `frontend-v2/src/modules/rvw/components/ReportDetail.tsx` - 格式提示 - `frontend-v2/src/modules/rvw/components/TaskDetail.tsx` - 格式提示 --- ## 📋 待完成工作 ### V2.0 MVP 剩余任务 | 任务 | 优先级 | 状态 | |------|--------|------| | Week 4 功能测试 | P0 | 📋 待开始 | | Week 4 性能测试 | P1 | 📋 待开始 | | Week 4 Bug 修复 | P0 | 📋 待开始 | | Week 4 文档更新 | P1 | 📋 待开始 | ### V2.1 待开发功能 | 功能 | 说明 | |------|------| | ANOVA 验证 | 多组比较 P 值验证 | | 配对 T 检验 | 配对样本验证 | | 非参数检验 | Mann-Whitney, Wilcoxon | | .doc 格式支持 | 评估 Pandoc 替代方案 | | Profile 管理 UI | 期刊配置界面 | --- ## 💡 技术要点 ### 负号归一化的重要性 ```python # 未清洗时 float() 会崩溃 float('−1.5') # ValueError: could not convert string to float # 清洗后正常工作 float('-1.5') # -1.5 ``` ### Subrow 高亮原理 Word 表格中一个单元格可能包含多行数据(用换行符分隔),例如: ``` | 变量 | P值 | |------|-----| | 年龄 | 0.82 性别 0.01 <- 问题在这里 BMI 0.95 | ``` 通过 `data-subcoord="R2C2S2"` 属性可以精确定位到第 2 行第 2 列的第 2 个子行。 --- **文档版本:** v1.0 **创建日期:** 2026-02-18 **下次更新:** Week 4 测试完成后