Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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
|
17 |
LINE_ACCESS_TOKEN = os.getenv("LINE_ACCESS_TOKEN")
|
18 |
LINE_CHANNEL_SECRET = os.getenv("LINE_CHANNEL_SECRET")
|
19 |
|
20 |
-
#
|
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 |
-
#
|
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)
|