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

项目说明
基于 Apriori 算法的中药配伍审查系统
项目介绍
本系统是一个基于经典 Apriori 关联规则挖掘算法的中药配伍审查平台,使用真实中医药处方数据集(PTM-TKDE2018),实现药材频繁项集挖掘、关联规则生成与配伍禁忌审查。
核心功能
- 数据导入:一键下载并导入真实 PTM 处方数据集到 SQLite(约 811 味药材、6693 条处方事务)
- Apriori 挖掘:频繁项集与关联规则挖掘,支持度/置信度/提升度(lift)可调
- 配伍审查:十八反/十九畏禁忌检测 + 低支持度警告 + 关联规则建议(含药名别名匹配)
- 批量审查:支持多张处方批量审查
- 药材共现分析:指定药材的共现频次统计
- 数据看板:Chart.js 可视化展示高频药材与挖掘历史
- REST API:14 个 API 端点,完整覆盖业务功能
- 审查日志与挖掘历史记录
数据来源
| 数据 | 来源 | 用途 |
|---|---|---|
| 药材与处方事务 | PTM-TKDE2018 herbs_contains.txt + pre_herbs.txt | Apriori 事务挖掘 |
| 配伍禁忌 | 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.py | Flask 应用工厂、页面路由、启动入口、自动引导挖掘 |
| 配置 | config.py | 最小支持度/置信度/提升度、数据库路径、分页大小、密钥 |
| 算法 | core/apriori.py | Apriori 频繁项集挖掘与关联规则生成 |
| 审查 | core/reviewer.py | 禁忌规则检测、低支持度警告、关联规则建议、同义词标注 |
| 数据库 | database/db.py | 连接管理(上下文管理器)、事务缓存、全部 CRUD 操作 |
| 导入 | database/importer.py | PTM 文件解析、药材/处方入库、禁忌规则写入、配置持久化 |
| API | routes/api.py | REST 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 | 挖掘历史趋势、审查日志 |
| 数据集 | /dataset | PTM 数据集说明 |
| API 文档 | /api-docs | REST 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 性质)。算法流程:
- 扫描事务数据库,统计每个单项的支持度,过滤低于
min_support的项 - 逐层产生候选项集:由 k-频繁项集连接生成 (k+1)-候选项集
- 剪枝:移除包含非频繁 k-子集的候选项集
- 计数:再次扫描数据库,统计候选项集支持度
- 重复直到无法生成更大的频繁项集(受
max_k限制) - 生成规则:对每个频繁项集,计算所有非空子集的置信度和提升度,保留满足
min_confidence和min_lift的规则
关键参数
| 参数 | 默认值 | 说明 |
|---|---|---|
min_support | 0.02 | 最小支持度,项集至少在 2% 的处方中出现 |
min_confidence | 0.5 | 最小置信度,规则 A→B 的置信度至少 50% |
min_lift | 1.0 | 最小提升度,大于 1 表示正相关 |
max_k | 4 | 最大项集大小,防止组合爆炸 |
审查逻辑
配伍审查分三层检测:
- 禁忌层(硬性):十八反/十九畏,命中即标记为
forbidden - 警告层(软性):药材组合的支持度低于
min_support,标记为warning - 建议层(参考):与已输入药材相关的关联规则,标记为
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)
技术分类
包含内容
适用人群
学习参考与二次开发
关于 AI源码
AI源码 专注优质项目源码分享,提供完整源码、详细文档与技术支持,助力源码设计与课程作业。
相关推荐
查看全部 →
城市交通流量预测与拥堵成因分析系统
是一个面向城市交通拥堵分析的 monorepo,覆盖计算机设计课题中的主要能力链路:

电商用户行为漏斗与CRO转化率优化分析
电商用户行为漏斗与CRO转化率优化分析(E-Commerce Funnel CRO)是一套面向电商运营的数据分析平台,覆盖从用户访问到最终购买的完整漏斗链路,提供多维诊断、统计检验、PIE 优先级矩阵与 XGBoost 购买预测等能力,帮助运营团队精准定位转化瓶颈并制定优化策略。

多组学癌症预后预测分析系统
基于 Flask 的 Web 应用,用于上传 TCGA 风格合并表、做特征与标签概览、Cox 预后风险评分与生存相关可视化。模型在本地训练后以 形式加载,不提供旧版演示数据或假模型兜底。

基于 Python 的城市共享单车骑行需求时空分析系统
本系统是一个基于 Python Flask 框架的城市共享单车骑行需求时空分析平台,使用 Oslo City Bike(奥斯陆城市自行车)开放数据,提供系统总览、时间维度分析、空间维度分析、站点运营分析、OD 起讫流动分析、骑行需求预测、综合分析报告等功能模块,适用于城市共享单车运营调度与骑行需求研究场景。

基于 Python 的短视频用户行为分析系统
基于快手 KuaiRec / KuaiRand 数据集的短视频推荐分析平台,提供用户行为分析、推荐偏差检测、内容运营洞察、图神经网络推荐等完整分析链路。

基于 Python 的汽车市场数据分析与可视化平台
本平台是一个基于 Python Flask 框架的汽车市场数据分析与可视化系统,整合了多个真实汽车市场数据集,提供数据概览、车辆检索、多维分析、价格预测、品牌对比、技术规格分析、销量统计等功能模块,适用于汽车市场趋势研究和二手车价格预测场景。