基于 Apriori 算法的中药配伍审查系统

基于 Apriori 算法的中药配伍审查系统

项目介绍

本系统是一个基于经典 Apriori 关联规则挖掘算法的中药配伍审查平台,使用真实中医药处方数据集(PTM-TKDE2018),实现药材频繁项集挖掘、关联规则生成与配伍禁忌审查。

核心功能

  • 数据导入:一键下载并导入真实 PTM 处方数据集到 SQLite(约 811 味药材、6693 条处方事务)
  • Apriori 挖掘:频繁项集与关联规则挖掘,支持度/置信度/提升度(lift)可调
  • 配伍审查:十八反/十九畏禁忌检测 + 低支持度警告 + 关联规则建议(含药名别名匹配)
  • 批量审查:支持多张处方批量审查
  • 药材共现分析:指定药材的共现频次统计
  • 数据看板:Chart.js 可视化展示高频药材与挖掘历史
  • REST API:14 个 API 端点,完整覆盖业务功能
  • 审查日志挖掘历史记录

数据来源

数据来源用途
药材与处方事务PTM-TKDE2018 herbs_contains.txt + pre_herbs.txtApriori 事务挖掘
配伍禁忌data/forbidden_canonical.json(药典十八反、十九畏整理,41 条)硬性禁忌审查
药材属性(可选)DragonTCM性味归经增强

仅供教学研究,不可替代临床审方。


目录结构

apriori-zhongyao-check/
├── app.py                  # Flask 主应用(路由定义 + 启动入口)
├── config.py               # 应用配置(阈值、数据库路径、分页等)
├── requirements.txt        # Python 依赖
├── mac_run.sh              # macOS 一键启动脚本
├── window_run.bat          # Windows 一键启动脚本
├── 项目说明.md              # 本文件
├── 挖掘手册.md              # Apriori 挖掘参数与数据集说明
│
├── core/                   # 核心算法
│   ├── __init__.py
│   ├── apriori.py          #   Apriori 频繁项集与关联规则挖掘
│   └── reviewer.py         #   配伍审查逻辑(禁忌检测 + 关联建议 + 同义词标注)
│
├── database/               # 数据库层
│   ├── __init__.py
│   ├── db.py               #   SQLite 访问层(连接管理 + 缓存 + 全部 CRUD)
│   └── importer.py         #   数据导入(PTM 文件解析 + 禁忌规则写入)
│
├── routes/                 # 路由层
│   ├── __init__.py
│   └── api.py              #   REST API 蓝图(14 个端点)
│
├── services/               # 服务层
│   ├── __init__.py
│   └── mining.py           #   Apriori 挖掘服务(参数回退 + 结果持久化)
│
├── scripts/                # 运维脚本
│   ├── download_datasets.py#   从 GitHub/HuggingFace 下载数据集
│   ├── setup_all.py        #   一键:下载 → 导入 → 挖掘
│   └── init_and_mine.py    #   初始化数据库 + 执行挖掘
│
├── data/                   # 数据目录
│   ├── forbidden_canonical.json  # 十八反/十九畏禁忌规则
│   ├── tcm.db              # SQLite 数据库(运行时生成)
│   ├── raw/                # 原始数据文件
│   │   ├── herbs_contains.txt    # PTM 药材名索引(811 行)
│   │   ├── pre_herbs.txt         # PTM 处方事务(数值索引,7189 行)
│   │   └── prescriptions.txt     # PTM 原始文本方(98334 行,未接入导入)
│   └── imported/           # 已导入数据备份目录
│
├── templates/              # Jinja2 HTML 模板(12 个页面)
│   ├── base.html           #   基础布局(导航栏 + 页脚)
│   ├── index.html          #   首页(统计概览 + 高频药材图表)
│   ├── dashboard.html      #   数据看板(挖掘历史 + 审查日志)
│   ├── check.html          #   单方配伍审查
│   ├── batch.html          #   批量配伍审查
│   ├── herbs.html          #   药材库列表
│   ├── herb_detail.html    #   药材详情 + 共现分析
│   ├── prescriptions.html  #   方剂库列表
│   ├── forbidden.html      #   十八反/十九畏规则表
│   ├── rules.html          #   Apriori 关联规则 + 频繁项集 + 重新挖掘
│   ├── dataset.html        #   数据集说明
│   └── api_docs.html       #   REST API 文档
│
├── static/
│   └── css/style.css       # 自定义样式
│
└── 运行步骤必看/
    └── window.md            # Windows 运行步骤说明

运行环境

项目要求
Python>= 3.12
操作系统macOS / Linux / Windows
数据库SQLite 3(Python 内置,无需额外安装)
网络首次运行需联网下载 PTM 数据集
依赖Flask >= 3.0、Werkzeug >= 3.0、datasets >= 2.14(可选)

端口与访问

项目
默认端口5050
环境变量覆盖PORT
访问地址http://127.0.0.1:5050
API 文档http://127.0.0.1:5050/api-docs

技术架构

浏览器 ←→ Flask (Jinja2 模板 + REST API)
              ↕
         SQLite (tcm.db)
              ↕
    Apriori 算法 + 禁忌审查引擎
              ↕
    PTM-TKDE2018 真实处方数据集

模块职责

模块文件职责
主应用app.pyFlask 应用工厂、页面路由、启动入口、自动引导挖掘
配置config.py最小支持度/置信度/提升度、数据库路径、分页大小、密钥
算法core/apriori.pyApriori 频繁项集挖掘与关联规则生成
审查core/reviewer.py禁忌规则检测、低支持度警告、关联规则建议、同义词标注
数据库database/db.py连接管理(上下文管理器)、事务缓存、全部 CRUD 操作
导入database/importer.pyPTM 文件解析、药材/处方入库、禁忌规则写入、配置持久化
APIroutes/api.pyREST API 蓝图,14 个端点,JSON 输入输出
挖掘服务services/mining.py封装 Apriori 执行、参数回退、结果持久化、缓存失效
下载scripts/download_datasets.py从 GitHub/HuggingFace 下载数据集到 data/raw/
初始化scripts/init_and_mine.py建表 → 导入 → 挖掘(三步合一)
一键部署scripts/setup_all.py下载 → 导入 → 挖掘(四步合一)

页面功能

页面路由功能
首页/统计概览(药材数/处方数/规则数)、Top 20 高频药材柱状图
配伍审查/check输入药材名 → 返回禁忌/警告/建议
批量审查/batch多处方批量审查
药材库/herbs药材列表(分页、搜索)
药材详情/herbs/<name>单味药材共现分析、关联规则
方剂库/prescriptions处方列表(分页、搜索)
禁忌规则/forbidden十八反/十九畏规则表
关联规则/rules关联规则表 + 频繁项集 + 重新挖掘(参数可调)
数据看板/dashboard挖掘历史趋势、审查日志
数据集/datasetPTM 数据集说明
API 文档/api-docsREST API 端点文档

REST API 列表

方法路径功能
GET/api/statistics系统统计(药材数/处方数/规则数等)
POST/api/review单方配伍审查 {"herbs": ["甘草","海藻"]}
POST/api/review/batch批量审查 {"prescriptions": [["甘草","海藻"],["人参","黄芪"]]}
GET/api/herbs药材列表(分页、搜索)
GET/api/herbs/<name>药材详情与共现
GET/api/prescriptions处方列表(分页、搜索)
GET/api/forbidden十八反/十九畏规则
GET/api/rules关联规则列表(分页)
GET/api/itemsets频繁项集列表(分页)
POST/api/mine重新执行 Apriori 挖掘
GET/api/config获取当前挖掘参数
GET/api/dataset-meta数据集元信息
GET/api/mining-history挖掘历史
GET/api/review-logs审查日志

算法说明

Apriori 算法

Apriori 是经典的关联规则挖掘算法,核心思想:如果一个项集是频繁的,则它的所有子集也是频繁的(Apriori 性质)。算法流程:

  1. 扫描事务数据库,统计每个单项的支持度,过滤低于 min_support 的项
  2. 逐层产生候选项集:由 k-频繁项集连接生成 (k+1)-候选项集
  3. 剪枝:移除包含非频繁 k-子集的候选项集
  4. 计数:再次扫描数据库,统计候选项集支持度
  5. 重复直到无法生成更大的频繁项集(受 max_k 限制)
  6. 生成规则:对每个频繁项集,计算所有非空子集的置信度和提升度,保留满足 min_confidencemin_lift 的规则

关键参数

参数默认值说明
min_support0.02最小支持度,项集至少在 2% 的处方中出现
min_confidence0.5最小置信度,规则 A→B 的置信度至少 50%
min_lift1.0最小提升度,大于 1 表示正相关
max_k4最大项集大小,防止组合爆炸

审查逻辑

配伍审查分三层检测:

  1. 禁忌层(硬性):十八反/十九畏,命中即标记为 forbidden
  2. 警告层(软性):药材组合的支持度低于 min_support,标记为 warning
  3. 建议层(参考):与已输入药材相关的关联规则,标记为 info;同义词对额外标注 ⚠可能是同义词/包含关系

数据流程

PTM 数据集 (GitHub/HuggingFace)
        ↓  scripts/download_datasets.py
data/raw/herbs_contains.txt + pre_herbs.txt
        ↓  database/importer.py
SQLite (tcm.db): herbs + prescriptions + forbidden_rules
        ↓  core/apriori.py + services/mining.py
SQLite: frequent_itemsets + association_rules + apriori_config
        ↓  core/reviewer.py
配伍审查结果 (forbidden / warning / info)
        ↓  routes/api.py + app.py
浏览器 (HTML / JSON)

许可证

本项目仅供学习交流使用,请勿用于商业用途。
源码地址:https://www.aiyuanma.vip/posts/apriori-zhongyao-check

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值