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>
185 lines
5.2 KiB
Markdown
185 lines
5.2 KiB
Markdown
# 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 测试完成后
|