njucm njucm.org
← Projects

中医药政策与真实世界研究工具 · TCMPolicyRWS

仓库:leerogerstheman/TCMPolicyRWS

面向中医药政策文本挖掘与**中医药真实世界研究(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 全部使用合成数据,仅验证代码逻辑正确性,不代表任何真实临床发现
  • 政策主题分类基于关键词规则,用于辅助检索,不能替代对原文的阅读

资源