feat(rvw): Complete V2.0 Week 3 - Statistical validation extension and UX improvements

Week 3 Development Summary:

- Implement negative sign normalization (6 Unicode variants)

- Enhance T-test validation with smart sample size extraction

- Enhance SE triangle and CI-P consistency validation with subrow support

- Add precise sub-cell highlighting for P-values in multi-line cells

- Add frontend issue type Chinese translations (6 new types)

- Add file format tips for PDF/DOC uploads

Technical improvements:

- Add _clean_statistical_text() in extractor.py

- Add _safe_float() wrapper in validator.py

- Add ForensicsReport.tsx component

- Update ISSUE_TYPE_LABELS translations

Documentation:

- Add 2026-02-18 development record

- Update RVW module status (v5.1)

- Update system status (v5.2)

Status: Week 3 complete, ready for Week 4 testing
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-02-18 18:26:16 +08:00
parent 9f256c4a02
commit f9ed0c2528
36 changed files with 2790 additions and 501 deletions

View File

@@ -0,0 +1,184 @@
# 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 测试完成后