Files
AIclinicalresearch/docs/03-业务模块/RVW-稿件审查系统/06-开发记录/2026-02-18 统计验证扩展与用户体验优化.md
HaHafeng f9ed0c2528 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>
2026-02-18 18:26:16 +08:00

185 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 测试完成后