要扩展导诊系统的科室和症状词库,可以通过以下几种方式实现:
1. 直接扩展科室定义(推荐)
在初始化代码中直接添加新的科室及对应症状:
# 扩展后的科室定义
depts = [Department("内科", ["发热", "咳嗽", "胸闷", "腹痛", "头晕"]),Department("外科", ["外伤", "骨折", "扭伤", "烧伤", "肿物"]),Department("儿科", ["儿童发热", "疫苗接种", "发育迟缓", "儿童咳嗽"]),# 新增科室Department("眼科", ["视力模糊", "眼痛", "眼睛红肿", "飞蚊症"]),Department("皮肤科", ["皮疹", "瘙痒", "脱发", "皮肤溃烂"]),Department("妇产科", ["月经异常", "妊娠反应", "下腹疼痛", "妇科炎症"]),Department("耳鼻喉科", ["耳鸣", "鼻塞", "咽喉痛", "听力下降"]),
]
2. 使用配置文件分离数据(更灵活)
创建单独的配置文件存储科室信息(如JSON格式):
departments.json
:
[{"name": "内科","symptoms": ["发热", "咳嗽", "胸闷", "腹痛"]},{"name": "急诊科","symptoms": ["胸痛", "呼吸困难", "大出血", "昏迷"]},{"name": "精神心理科","symptoms": ["焦虑", "抑郁", "失眠", "幻听"]}
]
在代码中加载配置文件:
import json# 从配置文件加载科室数据
with open('departments.json') as f:dept_data = json.load(f)depts = [Department(item['name'], item['symptoms']) for item in dept_data]
triage = TriageSystem(depts)
3. 增强匹配功能(提高准确性)
改进分诊逻辑,支持同义词和模糊匹配:
class TriageSystem:def __init__(self, departments):self.departments = departments# 同义词词典self.synonyms = {"发烧": ["发热", "烧", "高烧"],"肚子疼": ["腹痛", "胃痛"],"流鼻涕": ["鼻塞", "鼻炎"]}def normalize_symptom(self, symptom):"""标准化症状表述"""symptom = symptom.lower()# 匹配同义词for std_term, aliases in self.synonyms.items():if any(alias in symptom for alias in aliases):return std_termreturn symptomdef triage_patient(self, patient):norm_symptom = self.normalize_symptom(patient.symptom)for dept in self.departments:# 模糊匹配:检查症状关键词是否出现在描述中if any(keyword in norm_symptom for keyword in dept.symptoms):return dept.name# 优先级匹配逻辑(可选)if "胸痛" in norm_symptom or "呼吸困难" in norm_symptom:return "急诊科"return "全科门诊"
4. 添加症状权重系统(高级功能)
class Department:def __init__(self, name, symptoms_with_weight):self.name = name# 症状字典:{症状: 权重}self.symptoms = {symptom.lower(): weight for symptom, weight in symptoms_with_weight}# 初始化带权重的科室
depts = [Department("心血管内科", [("胸痛", 10), ("心悸", 8), ("头晕", 5)]),Department("消化内科", [("腹痛", 9), ("腹泻", 7), ("呕吐", 6)])
]class TriageSystem:def triage_patient(self, patient):best_match = ("综合门诊", 0) # (科室, 匹配分数)for dept in self.departments:score = 0for symptom, weight in dept.symptoms.items():if symptom in patient.symptom.lower():score += weightif score > best_match[1]:best_match = (dept.name, score)return best_match[0] if best_match[1] > 5 else "综合门诊"
5. 扩展患者信息(提高准确性)
class Patient:def __init__(self, name, symptom, age=None, gender=None, duration=None):self.name = nameself.symptom = symptom.lower()self.age = ageself.gender = gender # 'M'/'F'self.duration = duration # 症状持续时间(小时)# 在分诊逻辑中使用额外信息
def triage_patient(self, patient):if patient.age 145[< 14 and "咳嗽" in patient.symptom:return "儿科"...
最佳实践建议:
1. 分层设计:将数据存储(科室列表)、业务逻辑(分诊算法)和界面展示分离
2. 动态加载:从数据库或配置文件加载科室信息,无需修改代码
3. 同义词库:维护症状同义词词典增强匹配能力
4. 权重系统:为不同症状设置权重值,提高分诊准确性
5. 急诊优先:实现紧急症状(如胸痛、大出血)的优先识别
6. 日志记录:记录分诊结果用于持续优化系统
graph TDA患者输入] --> B{症状分析}B --> C[标准化处理]C --> D[关键词提取]D --> E[科室匹配]E --> F[权重计算]F --> G[输出推荐科室]G --> H[记录分诊日志]
通过上述扩展方式,可以轻松添加新的科室和症状,同时提高分诊系统的准确性和灵活性。核心原则是将数据与逻辑分离,使系统维护更加便捷。