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>
5.2 KiB
5.2 KiB
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 | 期刊配置界面 |
💡 技术要点
负号归一化的重要性
# 未清洗时 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 测试完成后