khaledsayed1 commited on
Commit
50e3352
·
verified ·
1 Parent(s): a7c6ae2

Delete FINAL_CODE.py

Browse files
Files changed (1) hide show
  1. FINAL_CODE.py +0 -191
FINAL_CODE.py DELETED
@@ -1,191 +0,0 @@
1
- import pandas as pd
2
- from transformers import AutoTokenizer, AutoModelForCausalLM
3
- from sentence_transformers import SentenceTransformer
4
- from difflib import get_close_matches
5
- import requests
6
- import io
7
-
8
- # GitHub Excel file URL
9
- GITHUB_EXCEL_URL = "https://raw.githubusercontent.com/3Zzamt0o/HospitalData/main/Hospital%20Data%20(1).xlsx"
10
-
11
- def load_hospital_data():
12
- try:
13
- # Fetch Excel file from GitHub
14
- response = requests.get(GITHUB_EXCEL_URL)
15
- response.raise_for_status() # Raise an exception for bad status codes
16
-
17
- # Read Excel file from the response content
18
- excel_data = io.BytesIO(response.content)
19
- df = pd.read_excel(excel_data)
20
-
21
- print("Successfully loaded data from GitHub")
22
- return df
23
- except Exception as e:
24
- print(f"Error loading data from GitHub: {e}")
25
- # Fallback to default data if GitHub fetch fails
26
- return pd.DataFrame({
27
- 'العيادات': ['عيادة الأسنان', 'عيادة الباطنة', 'عيادة العظام', 'عيادة الأطفال'],
28
- 'الدكتور': ['د. أحمد محمد', 'د. محمد علي', 'د. علي حسن', 'د. سارة أحمد'],
29
- 'الأيام': ['السبت والاثنين', 'الأحد والثلاثاء', 'الاثنين والأربعاء', 'الثلاثاء والخميس'],
30
- 'سعر الكشف': ['100 جنيه', '150 جنيه', '120 جنيه', '130 جنيه']
31
- })
32
-
33
- # Load the hospital data
34
- df = load_hospital_data()
35
-
36
- data = {
37
- "السؤال": [
38
- "ما هي مواعيد معمل التحاليل ؟", "ما هي المده المستغرقه لعمل التحاليل ؟",
39
- "ما هي انواع التحاليل الموجوده و المتوفره ؟", "هل يوجد تحليل صوره دم ؟",
40
- "ماهي تحاليل صوره الدم ؟", "ما هي تحاليل السكر ؟", "ما هي تحاليل وظائف الكبد ؟",
41
- "ما هي تحاليل وظائف الكلي ؟", "ما هي تحاليل البول و البراز ؟",
42
- "ما هي تحاليل الدهون ؟", "ما هي تحاليل الألتهابات و الروماتيزم ؟",
43
- "ما هي تحاليل الفيروسات ؟", "ما هي تحاليل الغده الدرقيه ؟",
44
- "هل يوجد حشو اسنان ؟", "هل يوجد جهاز سونار ؟", "هل يوجد اجهزه تنفس اصطناعي ؟",
45
- "هل يوجد قياس نظر ؟", "ما هي الاجهزه المتاحه في عياده الرمد ؟",
46
- "هل يوجد قياس ضغط ؟", "هل يوجد سونار ؟", "هل يوجد رسم قلب ؟"
47
- ],
48
- "الجواب": [
49
- "طول ايام الاسبوع من 9 صباحا الي 9 مسائا", "من 24 ساعه الي 48 ساعه",
50
- "تحاليل صوره الدم، تحاليل سكر، تحاليل وظائف الكبد، تحاليل وظائف الكلي",
51
- "نعم يوجد جميع انواع التحاليل بالمستشفي", "CBC، Hb%(Heamoglobin)، Blood Group، Rh",
52
- "Rbs سكر عشوائي، سكر صائم FBS، PPbs سكر فاطر", "ALT(GPT)، AST(GOT)، Billirubin",
53
- "Ceatinin الكرياتنين، Urea اليوريا، Urine البول، Uric acid اليوريك اسد",
54
- "Urine البول، Stool البراز، جرثومه المعده في البراز", "Cholesterol كوليسترول، Triglyceride الدهون الثلاثيه",
55
- "CRP، ASOT", "HCV Ab، GBS Ag، HIC Ab", "Tsh، T3، t4",
56
- "نعم يوجد حشو أسنان", "نعم يوجد جهاز سونار", "نعم يوجد أجهزة تنفس إصطناعي",
57
- "نعم يوجد قياس نظر", "جهاز قاع العين، جهاز قياس النظر، جهاز الكشف من الحساسية والالتهابات",
58
- "نعم يوجد قياس ضغط", "نعم يوجد سونار", "نعم يوجد رسم قلب"
59
- ]
60
- }
61
-
62
- qa_data = pd.DataFrame(data)
63
- qa_data.to_csv("qa_data.csv", index=False)
64
-
65
- # Using ArabertV2 model with medical knowledge
66
- model_id = "aubmindlab/bert-base-arabertv2"
67
-
68
- import pandas as pd
69
- import json
70
- from transformers import pipeline, AutoTokenizer, AutoModelForSequenceClassification
71
- from sentence_transformers import SentenceTransformer, util
72
- import torch
73
- from difflib import get_close_matches
74
-
75
- # Medical knowledge base
76
- medical_kb = {
77
- "الجفاف": "في حالة الشعور بالجفاف: 1- شرب الكثير من السوائل 2- تناول الأطعمة الغنية بالماء 3- تجنب التعرض المباشر للشمس 4- استشارة الطبيب إذا استمرت الأعراض",
78
- "الصداع": "لعلاج الصداع: 1- الراحة في مكان هادئ 2- شرب الماء بكثرة 3- تناول مسكن خفيف 4- تجنب الضوء القوي والضوضاء",
79
- "التعب": "للتغلب على التعب: 1- الحصول على قسط كافٍ من النوم 2- تناول غذاء صحي متوازن 3- ممارسة تمارين خفيفة 4- تجنب الإجهاد",
80
- "الحمى": "عند الإصابة بالحمى: 1- الراحة التامة 2- شرب السوائل بكثرة 3- خفض درجة الحرارة بالكمادات 4- استشارة الطبيب إذا تجاوزت 39 درجة",
81
- "السعال": "لتخفيف السعال: 1- شرب الماء الدافئ مع العسل 2- استخدام مرطب الهواء 3- تجنب المثيرات 4- الراحة وتناول الأدوية المناسبة",
82
- "ألم المعدة": "لعلاج ألم المعدة: 1- تجنب الأطعمة الدهنية والحارة 2- تناول وجبات خفيفة 3- شرب مشروبات دافئة كاليانسون 4- استشارة الطبيب إذا استمر الألم",
83
- "الإسهال": "لعلاج الإسهال: 1- شرب محلول معالجة الجفاف 2- تجنب الأطعمة الدسمة 3- تناول وجبات خفيفة وسهلة الهضم 4- مراجعة الطبيب إذا استمر لأكثر من يومين",
84
- "الإمساك": "لعلاج الإمساك: 1- تناول الألياف مثل الخضروات والفواكه 2- شرب الماء بكثرة 3- ممارسة النشاط البدني 4- استخدام ملينات طبيعية إذا لزم الأمر",
85
- "الزكام": "لعلاج الزكام: 1- الراحة 2- شرب السوائل الساخنة 3- استخدام بخاخات الأنف 4- تجنب البرد والتيارات الهوائية",
86
- "ألم الظهر": "لتخفيف ألم الظهر: 1- تجنب الجلوس لفترات طويلة 2- ممارسة تمارين التمدد 3- استخدام كمادات دافئة 4- مراجعة الطبيب في حال استمرار الألم"
87
- }
88
-
89
-
90
- print("Loading Arabic model and tokenizer...")
91
- tokenizer = AutoTokenizer.from_pretrained(model_id)
92
- model = AutoModelForSequenceClassification.from_pretrained(model_id)
93
-
94
- embedder = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
95
- passages = []
96
- for _, row in df.iterrows():
97
- if pd.isna(row['الدكتور']) and pd.isna(row['العيادات']):
98
- continue
99
- text = f"العيادة: {row['العيادات']}، الدكتور: {row['الدكتور']}، الأيام: {row['الأيام']}، السعر: {row['سعر الكشف']}"
100
- passages.append(text)
101
-
102
- corpus_embeddings = embedder.encode(passages, convert_to_tensor=True)
103
-
104
-
105
- def answer_question_from_excel(user_question, k=3):
106
- # First check if it's a medical symptom question
107
- for symptom, advice in medical_kb.items():
108
- if symptom in user_question or any(word in user_question for word in ["اشعر", "اعاني", "الم", "وجع", "مريض"]):
109
- return f"� **الرد:** {advice}\n\n⚠️ **ملاحظة هامة:** هذه النصائح عامة، يرجى استشارة الطبيب للتشخيص الدقيق."
110
-
111
- # Then check in qa_data for lab tests and equipment
112
- qa_answer = check_lab_or_radiology(user_question)
113
- if qa_answer:
114
- return f"💡 **الرد:** {qa_answer}"
115
-
116
- # Check for specific clinic questions
117
-
118
-
119
- # Define clinic keywords with variations
120
- clinic_mapping = {
121
- "عيادة الباطنة": ["باطنة", "الباطنة", "باطنه"],
122
- "عيادة الجلدية": ["جلد", "جلدية", "الجلدية"],
123
- "عيادة المسالك": ["مسالك", "المسالك", "مسالك بولية"],
124
- "عيادة النساء": ["نسا", "نساء", "توليد", "ولادة"],
125
- "عيادة الأنف والأذن": ["انف", "اذن", "حنجرة", "الأنف", "الأذن"],
126
- "عيادة الرمد": ["رمد", "الرمد", "عيون", "العيون"],
127
- "عيادة الأسنان": ["اسنان", "الاسنان", "الأسنان", "سنان"],
128
- "الحضانة": ["حضان", "حضانة", "الحضانة", "حضانات"],
129
- "المعمل": ["معمل", "المعمل", "تحاليل", "مختبر"],
130
- "عيادة الأطفال": ["اطفال", "الاطفال", "الأطفال"],
131
- "عيادة الجهاز الهضمي": ["هضم", "هضمي", "الجهاز الهضمي"],
132
- "عيادة التخاطب": ["تخاطب", "التخاطب", "نطق"]
133
- }
134
-
135
- # Check for specific clinic mentions
136
- target_clinic = None
137
- for clinic, keywords in clinic_mapping.items():
138
- if any(keyword in user_question for keyword in keywords):
139
- target_clinic = clinic
140
- break
141
-
142
- # If a specific clinic is mentioned, show all information for that clinic
143
- if target_clinic:
144
- clinic_info = [p for p in passages if target_clinic in p]
145
- if clinic_info:
146
- return f" **الرد:** \n" + "\n".join(clinic_info)
147
-
148
- # For questions about doctors or clinics
149
- if any(word in user_question for word in ["عيادة", "عيادات", "دكتور", "دكاترة", "دك��ورة", "مواعيد"]):
150
- # Check if asking about a specific type of clinic
151
- for clinic_type in ["الأسنان", "الباطنة", "الجلدية", "المسالك", "النساء", "الأنف", "الرمد", "الحضانة", "المعمل", "الأطفال", "الجهاز", "التخاطب"]:
152
- if clinic_type in user_question:
153
- clinic_info = [p for p in passages if clinic_type in p]
154
- if clinic_info:
155
- return f" **الرد:** \n" + "\n".join(clinic_info)
156
-
157
- # If no specific clinic type mentioned, return all clinic information
158
- return f"💡 **الرد:** \n" + "\n".join([p for p in passages if 'عيادة' in p])
159
-
160
- # If no specific clinic found, check all hospital data
161
- question_embedding = embedder.encode(user_question, convert_to_tensor=True)
162
- hits = util.semantic_search(question_embedding, corpus_embeddings, top_k=k)
163
- matched_passages = [passages[hit['corpus_id']] for hit in hits[0]]
164
-
165
- if matched_passages:
166
- hospital_info = "\n".join(matched_passages)
167
- return f"💡 **الرد:** {hospital_info}"
168
-
169
- # If no match found in any source, return a helpful message
170
- return f"💡 **الرد:** عذراً، لا يمكنني العثور على إجابة محددة لسؤالك. يرجى استشارة الطبيب للحصول على المشورة الطبية المناسبة."
171
-
172
-
173
- def check_lab_or_radiology(question):
174
- keywords = ['أشعة', 'تحاليل', 'رنين', 'سونار', 'تحليل', 'مختبر', 'معمل']
175
- if any(word in question for word in keywords):
176
- matches = get_close_matches(question, qa_data['السؤال'].tolist(), n=1, cutoff=0.5)
177
- if matches:
178
- matched_q = matches[0]
179
- answer = qa_data[qa_data['السؤال'] == matched_q]['الجواب'].values[0]
180
- return answer
181
- return None
182
- def answer_question(user_question):
183
- answer = check_lab_or_radiology(user_question)
184
- if answer:
185
- return answer
186
- return answer_question_from_excel(user_question)
187
-
188
- #print(answer_question("مين دكاترة الأطفال وميعادهم؟"))
189
- #print(answer_question("أريد معرفة تفاصيل التحليل الطبي"))
190
-
191
- #print(answer_question("اشعر ب جفاف و همدان ف جسمي ماذا افعل"))