# 文献数据质量报告

> 最后更新：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 个文件（n0001–n1334）。其中：

| 文件 | 状态 | 处理结果 |
|------|------|----------|
| n0001（pubmed26n0001.xml.gz） | ❌ gzip 损坏（`invalid compressed data`） | ✅ 已用 recover=True 修复，导入 195 篇肿瘤文献 |
| n0002（pubmed26n0002.xml.gz） | ❌ gzip 截断（`unexpected end of file`） | ✅ 已用 recover=True 修复，导入 124 篇肿瘤文献 |
| n0003–n1334 | ✅ 正常 | 原始导入已覆盖，跳过 |

**技术修复**：`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 ≤ 3，is_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_number（985 条记录）

### 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 |
