Spaces:
Sleeping
Sleeping
final
Browse files- config/__pycache__/cfg.cpython-310.pyc +0 -0
- config/__pycache__/conf.cpython-310.pyc +0 -0
- config/__pycache__/handling.cpython-310.pyc +0 -0
- config/__pycache__/long_responses.cpython-310.pyc +0 -0
- config/__pycache__/option.cpython-310.pyc +0 -0
- config/__pycache__/print_data.cpython-310.pyc +0 -0
- config/__pycache__/process_text.cpython-310.pyc +0 -0
- config/__pycache__/quiz.cpython-310.pyc +0 -0
- config/__pycache__/valid_text.cpython-310.pyc +0 -0
- config/conf.py +125 -0
- config/long_responses.py +5 -0
- config/print_data.py +1 -3
- config/valid_text.py +6 -36
- data/.~lock.final.xlsx# +1 -0
- data/12.csv +0 -0
- data/2.csv +0 -0
- data/Data IEM with Tags.xlsx +0 -0
- data/Data IEM without Tags.xlsx +0 -0
- data/Data IEM3.xlsx +0 -0
- data/data5.csv +1 -1
- data/option_data.json +7 -7
- main.py +169 -0
- pages/print_data.py +0 -12
- pages/result.py +11 -21
- pages/upload_to_db.py +0 -3
- styles/main.css +101 -21
config/__pycache__/cfg.cpython-310.pyc
ADDED
|
Binary file (925 Bytes). View file
|
|
|
config/__pycache__/conf.cpython-310.pyc
ADDED
|
Binary file (4.64 kB). View file
|
|
|
config/__pycache__/handling.cpython-310.pyc
ADDED
|
Binary file (1.65 kB). View file
|
|
|
config/__pycache__/long_responses.cpython-310.pyc
ADDED
|
Binary file (956 Bytes). View file
|
|
|
config/__pycache__/option.cpython-310.pyc
ADDED
|
Binary file (1.22 kB). View file
|
|
|
config/__pycache__/print_data.cpython-310.pyc
ADDED
|
Binary file (965 Bytes). View file
|
|
|
config/__pycache__/process_text.cpython-310.pyc
ADDED
|
Binary file (5.58 kB). View file
|
|
|
config/__pycache__/quiz.cpython-310.pyc
ADDED
|
Binary file (1 kB). View file
|
|
|
config/__pycache__/valid_text.cpython-310.pyc
ADDED
|
Binary file (2.39 kB). View file
|
|
|
config/conf.py
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import re
|
| 2 |
+
|
| 3 |
+
import random
|
| 4 |
+
def message_probability(
|
| 5 |
+
user_message, recognised_words,
|
| 6 |
+
single_response=False, required_words=None
|
| 7 |
+
):
|
| 8 |
+
if required_words is None:
|
| 9 |
+
required_words = []
|
| 10 |
+
message_certainty = 0
|
| 11 |
+
has_required_words = True
|
| 12 |
+
|
| 13 |
+
for word in user_message:
|
| 14 |
+
if word in recognised_words:
|
| 15 |
+
message_certainty += 1
|
| 16 |
+
|
| 17 |
+
percentage = float(message_certainty) / float(len(recognised_words))
|
| 18 |
+
|
| 19 |
+
for word in required_words:
|
| 20 |
+
if word not in user_message:
|
| 21 |
+
has_required_words = False
|
| 22 |
+
break
|
| 23 |
+
|
| 24 |
+
if has_required_words or single_response:
|
| 25 |
+
return int(percentage * 100)
|
| 26 |
+
else:
|
| 27 |
+
return 0
|
| 28 |
+
|
| 29 |
+
def unknown():
|
| 30 |
+
response = ["Could you please re-phrase that? ",
|
| 31 |
+
"...",
|
| 32 |
+
"Sounds about right.",
|
| 33 |
+
"What does that mean?"][
|
| 34 |
+
random.randrange(4)]
|
| 35 |
+
return response
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
def check_all_messages(message):
|
| 39 |
+
highest_prob_list = {}
|
| 40 |
+
|
| 41 |
+
def response(bot_response, list_of_words, single_response=False, required_words=[]):
|
| 42 |
+
nonlocal highest_prob_list
|
| 43 |
+
highest_prob_list[bot_response] = message_probability(message, list_of_words, single_response, required_words)
|
| 44 |
+
|
| 45 |
+
# Responses -------------------------------------------------------------------------------------------------------
|
| 46 |
+
|
| 47 |
+
response("بله", ["دارد", "نشانه", "علایم", "علائم", "بله"], required_words=["بله"])
|
| 48 |
+
response("خیر", ["ندارد", "نشانهای", "علایمی", "خیر"], required_words=["خیر"])
|
| 49 |
+
response("L99", ["تمام", "خروج", "پایان", "l99"], required_words=["پایان"])
|
| 50 |
+
|
| 51 |
+
response("L01", ["اختلالات", "حرکتی", "Movement", "disorders","حرکت"],
|
| 52 |
+
required_words=["حرکت"])
|
| 53 |
+
response("L02", ["تعمیم یافته", "صورت", "گردن", "اندامهای", "رقصاک", "فوقانی", "تحتانی", "تنه"],
|
| 54 |
+
required_words=["رقصاک"])
|
| 55 |
+
response("L03", ["چشمی", "عصبی", "حرکت"
|
| 56 |
+
], required_words=["عصبی"])
|
| 57 |
+
response("L04", ["بیماری", "عصبی", "متا", "بولیکی", "نورومتابولیکی"
|
| 58 |
+
], required_words=["عصبی"])
|
| 59 |
+
response("L05", ["روانپزشکی", "روانپریشی", "روان", "پزشکی", "روانپزشکی"
|
| 60 |
+
], required_words=["روانپزشکی"])
|
| 61 |
+
response("L06", ["هیپرهموسیستئینمی", "hyperhomocysteinemia","ژنتیکی"
|
| 62 |
+
], required_words=["ژنتیکی"])
|
| 63 |
+
response("L07", ["درگیری", "طناب", "نخاعی", "spinal", "cord", "نخاعی"
|
| 64 |
+
], required_words=["نخاعی"])
|
| 65 |
+
response("L08", ["کوبالامین", "داخل", "سلولی", "intracellular", "cobalamin","سلولی"
|
| 66 |
+
], required_words=["سلولی"])
|
| 67 |
+
|
| 68 |
+
response("L09", ["لیپاز", "اسید", "لیزوزومال", "LAL-D", "کمبود"
|
| 69 |
+
], required_words=["کمبود"])
|
| 70 |
+
response("L10", ["هیدرولیپوآمید", "دهیدروژناز", "کمبود"
|
| 71 |
+
], required_words=["کمبود"])
|
| 72 |
+
response("L11", ["فسفاتمی","هایپوفسفاتمی", "هیپوفسفاتمی", "hypophosphatemia", "HP", "ژنتیکی"
|
| 73 |
+
], required_words=["ژنتیکی"])
|
| 74 |
+
response("L12", ["آنسفالوپاتی", "هیپرآمونمیک", "غیر", "کبدی", "جراحی", "چاقی", "Nonhepatic", "hyperammonemic", "encephalopathy", "bariatric", "surgery", "NHE-BS"
|
| 75 |
+
], required_words=["کبدی"])
|
| 76 |
+
response("L13", ["لرزش", "میتو", "کندری", "میتوکندری", "ژنتیکی"
|
| 77 |
+
], required_words=["ژنتیکی"])
|
| 78 |
+
response("L14", ["اندام", "لرزش", "ترمور", "Tremor", "TRM"
|
| 79 |
+
], required_words=["عصبی"])
|
| 80 |
+
|
| 81 |
+
|
| 82 |
+
best_match = max(highest_prob_list, key=highest_prob_list.get)
|
| 83 |
+
print(f'Best match = {best_match} | Score: {highest_prob_list[best_match]}')
|
| 84 |
+
|
| 85 |
+
return unknown() if highest_prob_list[best_match] < 1 else best_match
|
| 86 |
+
|
| 87 |
+
|
| 88 |
+
def replace_synonyms(sentence):
|
| 89 |
+
synonyms_dict = {
|
| 90 |
+
"بله": [
|
| 91 |
+
"بله", "بلی", "بلخ", "یله", "پله",
|
| 92 |
+
"آره", "آری", "آرخ", "yes", "ya", "bale", "ari",
|
| 93 |
+
"are", "fgi", "hvi", "Hvd", "Hvd", "fgd", "hsj",
|
| 94 |
+
"isj", "nhvn", "هست", "است", "دارد", "یس", "nhavd",
|
| 95 |
+
"هست", "احتمال دارد", "امکان دارد", "میتواند", "شاید",
|
| 96 |
+
"احتمال مثبت", "باشد", "می دهم", "یس", "yes", "yup",
|
| 97 |
+
"چک کن", "مشکوک", "دارد"
|
| 98 |
+
],
|
| 99 |
+
"خیر": [
|
| 100 |
+
"نه", "منفی", "odv", "kodv", "خیر", "no", "ni", "نخیر",
|
| 101 |
+
"نیست", "نبود", "نمیشود", "نمی شود", "نمی\u200cشود", "نیست",
|
| 102 |
+
"ندیدم", "دخ", "nist", "nabod", "na", "nah", "noch", "nuch",
|
| 103 |
+
"nooch", "manfi", "udv"
|
| 104 |
+
],
|
| 105 |
+
}
|
| 106 |
+
reverse_dict = {}
|
| 107 |
+
for key, synonyms in synonyms_dict.items():
|
| 108 |
+
for synonym in synonyms:
|
| 109 |
+
reverse_dict[synonym] = key
|
| 110 |
+
|
| 111 |
+
regex_pattern = r'\b(' + '|'.join(map(re.escape, reverse_dict.keys())) + r')\b'
|
| 112 |
+
|
| 113 |
+
def replace(match):
|
| 114 |
+
return reverse_dict[match.group(0)]
|
| 115 |
+
|
| 116 |
+
result = re.sub(regex_pattern, replace, sentence)
|
| 117 |
+
print(result)
|
| 118 |
+
return result
|
| 119 |
+
|
| 120 |
+
# Used to get the response
|
| 121 |
+
def get_response(user_input):
|
| 122 |
+
user_input = replace_synonyms(user_input)
|
| 123 |
+
split_message = re.split(r'\s+|[,;?!.-]\s*', user_input.lower())
|
| 124 |
+
response = check_all_messages(split_message)
|
| 125 |
+
return response
|
config/long_responses.py
CHANGED
|
@@ -1,4 +1,9 @@
|
|
| 1 |
import random
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
|
| 3 |
R_EATING = "I don't like eating anything because I'm a bot obviously!"
|
| 4 |
R_ADVICE = "If I were you, I would go to the internet and type exactly what you wrote there!"
|
|
|
|
| 1 |
import random
|
| 2 |
+
from config.quiz import Question
|
| 3 |
+
from config.option import Option
|
| 4 |
+
import os
|
| 5 |
+
import pathlib
|
| 6 |
+
|
| 7 |
|
| 8 |
R_EATING = "I don't like eating anything because I'm a bot obviously!"
|
| 9 |
R_ADVICE = "If I were you, I would go to the internet and type exactly what you wrote there!"
|
config/print_data.py
CHANGED
|
@@ -12,6 +12,4 @@ class ConversationProcessor:
|
|
| 12 |
if role == 'user':
|
| 13 |
file.write("User: " + content + "\n")
|
| 14 |
elif role == 'assistant':
|
| 15 |
-
file.write("Assistant: " + content + "\n")
|
| 16 |
-
|
| 17 |
-
# print(f"مکالمات با موفقیت در فایل {output_file} ذخیره شدند.")
|
|
|
|
| 12 |
if role == 'user':
|
| 13 |
file.write("User: " + content + "\n")
|
| 14 |
elif role == 'assistant':
|
| 15 |
+
file.write("Assistant: " + content + "\n")
|
|
|
|
|
|
config/valid_text.py
CHANGED
|
@@ -7,13 +7,16 @@ def is_valid_input(user_input):
|
|
| 7 |
"بله", "بلی", "بلخ", "یله", "پله",
|
| 8 |
"آره", "آری", "آرخ", "yes", "ya", "bale", "ari",
|
| 9 |
"are", "fgi", "hvi", "Hvd", "Hvd", "fgd", "hsj",
|
| 10 |
-
"isj", "nhvn", "هست", "است", "دارد", "یس",
|
|
|
|
|
|
|
|
|
|
| 11 |
],
|
| 12 |
"خیر": [
|
| 13 |
"نه", "منفی", "odv", "kodv", "خیر", "no", "ni", "نخیر",
|
| 14 |
"نیست", "نبود", "نمیشود", "نمی شود", "نمی\u200cشود", "نیست",
|
| 15 |
"ندیدم", "دخ", "nist", "nabod", "na", "nah", "noch", "nuch",
|
| 16 |
-
"nooch","manfi",
|
| 17 |
],
|
| 18 |
}
|
| 19 |
input_list = user_input.split(" ")
|
|
@@ -78,37 +81,4 @@ group_dict = {
|
|
| 78 |
"عوارض آنسفالوپاتی غیر کبدی به دنبال جراحی باریاتریک": "L12",
|
| 79 |
"لرزش اندام فوقانی": "L13",
|
| 80 |
"بیماریهای میتوکندری": "L14",
|
| 81 |
-
}
|
| 82 |
-
# print(type(user_choice_level("فسفاتمی")))
|
| 83 |
-
# for k in group_dict.keys():
|
| 84 |
-
# lst = k.split()
|
| 85 |
-
# print(lst)
|
| 86 |
-
|
| 87 |
-
#
|
| 88 |
-
# ['اختلالات', 'حرکتی']["اختلالات حرکتی","Movement" ,"disorders"]
|
| 89 |
-
# ['رقصاک', 'تعمیم', 'یافته', 'صورت', 'گردن', 'اندامهای', 'فوقانی/تحتانی', 'تنه']
|
| 90 |
-
# ['اختلالات', 'حرکات', 'چشم', 'علائم', 'عصبی'][ 'حرکات', 'چشم', 'عصبی']
|
| 91 |
-
# ['بیماری', 'عصبی']["عصبی", "متابولیکی"]
|
| 92 |
-
# ['هوموستئینمی', 'شدید']["هیپرهموسیستئینمی" , "hyperhomocysteinemia"]
|
| 93 |
-
# ['تظاهرات', 'روانی',"روانشناسی"]["اختلالات","روانپزشکی","psychiatric","manifestations"]
|
| 94 |
-
# ['درگیری', 'نخاع']["درگیری","طناب", "نخاعی", "spinal", "cord"]
|
| 95 |
-
#
|
| 96 |
-
# ['متابولیسم', 'کبدی', 'داخل', 'سلولی']["کوبالامین" "داخل" "سلولی" "intracellular" "cobalamin"]
|
| 97 |
-
# ['کمبود', 'لیپاز', 'اسید', 'لیزوزومی']["لیپاز" "اسید" "لیزوزومال"]
|
| 98 |
-
# ['کمبود', 'دی', 'هیدرو', 'لیپوامید', 'دی', 'هیدروژناز']["کمبود" ,"دی هیدرولیپو","آمید", "دهیدروژناز"]
|
| 99 |
-
#
|
| 100 |
-
#
|
| 101 |
-
#
|
| 102 |
-
#
|
| 103 |
-
# ['فسفاتمی']["هایپوفسفاتمی"] ["hypophosphatemia","hp"]
|
| 104 |
-
# ['عوارض', 'آنسفالوپاتی', 'کبدی','دنبال', 'جراحی', 'باریاتریک']
|
| 105 |
-
# ["Nonhepatic", "hyperammonemic", "encephalopathy" ,"bariatric", "surgery", "آنسفالوپاتی"
|
| 106 |
-
# , "هیپرآمونمیک", "کبدی", "جراحی" ,"چاقی" ,"NHEBS"]
|
| 107 |
-
# ["لرزش","ترمور","Tremor"]
|
| 108 |
-
#
|
| 109 |
-
#
|
| 110 |
-
#
|
| 111 |
-
#
|
| 112 |
-
# ['لرزش', 'اندام', 'فوقانی']
|
| 113 |
-
# ['بیماریهای', 'میتوکندری']
|
| 114 |
-
# ["درگیری","طناب", "نخاعی", "spinal", "cord"]
|
|
|
|
| 7 |
"بله", "بلی", "بلخ", "یله", "پله",
|
| 8 |
"آره", "آری", "آرخ", "yes", "ya", "bale", "ari",
|
| 9 |
"are", "fgi", "hvi", "Hvd", "Hvd", "fgd", "hsj",
|
| 10 |
+
"isj", "nhvn", "هست", "است", "دارد", "یس", "nhavd",
|
| 11 |
+
"هست", "احتمال دارد", "امکان دارد", "میتواند", "شاید",
|
| 12 |
+
"احتمال مثبت", "باشد", "می دهم", "یس", "yes", "yup",
|
| 13 |
+
"چک کن", "مشکوک", "دارد"
|
| 14 |
],
|
| 15 |
"خیر": [
|
| 16 |
"نه", "منفی", "odv", "kodv", "خیر", "no", "ni", "نخیر",
|
| 17 |
"نیست", "نبود", "نمیشود", "نمی شود", "نمی\u200cشود", "نیست",
|
| 18 |
"ندیدم", "دخ", "nist", "nabod", "na", "nah", "noch", "nuch",
|
| 19 |
+
"nooch", "manfi", "udv"
|
| 20 |
],
|
| 21 |
}
|
| 22 |
input_list = user_input.split(" ")
|
|
|
|
| 81 |
"عوارض آنسفالوپاتی غیر کبدی به دنبال جراحی باریاتریک": "L12",
|
| 82 |
"لرزش اندام فوقانی": "L13",
|
| 83 |
"بیماریهای میتوکندری": "L14",
|
| 84 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
data/.~lock.final.xlsx#
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
,digi-ai,Digital-Ai,31.05.2024 12:56,file:///home/digi-ai/.config/libreoffice/4;
|
data/12.csv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data/2.csv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data/Data IEM with Tags.xlsx
ADDED
|
Binary file (39.3 kB). View file
|
|
|
data/Data IEM without Tags.xlsx
ADDED
|
Binary file (38.5 kB). View file
|
|
|
data/Data IEM3.xlsx
ADDED
|
Binary file (30.6 kB). View file
|
|
|
data/data5.csv
CHANGED
|
@@ -485,4 +485,4 @@ L13-01-01-01-01-01-01-01,چک کنید آیا آتاکسی، دیستونی، ب
|
|
| 485 |
L13-01-01-01-01-01-01-01-01,چک کنید آیا دیستونی، پارکینسونیسم، لرزش وجود دارد و تستهای آزمایشگاهی مانند سطح دوپامین CSF؛ تجزیه و تحلیل ژنتیکی: GCH1 موید حضور Segawa disease (DRD) است؟,بله,احتمالا Segawa disease (DRD) است.,L99
|
| 486 |
L13-01-01-01-01-01-01-01-01,چک کنید آیا دیستونی، پارکینسونیسم، لرزش وجود دارد و تستهای آزمایشگاهی مانند سطح دوپامین CSF؛ تجزیه و تحلیل ژنتیکی: GCH1 موید حضور Segawa disease (DRD) است؟,خیر,منتظر مرحله بعدی بمانید,L13-01-01-01-01-01-01-01-01-01
|
| 487 |
L13-01-01-01-01-01-01-01-01-01,چک کنید آیا آتاکسی، دیستونی، لرزش، اسپاستیسیتی وجود دارد و تستهای آزمایشگاهی مانند لاکتات سرم، فعالیت های بیوشیمیایی مجموعه های زنجیره تنفسی در پوست یا ماهیچه، سطح CoQ10 عضلانی. تجزیه و تحلیل ژنتیکی: چندین ژن موید حضور Coenzyme Q10 deficiency هستند؟,بله,احتمالا Coenzyme Q10 deficiency است.,L99
|
| 488 |
-
L13-01-01-01-01-01-01-01-01-01,چک کنید آیا آتاکسی، دیستونی، لرزش، اسپاستیسیتی وجود دارد و تستهای آزمایشگاهی مانند لاکتات سرم، فعالیت های بیوشیمیایی مجموعه های زنجیره تنفسی در پوست یا ماهیچه، سطح CoQ10 عضلانی. تجزیه و تحلیل ژنتیکی: چندین ژن موید حضور Coenzyme Q10 deficiency هستند؟,خیر,از روشهای دیگری برای تشخیص استفاده نمایید,L99
|
|
|
|
| 485 |
L13-01-01-01-01-01-01-01-01,چک کنید آیا دیستونی، پارکینسونیسم، لرزش وجود دارد و تستهای آزمایشگاهی مانند سطح دوپامین CSF؛ تجزیه و تحلیل ژنتیکی: GCH1 موید حضور Segawa disease (DRD) است؟,بله,احتمالا Segawa disease (DRD) است.,L99
|
| 486 |
L13-01-01-01-01-01-01-01-01,چک کنید آیا دیستونی، پارکینسونیسم، لرزش وجود دارد و تستهای آزمایشگاهی مانند سطح دوپامین CSF؛ تجزیه و تحلیل ژنتیکی: GCH1 موید حضور Segawa disease (DRD) است؟,خیر,منتظر مرحله بعدی بمانید,L13-01-01-01-01-01-01-01-01-01
|
| 487 |
L13-01-01-01-01-01-01-01-01-01,چک کنید آیا آتاکسی، دیستونی، لرزش، اسپاستیسیتی وجود دارد و تستهای آزمایشگاهی مانند لاکتات سرم، فعالیت های بیوشیمیایی مجموعه های زنجیره تنفسی در پوست یا ماهیچه، سطح CoQ10 عضلانی. تجزیه و تحلیل ژنتیکی: چندین ژن موید حضور Coenzyme Q10 deficiency هستند؟,بله,احتمالا Coenzyme Q10 deficiency است.,L99
|
| 488 |
+
L13-01-01-01-01-01-01-01-01-01,چک کنید آیا آتاکسی، دیستونی، لرزش، اسپاستیسیتی وجود دارد و تستهای آزمایشگاهی مانند لاکتات سرم، فعالیت های بیوشیمیایی مجموعه های زنجیره تنفسی در پوست یا ماهیچه، سطح CoQ10 عضلانی. تجزیه و تحلیل ژنتیکی: چندین ژن موید حضور Coenzyme Q10 deficiency هستند؟,خیر,از روشهای دیگری برای تشخیص استفاده نمایید,L99
|
data/option_data.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
{
|
| 2 |
-
"
|
| 3 |
"شروع": {
|
| 4 |
"feedback": "شروع بررسی وضعیت",
|
| 5 |
"next": "L01"
|
|
@@ -9,10 +9,10 @@
|
|
| 9 |
"next": "L99"
|
| 10 |
}
|
| 11 |
},
|
| 12 |
-
"
|
| 13 |
"نتیجه": {
|
| 14 |
"feedback": "خاتمه بررسی ",
|
| 15 |
-
"next": "
|
| 16 |
}
|
| 17 |
},
|
| 18 |
"L01": {
|
|
@@ -27,12 +27,12 @@
|
|
| 27 |
},
|
| 28 |
"L01-01": {
|
| 29 |
"بله": {
|
| 30 |
-
"feedback": "
|
| 31 |
-
"next": "
|
| 32 |
},
|
| 33 |
"خیر": {
|
| 34 |
-
"feedback": "
|
| 35 |
-
"next": "
|
| 36 |
}
|
| 37 |
},
|
| 38 |
"L01-01-01": {
|
|
|
|
| 1 |
{
|
| 2 |
+
"L98": {
|
| 3 |
"شروع": {
|
| 4 |
"feedback": "شروع بررسی وضعیت",
|
| 5 |
"next": "L01"
|
|
|
|
| 9 |
"next": "L99"
|
| 10 |
}
|
| 11 |
},
|
| 12 |
+
"L99": {
|
| 13 |
"نتیجه": {
|
| 14 |
"feedback": "خاتمه بررسی ",
|
| 15 |
+
"next": ""
|
| 16 |
}
|
| 17 |
},
|
| 18 |
"L01": {
|
|
|
|
| 27 |
},
|
| 28 |
"L01-01": {
|
| 29 |
"بله": {
|
| 30 |
+
"feedback": "بیماریت کشفیده شد",
|
| 31 |
+
"next": "L99"
|
| 32 |
},
|
| 33 |
"خیر": {
|
| 34 |
+
"feedback": "بیماریت کشفیده شد",
|
| 35 |
+
"next": "L99"
|
| 36 |
}
|
| 37 |
},
|
| 38 |
"L01-01-01": {
|
main.py
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import time
|
| 2 |
+
import streamlit as st
|
| 3 |
+
from config.quiz import Question
|
| 4 |
+
from config.option import Option
|
| 5 |
+
from config.valid_text import is_valid_input, levels
|
| 6 |
+
from streamlit_option_menu import option_menu
|
| 7 |
+
from arabic_support import support_arabic_text
|
| 8 |
+
from pathlib import Path
|
| 9 |
+
import json
|
| 10 |
+
from PIL import Image
|
| 11 |
+
from config.conf import *
|
| 12 |
+
|
| 13 |
+
st.set_page_config(
|
| 14 |
+
page_title="AI-Medical Questionnaire",
|
| 15 |
+
page_icon="💊",
|
| 16 |
+
layout="wide",
|
| 17 |
+
initial_sidebar_state="expanded",
|
| 18 |
+
)
|
| 19 |
+
|
| 20 |
+
# مسیر فایل فعلی
|
| 21 |
+
current_file_path = Path(__file__).resolve()
|
| 22 |
+
# مسیر ریشه پروژه (دو سطح بالاتر از فایل فعلی)
|
| 23 |
+
project_root = current_file_path.parents[0]
|
| 24 |
+
# مسیرهای دایرکتوریها
|
| 25 |
+
assets_dir = project_root / "asset"
|
| 26 |
+
database_dir = project_root / "data"
|
| 27 |
+
styles_dir = project_root / "styles"
|
| 28 |
+
|
| 29 |
+
# پشتیبانی از متن عربی در تمامی اجزاء
|
| 30 |
+
support_arabic_text(all=True)
|
| 31 |
+
|
| 32 |
+
# خواندن فایل CSS
|
| 33 |
+
css_file_path = styles_dir / "main.css"
|
| 34 |
+
with open(css_file_path, "r", encoding="utf-8") as file:
|
| 35 |
+
css_code = file.read()
|
| 36 |
+
|
| 37 |
+
# اعمال CSS
|
| 38 |
+
st.markdown(f"<style>{css_code}</style>", unsafe_allow_html=True)
|
| 39 |
+
# def go_to_level(selected):
|
| 40 |
+
# state.level = levels()
|
| 41 |
+
support_arabic_text(all=True)
|
| 42 |
+
state = st.session_state
|
| 43 |
+
st.title("AI-Medical Questionnaire")
|
| 44 |
+
side = st.sidebar
|
| 45 |
+
|
| 46 |
+
if "messages" not in state:
|
| 47 |
+
state["messages"] = []
|
| 48 |
+
start = """ سلام من دستیار شما هستم. برای بررسی و تصمیم گیری وضعیت بیماران مرحله به مرحله بررسی وضعیت بیمار را با کمک من انجام دهید. برای پیشنهاد می کنم
|
| 49 |
+
اختلالات حرکتی را بررسی کنید. آیا بیمار دارای چنین اختلالی است؟)"""
|
| 50 |
+
state.messages.append({"role": "assistant", "content": start})
|
| 51 |
+
# st.chat_message("user", avatar=str(assets_dir / "user.png")).markdown(
|
| 52 |
+
# state["messages"] = []
|
| 53 |
+
if "result" not in state:
|
| 54 |
+
state.result = ""
|
| 55 |
+
if "level" not in state:
|
| 56 |
+
state.level = "L01"
|
| 57 |
+
state.next = ""
|
| 58 |
+
state.previous = ""
|
| 59 |
+
|
| 60 |
+
# مسیرهای فایلهای JSON
|
| 61 |
+
question_file = database_dir / "question_data.json"
|
| 62 |
+
option_file = database_dir / "option_data.json"
|
| 63 |
+
|
| 64 |
+
# ایجاد کلاسهای سوالات و گزینهها
|
| 65 |
+
question_class = Question(question_file, option_file)
|
| 66 |
+
option_class = Option(question_file, option_file)
|
| 67 |
+
|
| 68 |
+
# بارگذاری دادهها
|
| 69 |
+
question = question_class.load_question_data()
|
| 70 |
+
options = option_class.load_option_data()
|
| 71 |
+
question_text = question_class.get_question_text(state.level)
|
| 72 |
+
|
| 73 |
+
with side:
|
| 74 |
+
img = Image.open(assets_dir / "logo.png")
|
| 75 |
+
st.image(
|
| 76 |
+
img,
|
| 77 |
+
width=250,
|
| 78 |
+
caption="جهت بازنشانی از دکمه ریست استفاده کنید",
|
| 79 |
+
)
|
| 80 |
+
|
| 81 |
+
if st.button("reset"):
|
| 82 |
+
|
| 83 |
+
del state["messages"]
|
| 84 |
+
st.rerun()
|
| 85 |
+
|
| 86 |
+
def response_generator(resp):
|
| 87 |
+
yield f"checkpoint: {state.previous}"
|
| 88 |
+
yield "\n\n"
|
| 89 |
+
for word in resp.split():
|
| 90 |
+
character = ""
|
| 91 |
+
for char in word:
|
| 92 |
+
yield character + char
|
| 93 |
+
time.sleep(0.03)
|
| 94 |
+
yield " "
|
| 95 |
+
time.sleep(0.05)
|
| 96 |
+
|
| 97 |
+
|
| 98 |
+
for messages in state.messages:
|
| 99 |
+
|
| 100 |
+
if messages["role"] == "assistant":
|
| 101 |
+
avatar = str(assets_dir / "robot_icon.png")
|
| 102 |
+
elif messages["role"] == "user":
|
| 103 |
+
avatar = str(assets_dir / "user.png")
|
| 104 |
+
else:
|
| 105 |
+
avatar = None # Default
|
| 106 |
+
|
| 107 |
+
with st.chat_message(messages["role"], avatar=avatar):
|
| 108 |
+
st.markdown(messages["content"])
|
| 109 |
+
|
| 110 |
+
|
| 111 |
+
prompt = st.chat_input("""نوشتن پیام""")
|
| 112 |
+
|
| 113 |
+
if prompt:
|
| 114 |
+
answer = prompt
|
| 115 |
+
answer = get_response(answer)
|
| 116 |
+
if answer == "L99":
|
| 117 |
+
state.result = "L99"
|
| 118 |
+
|
| 119 |
+
feedback = option_class.get_feedback("نتیجه", state.result)
|
| 120 |
+
st.switch_page("pages/result.py")
|
| 121 |
+
st.chat_message("user", avatar=str(assets_dir / "user.png")).markdown(prompt)
|
| 122 |
+
state.messages.append({"role": "user", "content": prompt})
|
| 123 |
+
|
| 124 |
+
if answer == "بله" or answer == "خیر":
|
| 125 |
+
|
| 126 |
+
next_level = option_class.get_next_level(answer, state.level)
|
| 127 |
+
feedback = option_class.get_feedback(answer, state.level)
|
| 128 |
+
|
| 129 |
+
if next_level != "L98" and next_level != "L99":
|
| 130 |
+
my_bar = st.progress(0, text=feedback)
|
| 131 |
+
for percent_complete in range(100):
|
| 132 |
+
time.sleep(0.01)
|
| 133 |
+
my_bar.progress(percent_complete + 1, text=feedback)
|
| 134 |
+
time.sleep(1)
|
| 135 |
+
my_bar.empty()
|
| 136 |
+
state.previous = state.level
|
| 137 |
+
state.level = next_level
|
| 138 |
+
|
| 139 |
+
resp = question_class.get_question_text(state.level)[0]
|
| 140 |
+
with st.chat_message("assistant"):
|
| 141 |
+
response = st.write_stream(response_generator(resp))
|
| 142 |
+
state.messages.append({"role": "assistant", "content": response})
|
| 143 |
+
|
| 144 |
+
elif next_level == "L98":
|
| 145 |
+
state.previous = state.level
|
| 146 |
+
state.level = next_level
|
| 147 |
+
|
| 148 |
+
state.result = feedback
|
| 149 |
+
st.switch_page("pages/result.py")
|
| 150 |
+
elif next_level == "L99":
|
| 151 |
+
state.result = feedback
|
| 152 |
+
st.switch_page("pages/result.py")
|
| 153 |
+
|
| 154 |
+
elif answer[0] == "L":
|
| 155 |
+
|
| 156 |
+
feedback = "تغییر بخش مورد بررسی, تا چند لحظه دیگر"
|
| 157 |
+
state.previous = state.level
|
| 158 |
+
next_level = answer
|
| 159 |
+
state.level = next_level
|
| 160 |
+
resp = question_class.get_question_text(state.level)[0]
|
| 161 |
+
with st.chat_message("assistant"):
|
| 162 |
+
response = st.write_stream(response_generator(resp))
|
| 163 |
+
state.messages.append({"role": "assistant", "content": response})
|
| 164 |
+
|
| 165 |
+
else:
|
| 166 |
+
with st.chat_message("assistant"):
|
| 167 |
+
answer = unknown()
|
| 168 |
+
response = st.write_stream(response_generator(answer))
|
| 169 |
+
state.messages.append({"role": "assistant", "content": response})
|
pages/print_data.py
CHANGED
|
@@ -8,40 +8,28 @@ from datetime import date
|
|
| 8 |
|
| 9 |
|
| 10 |
current_file_path = Path(__file__).resolve()
|
| 11 |
-
# مسیر ریشه پروژه (یک سطح بالاتر از فایل فعلی)
|
| 12 |
project_root = current_file_path.parents[1]
|
| 13 |
-
# مسیرهای دایرکتوریها
|
| 14 |
assets_dir = project_root / "asset"
|
| 15 |
database_dir = project_root / "data"
|
| 16 |
styles_dir = project_root / "styles"
|
| 17 |
|
| 18 |
-
# Streamlit page configuration
|
| 19 |
st.set_page_config(
|
| 20 |
page_title="Data Handling",
|
| 21 |
page_icon="📈",
|
| 22 |
layout="wide",
|
| 23 |
initial_sidebar_state="expanded",
|
| 24 |
)
|
| 25 |
-
# پشتیبانی از متن عربی در تمامی اجزاء
|
| 26 |
support_arabic_text(all=True)
|
| 27 |
-
# خواندن CSS از فایل
|
| 28 |
with open(styles_dir / "main.css", "r") as file:
|
| 29 |
css_code = file.read()
|
| 30 |
|
| 31 |
-
# اعمال CSS
|
| 32 |
st.markdown(f"<style>{css_code}</style>", unsafe_allow_html=True)
|
| 33 |
side = st.sidebar
|
| 34 |
|
| 35 |
-
# Initialize session state
|
| 36 |
state = st.session_state
|
| 37 |
if "messages" not in state:
|
| 38 |
state["messages"] = []
|
| 39 |
-
if "start" not in state:
|
| 40 |
-
state["start"] = """سلام من دستیار شما هستم. برای بررسی و تصمیم گیری وضعیت بیماران
|
| 41 |
-
مرحله به مرحله بررسی وضعیت بیمار را با کمک من انجام دهید.برای شروع پیشنهاد
|
| 42 |
-
میکنم اختلالات حرکتی را بررسی کنید. آیا بیمار دارای چنین اختلالی است؟"""
|
| 43 |
|
| 44 |
-
# پشتیبانی از متن عربی در تمامی اجزاء
|
| 45 |
support_arabic_text(all=True)
|
| 46 |
|
| 47 |
# Sidebar menu
|
|
|
|
| 8 |
|
| 9 |
|
| 10 |
current_file_path = Path(__file__).resolve()
|
|
|
|
| 11 |
project_root = current_file_path.parents[1]
|
|
|
|
| 12 |
assets_dir = project_root / "asset"
|
| 13 |
database_dir = project_root / "data"
|
| 14 |
styles_dir = project_root / "styles"
|
| 15 |
|
|
|
|
| 16 |
st.set_page_config(
|
| 17 |
page_title="Data Handling",
|
| 18 |
page_icon="📈",
|
| 19 |
layout="wide",
|
| 20 |
initial_sidebar_state="expanded",
|
| 21 |
)
|
|
|
|
| 22 |
support_arabic_text(all=True)
|
|
|
|
| 23 |
with open(styles_dir / "main.css", "r") as file:
|
| 24 |
css_code = file.read()
|
| 25 |
|
|
|
|
| 26 |
st.markdown(f"<style>{css_code}</style>", unsafe_allow_html=True)
|
| 27 |
side = st.sidebar
|
| 28 |
|
|
|
|
| 29 |
state = st.session_state
|
| 30 |
if "messages" not in state:
|
| 31 |
state["messages"] = []
|
|
|
|
|
|
|
|
|
|
|
|
|
| 32 |
|
|
|
|
| 33 |
support_arabic_text(all=True)
|
| 34 |
|
| 35 |
# Sidebar menu
|
pages/result.py
CHANGED
|
@@ -7,46 +7,33 @@ from PIL import Image
|
|
| 7 |
from datetime import date
|
| 8 |
|
| 9 |
|
|
|
|
|
|
|
| 10 |
current_file_path = Path(__file__).resolve()
|
| 11 |
-
# مسیر ریشه پروژه (یک سطح بالاتر از فایل فعلی)
|
| 12 |
project_root = current_file_path.parents[1]
|
| 13 |
-
# مسیرهای دایرکتوریها
|
| 14 |
assets_dir = project_root / "asset"
|
| 15 |
database_dir = project_root / "data"
|
| 16 |
styles_dir = project_root / "styles"
|
| 17 |
|
| 18 |
-
# Streamlit page configuration
|
| 19 |
st.set_page_config(
|
| 20 |
-
page_title="
|
| 21 |
-
page_icon="
|
| 22 |
layout="wide",
|
| 23 |
initial_sidebar_state="expanded",
|
| 24 |
)
|
| 25 |
-
# پشتیبانی از متن عربی در تمامی اجزاء
|
| 26 |
support_arabic_text(all=True)
|
| 27 |
-
# خواندن CSS از فایل
|
| 28 |
with open(styles_dir / "main.css", "r") as file:
|
| 29 |
css_code = file.read()
|
| 30 |
|
| 31 |
-
# اعمال CSS
|
| 32 |
st.markdown(f"<style>{css_code}</style>", unsafe_allow_html=True)
|
|
|
|
|
|
|
| 33 |
side = st.sidebar
|
| 34 |
|
| 35 |
-
|
| 36 |
-
state = st.session_state
|
| 37 |
-
if "messages" not in state:
|
| 38 |
-
state["messages"] = []
|
| 39 |
-
if "start" not in state:
|
| 40 |
-
state["start"] = """سلام من دستیار شما هستم. برای بررسی و تصمیم گیری وضعیت بیماران
|
| 41 |
-
مرحله به مرحله بررسی وضعیت بیمار را با کمک من انجام دهید.برای شروع پیشنهاد
|
| 42 |
-
میکنم اختلالات حرکتی را بررسی کنید. آیا بیمار دارای چنین اختلالی است؟"""
|
| 43 |
-
|
| 44 |
-
# پشتیبانی از متن عربی در تمامی اجزاء
|
| 45 |
support_arabic_text(all=True)
|
| 46 |
|
| 47 |
-
# Sidebar menu
|
| 48 |
with side:
|
| 49 |
-
# Display image
|
| 50 |
img = Image.open(assets_dir / "us.png")
|
| 51 |
st.image(img, width=250, caption="بررسی های صورت گرفته را میتوانید در این بخش دریافت نمایید")
|
| 52 |
|
|
@@ -54,7 +41,10 @@ with side:
|
|
| 54 |
def main():
|
| 55 |
|
| 56 |
st.title('بررسی نتایج و گزارش وضعیت')
|
| 57 |
-
|
|
|
|
|
|
|
|
|
|
| 58 |
processor = ConversationProcessor(state)
|
| 59 |
|
| 60 |
if st.button('ذخیره گزارش'):
|
|
|
|
| 7 |
from datetime import date
|
| 8 |
|
| 9 |
|
| 10 |
+
|
| 11 |
+
state = st.session_state
|
| 12 |
current_file_path = Path(__file__).resolve()
|
|
|
|
| 13 |
project_root = current_file_path.parents[1]
|
|
|
|
| 14 |
assets_dir = project_root / "asset"
|
| 15 |
database_dir = project_root / "data"
|
| 16 |
styles_dir = project_root / "styles"
|
| 17 |
|
|
|
|
| 18 |
st.set_page_config(
|
| 19 |
+
page_title="Result",
|
| 20 |
+
page_icon="✍",
|
| 21 |
layout="wide",
|
| 22 |
initial_sidebar_state="expanded",
|
| 23 |
)
|
|
|
|
| 24 |
support_arabic_text(all=True)
|
|
|
|
| 25 |
with open(styles_dir / "main.css", "r") as file:
|
| 26 |
css_code = file.read()
|
| 27 |
|
|
|
|
| 28 |
st.markdown(f"<style>{css_code}</style>", unsafe_allow_html=True)
|
| 29 |
+
|
| 30 |
+
|
| 31 |
side = st.sidebar
|
| 32 |
|
| 33 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
support_arabic_text(all=True)
|
| 35 |
|
|
|
|
| 36 |
with side:
|
|
|
|
| 37 |
img = Image.open(assets_dir / "us.png")
|
| 38 |
st.image(img, width=250, caption="بررسی های صورت گرفته را میتوانید در این بخش دریافت نمایید")
|
| 39 |
|
|
|
|
| 41 |
def main():
|
| 42 |
|
| 43 |
st.title('بررسی نتایج و گزارش وضعیت')
|
| 44 |
+
if "result" not in state:
|
| 45 |
+
st.write("شما بررسی را آغاز نکردهاید. به صفحه اصلی بازگردید.")
|
| 46 |
+
st.stop()
|
| 47 |
+
st.markdown(state["result"])
|
| 48 |
processor = ConversationProcessor(state)
|
| 49 |
|
| 50 |
if st.button('ذخیره گزارش'):
|
pages/upload_to_db.py
CHANGED
|
@@ -21,13 +21,10 @@ st.set_page_config(
|
|
| 21 |
layout="wide",
|
| 22 |
initial_sidebar_state="expanded",
|
| 23 |
)
|
| 24 |
-
# Support Arabic text alignment in all components
|
| 25 |
support_arabic_text(all=True)
|
| 26 |
-
# Reading CSS from file
|
| 27 |
with open(styles_dir / "main.css", "r") as file:
|
| 28 |
css_code = file.read()
|
| 29 |
|
| 30 |
-
# Applying CSS
|
| 31 |
st.markdown(f"<style>{css_code}</style>", unsafe_allow_html=True)
|
| 32 |
side = st.sidebar
|
| 33 |
|
|
|
|
| 21 |
layout="wide",
|
| 22 |
initial_sidebar_state="expanded",
|
| 23 |
)
|
|
|
|
| 24 |
support_arabic_text(all=True)
|
|
|
|
| 25 |
with open(styles_dir / "main.css", "r") as file:
|
| 26 |
css_code = file.read()
|
| 27 |
|
|
|
|
| 28 |
st.markdown(f"<style>{css_code}</style>", unsafe_allow_html=True)
|
| 29 |
side = st.sidebar
|
| 30 |
|
styles/main.css
CHANGED
|
@@ -47,7 +47,7 @@ ul {
|
|
| 47 |
/* Style hr element */
|
| 48 |
hr {
|
| 49 |
margin-top: 16px;
|
| 50 |
-
margin-bottom:
|
| 51 |
}
|
| 52 |
|
| 53 |
/* Headings */
|
|
@@ -57,15 +57,22 @@ h1 {
|
|
| 57 |
text-align: center;
|
| 58 |
direction: rtl;
|
| 59 |
padding-bottom: 30px;
|
|
|
|
| 60 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 61 |
|
|
|
|
| 62 |
/* Body */
|
| 63 |
body {
|
| 64 |
/*background-color: #f0f2f6;*/
|
| 65 |
font-family: 'IRANSans', sans-serif;
|
| 66 |
text-align: right;
|
| 67 |
direction: rtl;
|
| 68 |
-
padding-top:
|
| 69 |
background-Color:#1c223f;
|
| 70 |
|
| 71 |
secondaryBackgroundColor:#1c223f;
|
|
@@ -142,20 +149,6 @@ body {
|
|
| 142 |
padding: .5rem; /* فضای داخلی */
|
| 143 |
margin: .5%; /* فضای بیرونی */
|
| 144 |
}
|
| 145 |
-
|
| 146 |
-
.st-emotion-cache-1acdeck {
|
| 147 |
-
all: unset;
|
| 148 |
-
text-align: center;
|
| 149 |
-
direction: rtl;
|
| 150 |
-
font-size: 30px !important;
|
| 151 |
-
font-family: 'IRANSans', sans-serif;
|
| 152 |
-
border-radius: 5px;
|
| 153 |
-
border-color: #1184e6;
|
| 154 |
-
margin-top: 1%;
|
| 155 |
-
}
|
| 156 |
-
/*background-color:
|
| 157 |
-
|
| 158 |
-
}
|
| 159 |
/* Hide Streamlit elements */
|
| 160 |
#MainMenu, footer, header {
|
| 161 |
visibility: hidden;
|
|
@@ -163,7 +156,16 @@ body {
|
|
| 163 |
st-emotion-cache-12rcsx5.e1nzilvr4{
|
| 164 |
padding-top: 2em !important;
|
| 165 |
}
|
| 166 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 167 |
[class^="st-emotion-cache-"]:active{
|
| 168 |
text-decoration: none;
|
| 169 |
font-weight: 800;
|
|
@@ -171,10 +173,88 @@ st-emotion-cache-12rcsx5.e1nzilvr4{
|
|
| 171 |
|
| 172 |
|
| 173 |
}
|
| 174 |
-
[class^="st-emotion-cache-"]:visited,
|
| 175 |
-
[class^="st-emotion-cache-"]:hover {
|
| 176 |
-
|
| 177 |
-
|
| 178 |
|
|
|
|
| 179 |
}
|
| 180 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 47 |
/* Style hr element */
|
| 48 |
hr {
|
| 49 |
margin-top: 16px;
|
| 50 |
+
margin-bottom: 16px;
|
| 51 |
}
|
| 52 |
|
| 53 |
/* Headings */
|
|
|
|
| 57 |
text-align: center;
|
| 58 |
direction: rtl;
|
| 59 |
padding-bottom: 30px;
|
| 60 |
+
font-size: 3rem;
|
| 61 |
}
|
| 62 |
+
p {
|
| 63 |
+
font-family: 'IRANSans', sans-serif;
|
| 64 |
+
text-align: right;
|
| 65 |
+
direction: rtl;
|
| 66 |
+
font-size: 1.1rem;
|
| 67 |
|
| 68 |
+
}
|
| 69 |
/* Body */
|
| 70 |
body {
|
| 71 |
/*background-color: #f0f2f6;*/
|
| 72 |
font-family: 'IRANSans', sans-serif;
|
| 73 |
text-align: right;
|
| 74 |
direction: rtl;
|
| 75 |
+
padding-top: 2rem;
|
| 76 |
background-Color:#1c223f;
|
| 77 |
|
| 78 |
secondaryBackgroundColor:#1c223f;
|
|
|
|
| 149 |
padding: .5rem; /* فضای داخلی */
|
| 150 |
margin: .5%; /* فضای بیرونی */
|
| 151 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 152 |
/* Hide Streamlit elements */
|
| 153 |
#MainMenu, footer, header {
|
| 154 |
visibility: hidden;
|
|
|
|
| 156 |
st-emotion-cache-12rcsx5.e1nzilvr4{
|
| 157 |
padding-top: 2em !important;
|
| 158 |
}
|
| 159 |
+
.st-emotion-cache-1jzia57.e1nzilvr2 {
|
| 160 |
+
padding-bottom: 20px;
|
| 161 |
+
margin-top: -50px;
|
| 162 |
+
font-size: 3rem;
|
| 163 |
+
|
| 164 |
+
|
| 165 |
+
}
|
| 166 |
+
|
| 167 |
+
|
| 168 |
+
/* General link styling for specific classes */
|
| 169 |
[class^="st-emotion-cache-"]:active{
|
| 170 |
text-decoration: none;
|
| 171 |
font-weight: 800;
|
|
|
|
| 173 |
|
| 174 |
|
| 175 |
}
|
| 176 |
+
[class^="st-emotion-cache-"]:visited,
|
| 177 |
+
[class^="st-emotion-cache-"]:hover {
|
| 178 |
+
text-decoration: none;
|
| 179 |
+
font-weight: 500;
|
| 180 |
|
| 181 |
+
}
|
| 182 |
}
|
| 183 |
|
| 184 |
+
|
| 185 |
+
|
| 186 |
+
|
| 187 |
+
|
| 188 |
+
|
| 189 |
+
/*.stSidebar {*/
|
| 190 |
+
/* padding: 2px !important;*/
|
| 191 |
+
/* background-color: #070E1C;*/
|
| 192 |
+
/*}*/
|
| 193 |
+
|
| 194 |
+
/*!* Icon *!*/
|
| 195 |
+
/*.stSidebar .icon {*/
|
| 196 |
+
/* color: orange;*/
|
| 197 |
+
/* font-size: 16px;*/
|
| 198 |
+
/*}*/
|
| 199 |
+
|
| 200 |
+
/*!* Nav link *!*/
|
| 201 |
+
/*.stSidebar .nav-link {*/
|
| 202 |
+
/* font-size: 16px;*/
|
| 203 |
+
/* text-align: left;*/
|
| 204 |
+
/* margin: 0px;*/
|
| 205 |
+
/*}*/
|
| 206 |
+
|
| 207 |
+
/*!* Hover color *!*/
|
| 208 |
+
/*.stSidebar .nav-link:hover {*/
|
| 209 |
+
/* --hover-color: #F30080;*/
|
| 210 |
+
/*}*/
|
| 211 |
+
|
| 212 |
+
/*!* Selected nav link *!*/
|
| 213 |
+
/*.stSidebar .nav-link-selected {*/
|
| 214 |
+
/* background-color: #070E1C;*/
|
| 215 |
+
/*}*/
|
| 216 |
+
/*a {*/
|
| 217 |
+
/* text-decoration: none;*/
|
| 218 |
+
/* color: white !important;*/
|
| 219 |
+
/* font-weight: 500;*/
|
| 220 |
+
/*}*/
|
| 221 |
+
|
| 222 |
+
/*a:hover {*/
|
| 223 |
+
/* color: #d33682 !important;*/
|
| 224 |
+
/* text-decoration: none;*/
|
| 225 |
+
/*}*/
|
| 226 |
+
|
| 227 |
+
/*ul {list-style-type: none;}*/
|
| 228 |
+
|
| 229 |
+
/*hr {*/
|
| 230 |
+
/* margin-top: 0;*/
|
| 231 |
+
/* margin-bottom: 5%;*/
|
| 232 |
+
/*}*/
|
| 233 |
+
/*!* style.css *!*/
|
| 234 |
+
/*h1 {*/
|
| 235 |
+
/* background-color: #d60222;*/
|
| 236 |
+
/* font-family: 'IRANSans', sans-serif;*/
|
| 237 |
+
/* text-align: center;*/
|
| 238 |
+
/* direction: rtl;*/
|
| 239 |
+
/* padding-bottom: 30px;*/
|
| 240 |
+
/*}*/
|
| 241 |
+
|
| 242 |
+
/*body {*/
|
| 243 |
+
/* background-color: #f0f2f6;*/
|
| 244 |
+
/* font-family: 'IRANSans', sans-serif;*/
|
| 245 |
+
/* text-align: right;*/
|
| 246 |
+
/* direction: rtl;*/
|
| 247 |
+
/* padding-top: 50px;*/
|
| 248 |
+
/*}*/
|
| 249 |
+
|
| 250 |
+
/*.stButton>button {*/
|
| 251 |
+
/* background-color: #4CAF50;*/
|
| 252 |
+
/* color: white;*/
|
| 253 |
+
/* border-radius: 5px;*/
|
| 254 |
+
/* padding: 1rem;*/
|
| 255 |
+
/* margin: .5em !important;*/
|
| 256 |
+
/*}*/
|
| 257 |
+
|
| 258 |
+
/*#MainMenu {visibility: hidden;}*/
|
| 259 |
+
/*footer {visibility: hidden;}*/
|
| 260 |
+
/*header {visibility: hidden;}*/
|