要擴展導診系統的科室和癥狀詞庫,可以通過以下幾種方式實現:
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[記錄分診日志]
通過上述擴展方式,可以輕松添加新的科室和癥狀,同時提高分診系統的準確性和靈活性。核心原則是將數據與邏輯分離,使系統維護更加便捷。