国医大师医案作为中医药领域的宝贵知识资产,其数字化整理与智能推荐一直是个专业门槛极高的领域。这个基于SpringBoot的推荐系统,本质上是在解决中医经验传承中的"知识断层"问题——老专家们积累数十年的辨证施治经验,往往以非结构化的医案形式存在,难以被年轻医师有效学习和应用。
我去年参与某三甲中医院信息化改造时深有体会:住院医师查房时捧着厚厚一摞纸质医案本翻找参考案例的场景,与现代化医疗体系形成鲜明对比。而这类系统最核心的价值在于:通过算法将症状-证型-方药之间的关联关系结构化,实现"以症寻案、以案学法"的智能推荐。
采用SpringBoot+MyBatis Plus+Vue的主流组合,但在中医药领域做了针对性强化:
特别说明:放弃MongoDB而选择ES的原因在于,医案检索需要支持"心悸失眠"这类症状术语的同义词扩展(如"心悸"对应"怔忡"、"失眠"对应"不寐"),ES的analyzer插件能更好处理中医药专业分词。
java复制// 医案核心实体
public class MedicalRecord {
private Long id;
private String title; // 如"张伯礼治疗胸痹案"
private String symptoms; // JSON存储四诊信息
private String diagnosis; // 中医诊断(证型)
private String prescription; // 方药组成
private String analysis; // 辨证分析
private String tags; // 病机标签(气滞、血瘀等)
}
特别注意症状字段采用JSON结构而非关系型设计,这是为了兼容中医四诊信息的非标准化特点:
json复制{
"symptoms": {
"望诊": ["面色萎黄", "舌质紫暗"],
"闻诊": ["语声低微"],
"问诊": ["胸闷气短", "夜间加重"],
"切诊": ["脉沉细"]
}
}
先建立中医诊断学规则库,例如:
python复制rules = [
{"if": ["舌质紫暗", "脉涩"], "then": "血瘀证", "weight": 0.8},
{"if": ["面色萎黄", "脉细"], "then": "气血两虚", "weight": 0.7}
]
这套规则由3位副主任医师参与制定,采用DSL领域语言配置,可实现动态加载。实际运行时会先通过规则引擎快速缩小推荐范围。
使用Sentence-BERT对症状描述进行向量化,关键改进点:
python复制# 相似度计算示例
query_symptoms = "心悸,胸闷,舌暗红"
case_symptoms = "心前区憋闷,心跳不安,舌质紫暗"
similarity = model.calculate_similarity(query_symptoms, case_symptoms) # 输出0.87
原始文本清洗:使用正则表达式提取关键信息
java复制String regex = "主诉:([^。]+)。现病史:([^。]+)";
Pattern pattern = Pattern.compile(regex);
术语标准化:调用中医药术语服务API
python复制def normalize_term(term):
response = requests.post(TERM_API, json={"text": term})
return response.json().get("normalized")
人工复核:通过审核工作流确保数据质量
为避免算法黑箱问题,特别设计解释生成模块:
采用三级缓存架构:
java复制@Cacheable(value = "hotCases", key = "#symptoms.hashCode()")
public List<MedicalRecord> getRecommendCases(String symptoms) {
// 业务逻辑
}
使用Spring Event实现异步日志记录:
java复制@EventListener
@Async
public void handleSearchEvent(SearchEvent event) {
searchLogService.saveSearchLog(
event.getUserId(),
event.getKeywords(),
System.currentTimeMillis()
);
}
在application.yml中增加中医药专用配置:
yaml复制tcm:
term-service: https://api.tcm.com/v1/terms
max-recommend: 5
similarity-threshold: 0.65
Dockerfile特别注意事项:
dockerfile复制# 需增大ES的JVM堆内存
ENV ES_JAVA_OPTS="-Xms2g -Xmx2g"
# 中药图片资源单独挂载
VOLUME /app/resources/herb-images
症状匹配率低:
推荐结果不稳定:
中医特殊字符显示异常:
在实际运行中我们持续收到医师用户的反馈,下一步重点优化:
这个项目的独特之处在于:它不是简单的信息检索系统,而是需要深度理解中医辨证逻辑。比如处理"但见一症便是"的特殊情况时(如独处藏奸),常规算法需要特殊调整。我们在模型训练时特意加入了200例这类特殊医案,使系统能更好地模拟中医思维特点。