feat: initial commit - oncology literature search platform
CI / backend (push) Canceled after 0s
CI / frontend (push) Canceled after 0s

OncoLit: a multi-tenant oncology literature search, feed, and
collaboration platform. Built with FastAPI + Vue 3 + PostgreSQL.
Includes PubMed pipeline, drug approvals, AI summaries, and
systematic review tools.
This commit is contained in:
34047007@qq.com
2026-07-27 07:59:18 +08:00
commit a6cd99a4ca
473 changed files with 151472 additions and 0 deletions
+203
View File
@@ -0,0 +1,203 @@
# 文献数据质量报告
> 报告日期:2026-07-24
> 数据来源:本地 PostgreSQL 数据库(scilit_dev
> 总文献数:1,662 篇
> 数据来源分布:seed_data = 110, pubmed_api = 1,552
---
## 1. 字段覆盖率总览
### 基础字段
| 字段 | 覆盖数 | 覆盖率 | 数据类型 | 状态 |
|------|--------|--------|---------|------|
| `pmid` | 1,662 | **100.0%** | INTEGER | ✅ 完整 |
| `title` | 1,652 | **99.4%** | TEXT | ✅ 完整 |
| `abstract` | 1,550 | **93.3%** | TEXT | ✅ 充分 |
| `doi` | 1,548 | **93.1%** | VARCHAR(255) | ✅ 充分 |
| `journal` | 1,662 | **100.0%** | VARCHAR(255) | ✅ 完整 |
| `journal_issn` | 1,662 | **100.0%** | VARCHAR(20) | ✅ 完整 |
| `journal_iso` | **0** | **0%** | VARCHAR(100) | ❌ **缺失** |
| `pub_year` | 1,662 | **100.0%** | INTEGER | ✅ 完整 |
| `pub_date` | 1,148 | **69.1%** | DATE | ⚠️ 部分 |
| `volume` | 1,292 | 77.7% | VARCHAR(20) | ️ |
| `issue` | 1,247 | 75.0% | VARCHAR(20) | ️ |
| `pages` | 1,117 | 67.2% | VARCHAR(50) | ️ |
| `language` | 1,644 | **98.9%** | VARCHAR(10) | ✅ 充分 |
| `pmc_id` | **9** | **0.5%** | VARCHAR(20) | ❌ Bug |
| `is_oa` | 9 | 0.5% | BOOLEAN | ❌ Bug |
| `retracted` | 0 | 0% | BOOLEAN | ✅(全库无撤稿) |
### JSON 字段
| 字段 | 非空计数 | 覆盖率 | 数据类型 | 状态 |
|------|---------|--------|---------|------|
| `authors` | 1,659 | **99.8%** | json | ✅ 完整 |
| `pub_types` | 1,557 | **93.7%** | json | ✅ 充分 |
| `mesh_headings` | 845 | **50.8%** | json | ⚠️ 部分 |
| `study_design` | 1,552 | **93.4%** | json | ✅ 充分 |
| `chemical_list` | 508 | **30.6%** | json | ⚠️ 部分 |
| `grants` | 323 | **19.4%** | json | ⚠️ 部分 |
| `databank_list` | 29 | **1.7%** | json | ❌ 缺失 |
| `suppl_mesh_list` | 19 | **1.1%** | json | ❌ 缺失 |
| `keywords` | **0** | **0%** | json | ❌ **缺失** |
| `gene_symbols` | **0** | **0%** | json | ❌ **缺失** |
| `retraction_details` | 0 | 0% | json | ✅(全库无撤稿) |
| `full_text_sections` | 7 | **0.4%** | json | ❌ 仅 PMC OA 实验 |
### TSVECTOR 字段
| 字段 | 覆盖数 | 覆盖率 | 状态 |
|------|--------|--------|------|
| `search_tsv` | 1,662 | **100.0%** | ✅ 完整(但无 setweight |
### 日期间相关字段
| 字段 | 覆盖数 | 覆盖率 | 状态 |
|------|--------|--------|------|
| `pub_date` | 1,148 | 69.1% | ⚠️ 部分 |
| `article_date` | 1,148 | 69.1% | ⚠️ 部分 |
| `pubmed_revised` | 1,552 | 93.4% | ✅ 充分 |
| `date_completed` | 558 | 33.6% | ⚠️ 部分 |
| `publication_status` | 1,552 | 93.4% | ✅ 充分 |
| `citation_status` | 879 | 52.9% | ⚠️ 部分 |
---
## 2. 坏数据诊断
### 2.1 关键 Bug
| # | 问题 | 影响 | 根因 |
|---|------|------|------|
| 1 | `journal_iso` 0% | [TA] 缩写期刊搜索不可用 | XML 解析器已解析但 Europe PMC 路径未解析?实际检查代码第 533 行已解析,但 seed_data 无此字段 |
| 2 | `keywords` 0% | [OT] 关键词搜索不可用 | XML 解析器第 500-503 行已解析,需检查 seed_data 和 Europe PMC 路径 |
| 3 | `pmc_id` 仅 9 篇 | [PMC] 搜索不可用,PMC OA 全文抓取不可用 | XPath 上下文 Bug`article.findall` → 应改为 `article_elem.findall` |
| 4 | `tree_numbers` 0 行 | 所有 [MH]/[MAJR] 查询 0 结果 | NLM mtrees.bin 未导入,`import_mesh_tags.py` 未执行 |
| 5 | `suppl_mesh_list` 仅 1.1% | 补充 MeSH 搜索不可用 | 解析器已实现但 NLM 数据量小 |
### 2.2 数据异常
| 问题 | 详情 |
|------|------|
| 年份集中 | 1,604/1,662 (96.5%) ∈ 2026,早期文献极少(仅有 58 篇 2025 年) |
| 被引为 0 | 中位被引次数为 0,平均值 0.6 |
| 标签稀疏 | 每篇文献中位仅 1 个标签(P99=6),28/99 标签关联 0 篇文献 |
| 标签来源单一 | 99 个标签全部 `source=manual`,无 `mesh``auto` 来源标签 |
| 中文极少 | 35/1,662 (2.1%) 中文文献 |
---
## 3. 标签统计
### 标签来源分布
| 来源 | 数量 | Active |
|------|------|--------|
| manual | 99 | True |
`global_tag_tree_numbers`**0 行**(空表)
### 文献-标签关系
| 指标 | 值 |
|------|----|
| 总关联数 | 997 |
| is_major=True | 946 (94.9%) |
| is_major=False | 51 (5.1%) |
| 每篇标签 P50 | 1 |
| 每篇标签 P75 | 2 |
| 每篇标签 P90 | 5 |
| 每篇标签 P99 | 6 |
| 未使用标签 | 28 个(0 篇文献关联) |
### Top 10 标签覆盖率
| 标签 | 关联文献数 |
|------|-----------|
| 标签 #1 | 66 |
| 标签 #2 | 62 |
| 标签 #3 | 55 |
| 标签 #4 | 51 |
| 标签 #5 | 50 |
| 标签 #6 | 50 |
| 标签 #7 | 48 |
| 标签 #8 | 47 |
| 标签 #9 | 44 |
| 标签 #10 | 41 |
---
## 4. pubmed_api 来源字段质量
1,552 篇 `source=pubmed_api` 的字段覆盖:
| 字段 | coverage | 说明 |
|------|----------|------|
| publication_status | 1,552 (100%) | ppublish=544, epublish=530, aheadofprint=478 |
| citation_status | 879 (56.6%) | MEDLINE=502, Publisher=254, In-Process=64, PubMed-not-MEDLINE=59 |
| language | 1,534 (98.8%) | eng=1,496, en… 等 |
| study_design | 1,552 (100%) | 自动分类结果 |
| trial_reg | ~93% | 大部分有(即使空对象) |
| chemical_list | ~31% | 部分文献有化学列表 |
| grants | ~21% | 部分文献有基金信息 |
| databank_list | ~2% | 极少 |
| suppl_mesh_list | ~1% | 极少 |
| full_text_sections | 7 | 仅实验性抓取 |
---
## 5. 优先改进项
### P0(影响搜索基础功能)
| 改进项 | 当前 | 目标 | 方法 |
|--------|------|------|------|
| `journal_iso` 覆盖率 | 0% → **100%** | 修复 seed_data 和 Europe PMC 路径的 journal_iso 解析 |
| `tree_numbers` | 0 行 → **全量** | 运行 `import_mesh_tags.py` 导入 NLM mtrees2025.bin |
| `is_negative_result` | 仅 pubmed_api 有 → **所有** | 构造函数补全 + seed_data 回填 |
| 构造函数 5 字段 | 部分缺失 → **全部** | 代码修复 |
### P1(影响搜索能力)
| 改进项 | 说明 |
|--------|------|
| `keywords` 覆盖率 0% → 有数据 | 修复 keyword 解析器路径 |
| `pmc_id` 覆盖率提升 | XPath Bug 修复后运行 pipeline 回填 |
| `entrez_date` 新字段 | PubmedData/History 解析 |
| `grants` Europe PMC 路径补全 | grants 从 Europe PMC JSON 解析 |
### P2(影响搜索体验)
| 改进项 | 说明 |
|------|--------|
| 缺失索引(6 个) | B-tree + GIN + trigram |
| JSON 列 json → jsonb | 启用 `@>` 等运算符 |
| `GlobalTagTreeNumber` 导出 | 模型导出修复 |
---
## 6. 数据库索引现状
### 当前索引
```
ix_global_literature_pub_date B-tree (pub_date)
ix_global_literature_search_tsv GIN (search_tsv)
ix_global_literature_pmid UNIQUE B-tree (pmid)
ix_global_literature_doi UNIQUE B-tree (doi)
```
### 缺失索引
| 索引 | 类型 | 用途 |
|------|------|------|
| `ix_global_literature_journal_iso` | B-tree | `[TA]` 期刊缩写搜索 |
| `ix_global_literature_pub_types` | GIN jsonb_path_ops | 文献类型筛选 |
| `ix_global_literature_study_design` | GIN jsonb_path_ops | 研究设计筛选 |
| `ix_global_literature_retracted` | B-tree | 撤稿过滤 |
| `ix_global_literature_language` | B-tree | `[LA]` 搜索 |
| `ix_global_literature_grants` | GIN | `[GR]` JSONB 搜索 |
| `ix_global_literature_chemical_list` | GIN | `[NM]` JSONB 搜索 |