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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -54
app.py CHANGED
@@ -1,4 +1,6 @@
1
  import os
 
 
2
  import threading
3
  import logging
4
  import uvicorn
@@ -13,11 +15,11 @@ from rapidfuzz import fuzz
13
  logging.basicConfig(level=logging.INFO)
14
  logger = logging.getLogger(__name__)
15
 
16
- # LINE Credentials
17
  LINE_ACCESS_TOKEN = os.getenv("LINE_ACCESS_TOKEN")
18
  LINE_CHANNEL_SECRET = os.getenv("LINE_CHANNEL_SECRET")
19
 
20
- # Initialize
21
  app = FastAPI()
22
  line_bot_api = LineBotApi(LINE_ACCESS_TOKEN)
23
  handler = WebhookHandler(LINE_CHANNEL_SECRET)
@@ -63,57 +65,33 @@ def reply_message(reply_token, message):
63
  except Exception as e:
64
  logger.error(f"Send reply error: {e}")
65
 
66
- # ----------------- Emergency Symptom and Levels ------------------
67
 
68
  EMERGENCY_SYMPTOMS = {
69
- "หมดสติ / ไม่รู้สึกตัว": [
70
- "หมดสติ", "ไม่รู้สึกตัว", "เป็นลม", "ล้มแล้วไม่ตื่น", "ไม่ตอบสนอง",
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
- "อุบัติเหตุรุนแรง": [
98
- "รถชน", "รถล้ม", "ตกจากที่สูง", "หัวฟาด", "อุบัติเหตุแรง",
99
- "รถคว่ำ", "ล้มแรง", "โดนกระแทกแรง", "ลื่นหัวฟาด", "โดนรถชน"
100
- ],
101
- "เด็กมีไข้ / ชัก": [
102
- "ไข้สูง", "เด็กชัก", "ลูกชัก", "ชักตอนมีไข้", "ตัวร้อนจัด",
103
- "ไข้ขึ้นสูง", "ตาค้าง", "เด็กไม่ตอบสนอง", "มือแข็ง", "สั่นทั้งตัว"
104
- ],
105
- "ภาวะช็อก / หัวใจเต้นผิดจังหวะ": [
106
- "ช็อก", "ความดันต่ำ", "ใจสั่น", "หัวใจเต้นผิดจังหวะ", "ชีพจรเร็ว",
107
- "หมดแรงกะทันหัน", "ตัวเย็น", "เหงื่อแตก", "ใจเต้นแรง", "แน่นท้องหายใจไม่ออก"
108
- ],
109
- "ได้รับสารพิษ / ยาเกินขนาด / สัตว์มีพิษกัด": [
110
- "สารพิษ", "กินยาเกิน", "ยาเกินขนาด", "พิษ", "ถูกงูกัด",
111
- "แมงป่องต่อย", "แมลงกัด", "แพ้ยา", "แพ้อาห���รรุนแรง", "คลื่นไส้อาเจียนมาก"
112
- ],
113
- "ผู้ป่วยตั้งครรภ์ใกล้คลอด": [
114
- "ตั้งครรภ์", "เจ็บท้องคลอด", "น้ำเดิน", "มูกเลือด", "ปวดท้องใกล้คลอด",
115
- "ท้องแข็ง", "มดลูกบีบ", "ปวดหน่วง", "เจ็บท้องถี่", "ลูกดิ้นแรงผิดปกติ"
116
- ]
117
  }
118
 
119
  EMERGENCY_LEVELS = {
@@ -136,7 +114,6 @@ FUZZY_THRESHOLD = 85
136
  def check_emergency(message):
137
  tokens = word_tokenize(message.lower(), engine="newmm")
138
  logger.info(f"Tokenized: {tokens}")
139
-
140
  for label, keywords in EMERGENCY_SYMPTOMS.items():
141
  for token in tokens:
142
  for keyword in keywords:
@@ -147,10 +124,9 @@ def check_emergency(message):
147
  return f"🚨 อาการของคุณเข้าข่ายฉุกเฉินระดับ **1 (ด่วนมาก)**: {label}\nกรุณารีบไปห้องฉุกเฉินทันที!"
148
  elif level == 2:
149
  return f"⚠️ อาการของคุณเข้าข่ายฉุกเฉินระดับ **2 (เร่งด่วน)**: {label}\nควรไปโรงพยาบาลโดยเร็วที่สุด"
150
-
151
  return "🟢 อาการของคุณไม่เข้าข่ายฉุกเฉิน สามารถเข้ารับบริการที่ห้องตรวจทั่วไปในวันถัดไปได้"
152
 
153
- # ----------------------------------------------------------------
154
 
155
  if __name__ == "__main__":
156
  uvicorn.run(app, host="0.0.0.0", port=7860)
 
1
  import os
2
+ os.environ["PYTHAINLP_DATA_DIR"] = "/tmp/pythainlp"
3
+
4
  import threading
5
  import logging
6
  import uvicorn
 
15
  logging.basicConfig(level=logging.INFO)
16
  logger = logging.getLogger(__name__)
17
 
18
+ # LINE API Keys
19
  LINE_ACCESS_TOKEN = os.getenv("LINE_ACCESS_TOKEN")
20
  LINE_CHANNEL_SECRET = os.getenv("LINE_CHANNEL_SECRET")
21
 
22
+ # FastAPI init
23
  app = FastAPI()
24
  line_bot_api = LineBotApi(LINE_ACCESS_TOKEN)
25
  handler = WebhookHandler(LINE_CHANNEL_SECRET)
 
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
  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
  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)