Tortyfishguy commited on
Commit
ae14ed3
·
verified ·
1 Parent(s): c6ece70

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -27
app.py CHANGED
@@ -26,7 +26,7 @@ handler = WebhookHandler(LINE_CHANNEL_SECRET)
26
 
27
  @app.get("/")
28
  async def root():
29
- return {"message": "Triage Bot is running (Thai NLP + fuzzy + triage level)"}
30
 
31
  @app.post("/webhook")
32
  async def webhook(request: Request, x_line_signature: str = Header(None)):
@@ -65,33 +65,24 @@ def reply_message(reply_token, message):
65
  except Exception as e:
66
  logger.error(f"Send reply error: {e}")
67
 
68
- # ------------------ Emergency Keywords ------------------
 
 
 
69
 
70
  EMERGENCY_SYMPTOMS = {
71
- "หมดสติ / ไม่รู้สึกตัว": ["หมดสติ", "ไม่รู้สึกตัว", "เป็นลม", "ล้มแล้วไม่ตื่น", "ไม่ตอบสนอง",
72
- "หลับไม่รู้เรื่อง", "ไม่ขยับ", "ปลุกไม่ตื่น", "เหม่อลอย", "สลบ"],
73
- "หายใจผิดปกติ": ["หายใจเร็ว", "หายใจเหนื่อย", "หายใจลำบาก", "หายใจติดขัด", "หอบ",
74
- "หายใจเสียงดัง", "แน่นหน้าอก", "หายใจไม่ทัน", "อึดอัด", "หายใจถี่"],
75
- "เจ็บหน้าอก": ["เจ็บหน้าอก", "แน่นหน้าอก", "จุกหน้าอก", "เสียวหน้าอก", "ปวดอก",
76
- "บีบหน้าอก", "เจ็บลึกๆในอก", "อกแน่น", "อกอึดอัด", "หน้าอกปวดจี๊ด"],
77
- "ชัก / หยุดหายใจ": ["ชัก", "เกร็ง", "หยุดหายใจ", "หมดลม", "ตัวสั่น",
78
- "ชักกระตุก", "หมดแรง", "ดิ้น", "ลืมตาไม่ขึ้น", "ตัวแข็ง"],
79
- "อัมพฤกษ์ / พูดไม่ชัด": ["อัมพฤกษ์", "อัมพาต", "พูดไม่ชัด", "หน้าเบี้ยว", "แขนขาอ่อนแรง",
80
- "ยิ้มไม่เท่ากัน", "ยกแขนไม่ขึ้น", "เดินเซ", "ลิ้นแข็ง", "แขนขาไม่มีแรง"],
81
- "เลือดออก / บาดแผล": ["เลือดออก", "เลือดไม่หยุด", "เลือดไหล", "แผลฉกรรจ์", "แผลลึก",
82
- "เลือดพุ่ง", "เลือดเปื้อนตัว", "แผลเปิด", "เลือดซึมตลอด", "แผลทะลุ"],
83
- "กระดูกหัก": ["กระดูกหัก", "แขนหัก", "ขาหัก", "นิ้วหัก", "บวมผิดรูป",
84
- "ขางอผิดรูป", "ขาใช้การไม่ได้", "ขยับแล้วเจ็บมาก", "ปูด", "โค้งผิดปกติ"],
85
- "อุบัติเหตุรุนแรง": ["รถชน", "รถล้ม", "ตกจากที่สูง", "หัวฟาด", "อุบัติเหตุแรง",
86
- "รถคว่ำ", "ล้มแรง", "โดนกระแทกแรง", "ลื่นหัวฟาด", "โดนรถชน"],
87
- "เด็กมีไข้ / ชัก": ["ไข้สูง", "เด็กชัก", "ลูกชัก", "ชักตอนมีไข้", "ตัวร้อนจัด",
88
- "ไข้ขึ้นสูง", "ตาค้าง", "เด็กไม่ตอบสนอง", "มือแข็ง", "สั่นทั้งตัว"],
89
- "ภาวะช็อก / หัวใจเต้นผิดจังหวะ": ["ช็อก", "ความดันต่ำ", "ใจสั่น", "หัวใจเต้นผิดจังหวะ", "ชีพจรเร็ว",
90
- "หมดแรงกะทันหัน", "ตัวเย็น", "เหงื่อแตก", "ใจเต้นแรง", "แน่นท้องหายใจไม่ออก"],
91
- "ได้รับสารพิษ / ยาเกินขนาด / สัตว์มีพิษกัด": ["สารพิษ", "กินยาเกิน", "ยาเกินขนาด", "พิษ", "ถูกงูกัด",
92
- "แมงป่องต่อย", "แมลงกัด", "แพ้ยา", "แพ้อาหารรุนแรง", "คลื่นไส้อาเจียนมาก"],
93
- "ผู้ป่วยตั้งครรภ์ใกล้คลอด": ["ตั้งครรภ์", "เจ็บท้องคลอด", "น้ำเดิน", "มูกเลือด", "ปวดท้องใกล้คลอด",
94
- "ท้องแข็ง", "มดลูกบีบ", "ปวดหน่วง", "เจ็บท้องถี่", "ลูกดิ้นแรงผิดปกติ"]
95
  }
96
 
97
  EMERGENCY_LEVELS = {
@@ -114,6 +105,11 @@ FUZZY_THRESHOLD = 85
114
  def check_emergency(message):
115
  tokens = word_tokenize(message.lower(), engine="newmm")
116
  logger.info(f"Tokenized: {tokens}")
 
 
 
 
 
117
  for label, keywords in EMERGENCY_SYMPTOMS.items():
118
  for token in tokens:
119
  for keyword in keywords:
@@ -124,9 +120,10 @@ def check_emergency(message):
124
  return f"🚨 อาการของคุณเข้าข่ายฉุกเฉินระดับ **1 (ด่วนมาก)**: {label}\nกรุณารีบไปห้องฉุกเฉินทันที!"
125
  elif level == 2:
126
  return f"⚠️ อาการของคุณเข้าข่ายฉุกเฉิน���ะดับ **2 (เร่งด่วน)**: {label}\nควรไปโรงพยาบาลโดยเร็วที่สุด"
 
127
  return "🟢 อาการของคุณไม่เข้าข่ายฉุกเฉิน สามารถเข้ารับบริการที่ห้องตรวจทั่วไปในวันถัดไปได้"
128
 
129
- # ---------------------------------------------------------------
130
 
131
  if __name__ == "__main__":
132
  uvicorn.run(app, host="0.0.0.0", port=7860)
 
26
 
27
  @app.get("/")
28
  async def root():
29
+ return {"message": "Triage Bot with improved matching and response."}
30
 
31
  @app.post("/webhook")
32
  async def webhook(request: Request, x_line_signature: str = Header(None)):
 
65
  except Exception as e:
66
  logger.error(f"Send reply error: {e}")
67
 
68
+ # ------------------ Emergency Keywords & Levels ------------------
69
+
70
+ # คำที่สั้นเกินไป / ไม่ชัดเจน
71
+ UNCLEAR_TOKENS = ["เจ็บ", "เวียน", "หน้ามืด", "ปวด", "ใจสั่น", "ตึง", "แน่น", "เมื่อย", "มึน"]
72
 
73
  EMERGENCY_SYMPTOMS = {
74
+ "หมดสติ / ไม่รู้สึกตัว": ["หมดสติ", "ไม่รู้สึกตัว", "สลบ", "วูบ", "หน้ามืด", "ไม่ตอบสนอง", "ล้มแล้วไม่รู้ตัว"],
75
+ "หายใจผิดปกติ": ["หายใจไม่ออก", "หายใจไม่ทัน", "หายใจลำบาก", "หอบ", "แน่นหน้าอก", "เหนื่อยหอบ", "หายใจติดขัด"],
76
+ "เจ็บหน้าอก": ["เจ็บหน้าอก", "แน่นในอก", "จุกกลางอก", "เจ็บร้าวไปหลัง", "ปวดหน้าอก", "แน่นจุก"],
77
+ "ชัก / หยุดหายใจ": ["ชัก", "เกร็ง", "กระตุก", "หยุดหายใจ", "ดิ้น", "ตาค้าง", "หมดลม"],
78
+ "อัมพฤกษ์ / พูดไม่ชัด": ["อัมพฤกษ์", "หน้าเบี้ยว", "พูดไม่ได้", "พูดไม่รู้เรื่อง", "แขนขาไม่มีแรง", "ยิ้มไม่เท่ากัน", "เดินเซ"],
79
+ "เลือดออก / บาดแผล": ["เลือดออก", "เลือดไม่หยุด", "แผลลึก", "แผลฉกรรจ์", "เลือดพุ่ง", "แผลเปิด", "เลือดซึม"],
80
+ "กระดูกหัก": ["หัก", "กระดูกหัก", "บวมผิดรูป", "งอผิดรูป", "ขยับไม่ได้", "ปูด", "ผิดรูป"],
81
+ "อุบัติเหตุรุนแรง": ["รถชน", "รถล้ม", "ตกจากที่สูง", "หัวฟาด", "โดนรถชน", "แรงกระแทก", "อุบัติเหตุรุนแรง"],
82
+ "เด็กมีไข้ / ชัก": ["ไข้สูง", "เด็กชัก", "ตัวร้อนจัด", "ไข้แล้วชัก", "ลูกชัก", "ไข้ขึ้น", "ตาค้าง", "เด็กไม่ตอบสนอง"],
83
+ "ภาวะช็อก / หัวใจเต้นผิดจังหวะ": ["ช็อก", "ใจสั่น", "ชีพจรเร็ว", "เหงื่อแตก", "ตัวเย็น", "หมดแรงกะทันหัน"],
84
+ "ได้รับสารพิษ / ยาเกินขนาด / สัตว์มีพิษกัด": ["กินยาเกิน", "ยาเกินขนาด", "โดนงูกัด", "แพ้รุนแรง", "โดนพิษ", "แมงป่องต่อย", "คลื่นไส้อาเจียนมาก"],
85
+ "ผู้ป่วยตั้งครรภ์ใกล้คลอด": ["น้ำเดิน", "มูกเลือด", "ปวดท้องคลอด", "ท้องแข็ง", "ใกล้คลอด", "เจ็บท้องถี่"]
 
 
 
 
 
 
 
 
 
 
 
 
86
  }
87
 
88
  EMERGENCY_LEVELS = {
 
105
  def check_emergency(message):
106
  tokens = word_tokenize(message.lower(), engine="newmm")
107
  logger.info(f"Tokenized: {tokens}")
108
+
109
+ # ตรวจว่าข้อความอาจไม่ชัดเจนหรือสั้นเกินไป
110
+ if len(tokens) <= 2 or all(t in UNCLEAR_TOKENS for t in tokens):
111
+ return "❗ อาการของคุณยังไม่ชัดเจน กรุณาพิมพ์รายละเอียดเพิ่มเติม เช่น ตำแหน่ง ความรุนแรง หรืออาการร่วม"
112
+
113
  for label, keywords in EMERGENCY_SYMPTOMS.items():
114
  for token in tokens:
115
  for keyword in keywords:
 
120
  return f"🚨 อาการของคุณเข้าข่ายฉุกเฉินระดับ **1 (ด่วนมาก)**: {label}\nกรุณารีบไปห้องฉุกเฉินทันที!"
121
  elif level == 2:
122
  return f"⚠️ อาการของคุณเข้าข่ายฉุกเฉิน���ะดับ **2 (เร่งด่วน)**: {label}\nควรไปโรงพยาบาลโดยเร็วที่สุด"
123
+
124
  return "🟢 อาการของคุณไม่เข้าข่ายฉุกเฉิน สามารถเข้ารับบริการที่ห้องตรวจทั่วไปในวันถัดไปได้"
125
 
126
+ # ------------------------------------------------------------
127
 
128
  if __name__ == "__main__":
129
  uvicorn.run(app, host="0.0.0.0", port=7860)