面向中医药政策文本挖掘与**中医药真实世界研究(RWS)**的量化分析工具。
中医药政策从”部门专项”上升为”国家战略”这件事,可以用文本数据直接量化出来 —— 本项目做的就是这件事,并附带一套中药材真实世界研究的分析模块。
实测结果(真实政策数据)
全部数字来自对中国政府网政策文件库真实数据的一次完整采集:
| 指标 | 数值 |
|---|---|
| 收录政策文件 | 188 份 |
| 成功抽取全文 | 183 份(97.3%) |
| 全文平均长度 | 约 2,854 字(最长 15,055 字) |
| 年份跨度 | 2008 – 2026(有文件的年度共 18 个) |
| 发文机关(归一化后) | 22 个 |
年度分布 —— 可观察到的政策拐点
2008 ███ 3 2018 ████████████ 12
2009 █ 1 2019 ███████████████ 15
2010 ████ 4 2020 ████████████████ 16
2011 █ 1 2021 ██████████████████████ 22
2012 ██ 2 2022 ██████████████████████ 22
2013 █ 1 2023 ██████████████████████████ 26
2015 ███ 3 2024 █████████████████████████ 25
2016 █████ 5 2025 ██████████████████ 18
2017 ██ 2 2026 ██████████ 10
2018 年(12 份)与 2019 年(15 份)出现明显跃升,此前 2008–2017 十年间每年 仅 1–5 份。2019 年中共中央、国务院《关于促进中医药传承创新发展的意见》发布后, 年度发文量稳定在 16–26 份高位 —— 这是中医药政策从”部门专项”上升为”国家战略” 在文本层面的直接体现。
发文机关分布
| 机关 | 文件数 |
|---|---|
| 国家中医药管理局 | 59 |
| 国务院 | 36 |
| 国家卫生健康委员会 | 28 |
| 国家药品监督管理局 | 21 |
| 国家医疗保障局 | 19 |
| 其他 17 个机关 | 25 |
开发中修复的两个关键问题
1. 全部政策正文为空(严重)
首轮采集得到 168 条文档,标题、文号、机关、日期都正确,但 body_len 全为 0 ——
正文一条都没抓到。而本项目的核心价值就是政策全文检索与主题演变分析。
修复后 183/188 成功抽取全文。
剩余 5 份并非解析缺陷,而是数据源的客观限制:这些页面(主要为较早年份的
国务院文件)正文以影印图片形式发布,页面中不存在可抽取的文本层。工具明确
区分三类原因并记入 body_status:
| 状态 | 含义 |
|---|---|
image_only | 正文容器内仅含图片(扫描件),该文件本身没有可抽取文本 |
paginated | 页面分页,正文由前端脚本注入,服务端 HTML 不含正文 |
node_missing | 容器不存在,可能是页面结构变更 —— 这一类才提示解析器需修复 |
区分它们很重要:把前两类误记为”节点缺失”,会把数据源限制错误地报成代码缺陷。
2. 发文机关名称严重碎片化
同一机构有多种写法(中医药局 / 国家中医药局 / 国家中医药管理局 /
中医药管理局办公室 / 国家中医药局综合司 …),且多部门联合发文被塞进一个字段,
空格与 \u2002(EN SPACE)混用。
不处理时按机关聚合会产生 80+ 个”机关”,其中多数实为同一机构,统计结果不可用。
归一化后收敛到 22 个,同时保留 puborg_raw 原始值保证可审计。
模块
| 模块 | 内容 |
|---|---|
| 政策库 | gov.cn 采集、SQLite FTS5 trigram 全文检索(2 字词自动回退 LIKE)、机关归一化 |
| 政策变迁分析 | 年度/机关/主题分布、时间线、关键词演变、图表导出 |
| 中药 ADR 特征分析 | 性别/年龄/给药途径/品种/转归/关联性评价分布,含 χ² 检验 |
| 用药依从性 | PDC / MPR / 持续性计算 |
| 联合用药模式 | 中成药真实世界共处方模式分析 |
| DRG 成本结构 | 中医药服务在 DRG 付费下的盈亏与保本费率 |
数据边界(重要)
| 数据类型 | 来源 | 性质 |
|---|---|---|
| 中医药政策文本 | 中国政府网政策文件库 | 真实公开数据 |
| RWS 演示数据 | examples/ 下 4 个 CSV | 人工构造的合成数据,非真实患者数据 |
- 本项目不采集、不推断、不发布任何真实患者数据,运行完整演示流程 无需任何真实患者数据
examples/中所有文件头部均带合成数据声明,其中任何”结果” 不具备临床、流行病学或实证含义- 不尝试绕过任何网站的反爬虫机制。
nmpa.gov.cn、cde.org.cn、nhc.gov.cn部署了 JavaScript 反爬保护,本项目不访问这些站点 - 不提供临床建议,不作为医保结算依据,不构成法律意见
快速开始
git clone https://github.com/leerogerstheman/TCMPolicyRWS
cd TCMPolicyRWS
python tcm_rws.py crawl # 采集真实政策数据(含正文抓取)
python tcm_rws.py analyze # 政策变迁分析(出图 + 导出 + 报告)
python tcm_rws.py search 中医药 # 全文检索
python tcm_rws.py rws # RWS 分析(使用合成样例数据)
python tcm_rws.py demo # 一键跑通全流程
依赖:pandas / numpy / matplotlib / openpyxl / XlsxWriter / beautifulsoup4。
python tests/test_core.py # 42 通过,0 失败
工程细节
- 图表中文渲染:不假定字体可用,而是实际绘制测试文本并捕获 matplotlib 的 “missing from font” 警告来验证 CJK 字体渲染成功(本机命中 Microsoft YaHei); 无可用字体时降级为内置 SVG 生成,因此不会出现豆腐块
- 无硬依赖降级:matplotlib / openpyxl / bs4 缺失时分别降级到 SVG / CSV / 正则解析
- 统计严谨性:χ² 检验以卡方分布 95% 分位点校验(χ²=3.841459, df=1 → p≈0.05); 期望频数 < 5 的格子占比 > 20% 时输出显式警告
局限
- 政策语料覆盖范围:仅中国政府网政策文件库,主要收录国务院及部门层面文件; 大量中医药技术标准、地方性政策不在此范围内
- 5 份影印件文件无正文,已明确记录原因,未做 OCR
- RWS 全部使用合成数据,仅验证代码逻辑正确性,不代表任何真实临床发现
- 政策主题分类基于关键词规则,用于辅助检索,不能替代对原文的阅读