Files
backend/docs/11-数据质量报告.md
T

214 lines
8.6 KiB
Markdown
Raw Normal View History

# 文献数据质量报告
> 最后更新:2026-07-23 · 来源:`global_literature` 表统计 · 基线导入后
## 数据总览
| 维度 | 数值 | 覆盖率 | 状态 |
|------|------|--------|------|
| 总文献 | 1,222,688 | 100% | — |
| 有摘要 | 1,110,080 | 90.8% | ✅ |
| 有 DOI | 1,171,276 | 95.8% | ✅ |
| 有研究设计 | 436,748 | 35.7% | 🟡 见下方说明 |
| 有引用次数 (>0) | 1,744 | 0.1% | 🟡 见下方说明 |
| 已打标(GlobalTag | 928,830+ | 76.0% | ✅ |
| 有 MeSH 头 | 899,275+ | 73.6% | ✅ |
| 无 MeSH(文本过滤入库) | 323,094+ | 26.4% | ✅ |
| 有 PICO | 0 | 0% | 🔴 待处理 |
| 有 OA 全文 | 490 | 0.04% | ✅(PMC 平台覆盖率预期值) |
| 有 AI 摘要 | 1 | ~0% | 🔴 待处理 |
| 有格兰特信息 | 252,476 | 20.7% | 🟡 |
## 数据来源分布
| 来源 | 文献数 | 占比 |
|------|--------|------|
| pubmed_ftp(基线导入) | 1,219,536 | 99.7% |
| pubmed_api(日常精搜) | 2,668 | 0.2% |
| europe_pmc | 484 | <0.1% |
**99.7% 来自基线导入**,日常 API 管道目前在补充最新文献。
### 基线导入状态
PubMed 2026 基线共 1,334 个文件(n0001n1334)。其中:
| 文件 | 状态 | 处理结果 |
|------|------|----------|
| n0001pubmed26n0001.xml.gz | ❌ gzip 损坏(`invalid compressed data` | ✅ 已用 recover=True 修复,导入 195 篇肿瘤文献 |
| n0002pubmed26n0002.xml.gz | ❌ gzip 截断(`unexpected end of file` | ✅ 已用 recover=True 修复,导入 124 篇肿瘤文献 |
| n0003n1334 | ✅ 正常 | 原始导入已覆盖,跳过 |
**技术修复**`import_xml_file()``for _event, elem in context:` 外层加了 try/except,确保 iterparse 因 XML 损坏抛出异常时,已解析的文章仍被 flush+commit,不会回滚。
**已处理文件**n0001+n0002(共 +319 篇),其余文件的肿瘤文献已在原始基线导入中正确入库,无需重跑。
## 各维度详解
### 1. 有摘要(✅ 90.8%
1,110,080/1,222,688 篇文献有英文摘要。112,289 篇无摘要主要是 PubMed 基线中的会议摘要、信件、评论等短类型文献,在过滤规则下会因标题命中关键词而被收录。
### 2. 研究设计分类(🟡 35.7% → 目标 70%+
436,748 篇已通过 `classify_study_design()` 自动分类(基于 PubMed `PublicationType`)。Python 侧的 `classify_study_design` 对部分文献未返回结果,剩余文献的 `study_design` 为空。
**提升途径**:运行 `POST /admin/pipeline/backfill-study-designs` 回填。
### 3. MeSH 标签覆盖(✅ 76.0% 已打标)
**关键指标**
| 指标 | 数值 |
|------|------|
| 有 MeSH 头 | 899,275+ (73.6%) |
| 有 MeSH 且已打标 | 899,275+ (100%) |
| 无 MeSH(文本过滤) | 323,094+ (26.4%) |
| 已打标总结 | 928,830+ (76.0%) |
**打标完整性 100%**:所有有 MeSH Headings 的文献都已关联 `global_literature_tags`。这是因为 `tag_service.py` 的**懒创建机制**在打标时自动补建不存在的标签。
**打标流程**(自 2026-07-23 修复后):
1.`mesh_ui` 精确匹配 → 命中存量标签(auto/manual/mesh
2. **同时按 `name_en` 匹配 C04 导入标签**2026-07-23 新增,确保无 mesh_ui 的 C04 标签也被关联)
3. 仍未匹配 → 自动懒创建标签(`source=auto, is_active=false`
**标签活跃度分布**
| 来源 | 活跃 | 数量 | 说明 |
|------|------|------|------|
| `manual` | ✅ 活跃 | 99 | 手工维护的 116 个种子标签 |
| `mesh` | ✅ 活跃 | 505 | C04 导入标签(level ≤ 3is_selectable |
| `mesh` | ❌ 未激活 | 165 | C04 导入标签(深层,仅用于搜索展开) |
| `auto` | ❌ 未激活 | 20,150 | 懒创建标签,待人工审核 |
**20,150 个懒创建标签**来自打标时发现的不在 `global_tags` 中的 MeSH Descriptor。这些标签已标记 `is_active=false`,用户端不可见,但搜索时 `[MH]` 树号展开仍能匹配。
### 4. C04 肿瘤分类覆盖
| 指标 | 数值 |
|------|------|
| 已导入 C04 Descriptor | 701 个 |
| 已注册 C04 树号 | 1,070 + 985(回填)条 |
| C04 树号确认的文献 | **375,072 篇** |
| 按 tag_category=cancer 分类 | 573,751 篇 |
| C04 占 cancer 类 | 65.3% |
**2026-07-23 修正**:此前报告的 161,636 篇是**仅通过 C04 导入标签(有 tree_number)确认**的文献。实际 C04 覆盖为 **375,072 篇**,差距是**时序问题**导致的:
- 基线导入先执行 → `tag_service.py` 懒创建了 auto 标签(有 mesh_ui,无 tree_number
- `import_mesh_tags.py` 后执行 → C04 导入标签(有 tree_number,无 mesh_ui)成为孤儿
- 两个修复已部署:
1. `tag_service.py` 增加 `name_en` 并行匹配(不做 mesh_ui 独占)
2. 给已在库的 auto 标签回填 tree_number985 条记录)
### 5. 引用次数(🟡 0.1% >0,待刷新)
1,744 篇文献有引用次数。当前引用数分布呈两极(仅 0 和 1001+),说明引用数据尚未经过全量刷新:
- 基线导入时 `cited_by_count=0`(新文献)
- `cited_by_count > 1000` 可能是 elink API 返回格式异常导致(参见第 6 节)
**下一步**:运行 `POST /admin/pipeline/refresh-citations` 全量刷新。每日定时任务 `daily_citation_update` 05:13 UTC 自动刷新。
### 6. 文本覆盖率
| 字段 | 覆盖率 | 数值 |
|------|--------|------|
| 有摘要 | 90.8% | 1,110,080 |
| 有 DOI | 95.8% | 1,171,276 |
| 有关键词 | <0.1% | 334 |
| 有基金信息 | 20.7% | 252,476 |
| 有化学物质 | <0.1% | 885 |
| 有基因符号 | 0% | 0 |
### 7. 年度分布
文献时间跨度合理:
| 年份范围 | 文献数 |
|----------|--------|
| 2026-2027 | 32,214 |
| 2024-2025 | 133,935 |
| 2022-2023 | 346,237 |
| 2020-2021 | 330,259 |
| 2016-2019 | 374,240 |
### 8. 语种分布
| 语种 | 文献数 | 占比 |
|------|--------|------|
| 英语 | 1,187,243 | 97.1% |
| 中文 | 13,118 | 1.1% |
| 其他 | 22,008 | 1.8% |
### 9. 标签分类覆盖
`global_tags.tag_category` 分类的文献覆盖:
| 分类 | 覆盖文献数 | 标签种类 |
|------|-----------|---------|
| cancer(癌种) | 573,751 | 533 |
| mesh_other(其他 MeSH | 222,895 | 1,207 |
| gene(基因/靶点) | 204,264 | 18,956 |
| treatment(治疗) | 144,920 | 9 |
| endpoint(终点) | 144,409 | 9 |
| scenario(场景) | 117,041 | 10 |
| study_type(研究类型) | 56,127 | 7 |
注:gene 标签种类多(18,956)因 MeSH Chemical/Drug 条目被自动分类为 gene 类。
### 10. 期刊 Tier 分布
| Tier | 文献数 | 占比 |
|------|--------|------|
| 4(默认,未匹配) | 1,154,516 | 94.4% |
| 3 | 597 | <0.1% |
| 2 | 5,955 | 0.5% |
| 1 | 36 | <0.1% |
| unknown(无 ISSN 记录) | 61,265 | 5.0% |
**期刊 Tier 映射覆盖率极低**`global_journals` 表只有 17 个预定义期刊。94.4% 的文献落入 tier 4 默认值。如需基于期刊质量的排序或过滤,需要扩充期刊索引。
## 已知问题
### 🟡 引用次数刷新滞后
基线导入后引用次数尚未全量刷新。可通过 `daily_citation_update` 定时任务逐步补全。
### 🟡 研究设计分类仅 35.7%
`classify_study_design()` 对基线导入的 XML 解析覆盖率不够。运行 `backfill-study-designs` 接口可提升。
### 🟡 PICO 要素未提取
0 篇文献有 PICO 数据。需执行 `POST /admin/pipeline/extract-pico`
### 🟡 AI 摘要仅 1 篇
尚未批量运行 AI 摘要生成。需执行 `POST /admin/ai/summarize`
### 🟡 懒创建标签待审核
20,150 个 `source=auto, is_active=false` 的标签需要人工审核是否归属到正确分类、补充中文名。
### 🟡 期刊 Tier 映射几乎为空
`global_journals` 需要从外部源(如 SCImago Journal Rank)批量导入期刊 Tier 数据。
### 🟡 两个基线文件 gzip 损坏
`pubmed26n0001.xml.gz``pubmed26n0002.xml.gz` 在下载或解压过程中发生损坏。已通过 `etree.XMLParser(recover=True)` 在修复后的 `import_xml_file()` 中正确导入,共恢复 319 篇肿瘤文献。
## 生产环境监控
### Dashboard 数据质量面板
管理后台 → 首页 Dashboard 已有数据质量卡片,展示 7 个进度条:
- 有摘要 / 已打标 / 有引用次数 / 有研究设计 / 有DOI / 有OA全文 / 有PICO
### 建议的监控频率
| 指标 | 检查频率 | 预警阈值 |
|------|----------|----------|
| 总文献数 | 每日 | 连续 3 天增长 < 50 篇 |
| 已打标率 | 每周 | < 70% |
| C04 树号覆盖率 | 每周 | < 60% of tag_category=cancer |
| 应用覆盖率 | 每月 | < 85% |
| 引用刷新成功率 | 每日 | 连续 3 天 error > 0 |
| 管道运行成功率 | 每日 | 任何失败 |
| 懒创建标签积压 | 每周 | > 25,000 |