Spaces:
Running
Running
Upload 4 files
Browse files- medical_terms.py +185 -0
- model_singleton.py +14 -0
- secure_config.py +29 -0
- secure_storage.py +115 -0
medical_terms.py
ADDED
@@ -0,0 +1,185 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
def load_turkish_medical_terms():
|
2 |
+
"""Türkçe tıbbi terimleri yükler"""
|
3 |
+
return {
|
4 |
+
# Kardiyoloji
|
5 |
+
"miyokard infarktüsü": "miyokard infarktüsü",
|
6 |
+
"anjiyografi": "anjiyografi",
|
7 |
+
"hipertansiyon": "hipertansiyon",
|
8 |
+
"aritmi": "aritmi",
|
9 |
+
"taşikardi": "taşikardi",
|
10 |
+
"bradikardi": "bradikardi",
|
11 |
+
"ateroskleroz": "ateroskleroz",
|
12 |
+
|
13 |
+
# Nöroloji
|
14 |
+
"serebrovasküler": "serebrovasküler",
|
15 |
+
"ensefalopati": "ensefalopati",
|
16 |
+
"epilepsi": "epilepsi",
|
17 |
+
"nöropati": "nöropati",
|
18 |
+
"migren": "migren",
|
19 |
+
|
20 |
+
# Pulmoner
|
21 |
+
"pnömoni": "pnömoni",
|
22 |
+
"kronik obstrüktif akciğer hastalığı": "kronik obstrüktif akciğer hastalığı",
|
23 |
+
"pulmoner emboli": "pulmoner emboli",
|
24 |
+
"astım": "astım",
|
25 |
+
"bronşit": "bronşit",
|
26 |
+
|
27 |
+
# Gastroenteroloji
|
28 |
+
"gastrit": "gastrit",
|
29 |
+
"ülseratif kolit": "ülseratif kolit",
|
30 |
+
"hepatit": "hepatit",
|
31 |
+
"siroz": "siroz",
|
32 |
+
"kolesistit": "kolesistit",
|
33 |
+
|
34 |
+
# Genel terimler
|
35 |
+
"anamnez": "anamnez",
|
36 |
+
"prognoz": "prognoz",
|
37 |
+
"etiyoloji": "etiyoloji",
|
38 |
+
"remisyon": "remisyon",
|
39 |
+
"palpasyon": "palpasyon",
|
40 |
+
"auskültasyon": "auskültasyon",
|
41 |
+
|
42 |
+
# Laboratuvar terimleri
|
43 |
+
"hemogram": "hemogram",
|
44 |
+
"biyokimya": "biyokimya",
|
45 |
+
"elektrolit": "elektrolit",
|
46 |
+
"sedimantasyon": "sedimantasyon",
|
47 |
+
"troponin": "troponin",
|
48 |
+
|
49 |
+
# İlaç terimleri
|
50 |
+
"antihipertansif": "antihipertansif",
|
51 |
+
"antibiyotik": "antibiyotik",
|
52 |
+
"antikoagülan": "antikoagülan",
|
53 |
+
"antiaritmik": "antiaritmik",
|
54 |
+
"analjezik": "analjezik",
|
55 |
+
|
56 |
+
# Pediatri - Genel Terimler
|
57 |
+
"büyüme-gelişme": "büyüme-gelişme",
|
58 |
+
"persentil": "persentil",
|
59 |
+
"büyüme eğrisi": "büyüme eğrisi",
|
60 |
+
"baş çevresi": "baş çevresi",
|
61 |
+
"antropometri": "antropometri",
|
62 |
+
"boy uzunluğu": "boy uzunluğu",
|
63 |
+
"vücut ağırlığı": "vücut ağırlığı",
|
64 |
+
"psikomotor gelişim": "psikomotor gelişim",
|
65 |
+
"puberte": "puberte",
|
66 |
+
"fontanel": "fontanel",
|
67 |
+
"süt çocuğu": "süt çocuğu",
|
68 |
+
"yenidoğan": "yenidoğan",
|
69 |
+
"prematüre": "prematüre",
|
70 |
+
"term bebek": "term bebek",
|
71 |
+
"postterm bebek": "postterm bebek",
|
72 |
+
"gestasyonel yaş": "gestasyonel yaş",
|
73 |
+
|
74 |
+
# Pediatrik Hastalıklar
|
75 |
+
"otitis media": "otitis media",
|
76 |
+
"krup": "krup",
|
77 |
+
"bronşiolit": "bronşiolit",
|
78 |
+
"gastroenterit": "gastroenterit",
|
79 |
+
"rotavirüs": "rotavirüs",
|
80 |
+
"akut tonsillit": "akut tonsillit",
|
81 |
+
"febril konvülsiyon": "febril konvülsiyon",
|
82 |
+
"egzema": "egzema",
|
83 |
+
"atopik dermatit": "atopik dermatit",
|
84 |
+
"kızamık": "kızamık",
|
85 |
+
"suçiçeği": "suçiçeği",
|
86 |
+
"kabakulak": "kabakulak",
|
87 |
+
"kızamıkçık": "kızamıkçık",
|
88 |
+
"el-ayak-ağız hastalığı": "el-ayak-ağız hastalığı",
|
89 |
+
"beşinci hastalık": "beşinci hastalık",
|
90 |
+
"altıncı hastalık": "altıncı hastalık",
|
91 |
+
"kawasaki hastalığı": "kawasaki hastalığı",
|
92 |
+
"akut romatizmal ateş": "akut romatizmal ateş",
|
93 |
+
"henoch-schönlein purpurası": "henoch-schönlein purpurası",
|
94 |
+
"idiyopatik trombositopenik purpura": "idiyopatik trombositopenik purpura",
|
95 |
+
|
96 |
+
# Yenidoğan Hastalıkları
|
97 |
+
"respiratuvar distres sendromu": "respiratuvar distres sendromu",
|
98 |
+
"mekonyum aspirasyon sendromu": "mekonyum aspirasyon sendromu",
|
99 |
+
"yenidoğan sarılığı": "yenidoğan sarılığı",
|
100 |
+
"hiperbilirubinemi": "hiperbilirubinemi",
|
101 |
+
"nekrotizan enterokolit": "nekrotizan enterokolit",
|
102 |
+
"perinatal asfiksi": "perinatal asfiksi",
|
103 |
+
"intrakraniyal kanama": "intrakraniyal kanama",
|
104 |
+
"konjenital kalp hastalığı": "konjenital kalp hastalığı",
|
105 |
+
"patent duktus arteriyozus": "patent duktus arteriyozus",
|
106 |
+
"hipospadias": "hipospadias",
|
107 |
+
"konjenital hipotiroidi": "konjenital hipotiroidi",
|
108 |
+
"fenilketonüri": "fenilketonüri",
|
109 |
+
|
110 |
+
# Pediatrik Beslenmede Kullanılan Terimler
|
111 |
+
"anne sütü": "anne sütü",
|
112 |
+
"emzirme": "emzirme",
|
113 |
+
"formül mama": "formül mama",
|
114 |
+
"ek besin": "ek besin",
|
115 |
+
"malnutrisyon": "malnutrisyon",
|
116 |
+
"demir eksikliği anemisi": "demir eksikliği anemisi",
|
117 |
+
"rickets": "rickets",
|
118 |
+
"vitamin D eksikliği": "vitamin D eksikliği",
|
119 |
+
"kolik": "kolik",
|
120 |
+
"disfaji": "disfaji",
|
121 |
+
"reflü": "reflü",
|
122 |
+
"gastroözofageal reflü": "gastroözofageal reflü",
|
123 |
+
|
124 |
+
# Pediatrik Aşılar
|
125 |
+
"bağışıklama": "bağışıklama",
|
126 |
+
"aşı takvimi": "aşı takvimi",
|
127 |
+
"BCG aşısı": "BCG aşısı",
|
128 |
+
"hepatit B aşısı": "hepatit B aşısı",
|
129 |
+
"DaBT-İPA-Hib aşısı": "DaBT-İPA-Hib aşısı",
|
130 |
+
"KPA aşısı": "KPA aşısı",
|
131 |
+
"OPA aşısı": "OPA aşısı",
|
132 |
+
"KKK aşısı": "KKK aşısı",
|
133 |
+
"suçiçeği aşısı": "suçiçeği aşısı",
|
134 |
+
"hepatit A aşısı": "hepatit A aşısı",
|
135 |
+
"influenza aşısı": "influenza aşısı",
|
136 |
+
"rotavirüs aşısı": "rotavirüs aşısı",
|
137 |
+
"HPV aşısı": "HPV aşısı",
|
138 |
+
"meningokok aşısı": "meningokok aşısı",
|
139 |
+
|
140 |
+
# Pediatrik Acil Durumlar
|
141 |
+
"status epileptikus": "status epileptikus",
|
142 |
+
"dehidratasyon": "dehidratasyon",
|
143 |
+
"anafilaksi": "anafilaksi",
|
144 |
+
"invajinasyon": "invajinasyon",
|
145 |
+
"yabancı cisim aspirasyonu": "yabancı cisim aspirasyonu",
|
146 |
+
"zehirlenme": "zehirlenme",
|
147 |
+
"kafa travması": "kafa travması",
|
148 |
+
"çocuk istismarı": "çocuk istismarı",
|
149 |
+
"diyabetik ketoasidoz": "diyabetik ketoasidoz",
|
150 |
+
"akut astım atağı": "akut astım atağı",
|
151 |
+
"laringomalazi": "laringomalazi",
|
152 |
+
|
153 |
+
# Pediatrik İlaçlar ve Dozajlar
|
154 |
+
"amoksisilin": "amoksisilin",
|
155 |
+
"amoksisilin-klavulanat": "amoksisilin-klavulanat",
|
156 |
+
"azithromisin": "azithromisin",
|
157 |
+
"klaritromisin": "klaritromisin",
|
158 |
+
"sefiksim": "sefiksim",
|
159 |
+
"sefuroksim": "sefuroksim",
|
160 |
+
"parasetamol": "parasetamol",
|
161 |
+
"ibuprofen": "ibuprofen",
|
162 |
+
"prednizolon": "prednizolon",
|
163 |
+
"salbutamol": "salbutamol",
|
164 |
+
"flutikazon": "flutikazon",
|
165 |
+
"montelukast": "montelukast",
|
166 |
+
"setirizin": "setirizin",
|
167 |
+
"desloratadin": "desloratadin",
|
168 |
+
"nöbetrit": "nöbetrit",
|
169 |
+
"probiyotik": "probiyotik",
|
170 |
+
"laktuloz": "laktuloz",
|
171 |
+
"dekspantenol": "dekspantenol",
|
172 |
+
"D vitamini": "D vitamini",
|
173 |
+
"demir preparatı": "demir preparatı",
|
174 |
+
|
175 |
+
# Pediatrik Muayene Terimleri
|
176 |
+
"Moro refleksi": "Moro refleksi",
|
177 |
+
"yakalama refleksi": "yakalama refleksi",
|
178 |
+
"emme refleksi": "emme refleksi",
|
179 |
+
"babinski refleksi": "babinski refleksi",
|
180 |
+
"Denver gelişimsel tarama testi": "Denver gelişimsel tarama testi",
|
181 |
+
"otoskopik muayene": "otoskopik muayene",
|
182 |
+
"oral kavite muayenesi": "oral kavite muayenesi",
|
183 |
+
"retinoskopi": "retinoskopi",
|
184 |
+
"diz kapağı refleksi": "diz kapağı refleksi",
|
185 |
+
}
|
model_singleton.py
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import whisper
|
2 |
+
import torch
|
3 |
+
|
4 |
+
class WhisperModelSingleton:
|
5 |
+
_instance = None
|
6 |
+
_model = None
|
7 |
+
|
8 |
+
@staticmethod
|
9 |
+
def get_instance(model_name="whisper-large-v3"):
|
10 |
+
if WhisperModelSingleton._instance is None:
|
11 |
+
WhisperModelSingleton._instance = WhisperModelSingleton()
|
12 |
+
device = "cuda" if torch.cuda.is_available() else "cpu"
|
13 |
+
WhisperModelSingleton._model = whisper.load_model(model_name, device=device)
|
14 |
+
return WhisperModelSingleton._model
|
secure_config.py
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
from dotenv import load_dotenv
|
3 |
+
|
4 |
+
# .env dosyasını yükle
|
5 |
+
load_dotenv()
|
6 |
+
|
7 |
+
# Kritik değerler
|
8 |
+
HF_TOKEN = os.environ.get("HF_TOKEN")
|
9 |
+
ENCRYPTION_KEY = os.environ.get("ENCRYPTION_KEY")
|
10 |
+
|
11 |
+
# Değerler yoksa uyarı
|
12 |
+
if not HF_TOKEN:
|
13 |
+
import warnings
|
14 |
+
warnings.warn("HF_TOKEN bulunamadı! Diyarizasyon çalışmayacak.", UserWarning)
|
15 |
+
|
16 |
+
# SecureStorage için fallback mekanizması
|
17 |
+
def get_encryption_key():
|
18 |
+
key = os.environ.get("ENCRYPTION_KEY")
|
19 |
+
if not key:
|
20 |
+
# Sadece geliştirme ortamında ve key yoksa oluştur
|
21 |
+
if os.environ.get("ENVIRONMENT") == "development":
|
22 |
+
from cryptography.fernet import Fernet
|
23 |
+
key = Fernet.generate_key().decode()
|
24 |
+
# Sadece log dosyasına yaz, konsolda gösterme
|
25 |
+
import logging
|
26 |
+
logging.warning(f"YENİ ANAHTAR OLUŞTURULDU: {key}")
|
27 |
+
else:
|
28 |
+
raise ValueError("Üretim ortamında ENCRYPTION_KEY eksik!")
|
29 |
+
return key
|
secure_storage.py
ADDED
@@ -0,0 +1,115 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from cryptography.fernet import Fernet
|
2 |
+
import json
|
3 |
+
import os
|
4 |
+
import base64
|
5 |
+
import hashlib
|
6 |
+
from typing import Dict, Any, Optional
|
7 |
+
from datetime import datetime, timedelta
|
8 |
+
|
9 |
+
class SecureStorage:
|
10 |
+
"""Hassas verileri şifreleyerek saklamak için sınıf"""
|
11 |
+
|
12 |
+
def __init__(self, storage_dir: str = "./secure_data"):
|
13 |
+
"""
|
14 |
+
Args:
|
15 |
+
storage_dir: Şifreli verilerin saklanacağı dizin
|
16 |
+
"""
|
17 |
+
# Depolama dizinini oluştur
|
18 |
+
os.makedirs(storage_dir, exist_ok=True)
|
19 |
+
self.storage_dir = storage_dir
|
20 |
+
|
21 |
+
# Şifreleme anahtarı
|
22 |
+
self.key = os.environ.get("ENCRYPTION_KEY")
|
23 |
+
if not self.key:
|
24 |
+
# Anahtar yoksa, yeni bir anahtar oluştur ve kaydet
|
25 |
+
self.key = Fernet.generate_key().decode()
|
26 |
+
print(f"YENİ ŞİFRELEME ANAHTARI OLUŞTURULDU! Bunu güvenli bir yerde saklayın: {self.key}")
|
27 |
+
|
28 |
+
# Fernet şifreleme nesnesi
|
29 |
+
self.fernet = Fernet(self.key.encode() if isinstance(self.key, str) else self.key)
|
30 |
+
|
31 |
+
def store_data(self, data: Dict[str, Any], session_id: str, ttl_days: int = 30) -> str:
|
32 |
+
"""
|
33 |
+
Hassas verileri şifreleyerek saklar
|
34 |
+
|
35 |
+
Args:
|
36 |
+
data: Saklanacak veriler
|
37 |
+
session_id: Benzersiz oturum kimliği
|
38 |
+
ttl_days: Verilerin saklanacağı süre (gün)
|
39 |
+
|
40 |
+
Returns:
|
41 |
+
Dosya yolu
|
42 |
+
"""
|
43 |
+
# Meta verileri ekle
|
44 |
+
data_with_meta = {
|
45 |
+
"data": data,
|
46 |
+
"created_at": datetime.now().isoformat(),
|
47 |
+
"expires_at": (datetime.now() + timedelta(days=ttl_days)).isoformat(),
|
48 |
+
"session_id": session_id
|
49 |
+
}
|
50 |
+
|
51 |
+
# JSON'a dönüştür ve şifrele
|
52 |
+
json_data = json.dumps(data_with_meta)
|
53 |
+
encrypted_data = self.fernet.encrypt(json_data.encode())
|
54 |
+
|
55 |
+
# Dosyaya kaydet
|
56 |
+
file_path = os.path.join(self.storage_dir, f"{session_id}.enc")
|
57 |
+
with open(file_path, "wb") as f:
|
58 |
+
f.write(encrypted_data)
|
59 |
+
|
60 |
+
return file_path
|
61 |
+
|
62 |
+
def retrieve_data(self, session_id: str) -> Optional[Dict[str, Any]]:
|
63 |
+
"""
|
64 |
+
Şifreli verileri getirir ve çözer
|
65 |
+
|
66 |
+
Args:
|
67 |
+
session_id: Benzersiz oturum kimliği
|
68 |
+
|
69 |
+
Returns:
|
70 |
+
Çözülmüş veriler veya None (eğer yoksa)
|
71 |
+
"""
|
72 |
+
file_path = os.path.join(self.storage_dir, f"{session_id}.enc")
|
73 |
+
|
74 |
+
if not os.path.exists(file_path):
|
75 |
+
return None
|
76 |
+
|
77 |
+
try:
|
78 |
+
# Şifreli veriyi oku
|
79 |
+
with open(file_path, "rb") as f:
|
80 |
+
encrypted_data = f.read()
|
81 |
+
|
82 |
+
# Şifreyi çöz
|
83 |
+
decrypted_data = self.fernet.decrypt(encrypted_data).decode()
|
84 |
+
data_with_meta = json.loads(decrypted_data)
|
85 |
+
|
86 |
+
# Süre kontrolü
|
87 |
+
expires_at = datetime.fromisoformat(data_with_meta["expires_at"])
|
88 |
+
if datetime.now() > expires_at:
|
89 |
+
# Süresi dolmuş veriler
|
90 |
+
os.remove(file_path) # Dosyayı sil
|
91 |
+
return None
|
92 |
+
|
93 |
+
return data_with_meta["data"]
|
94 |
+
|
95 |
+
except Exception as e:
|
96 |
+
print(f"Veri çözme hatası: {str(e)}")
|
97 |
+
return None
|
98 |
+
|
99 |
+
def delete_data(self, session_id: str) -> bool:
|
100 |
+
"""
|
101 |
+
Şifreli verileri siler
|
102 |
+
|
103 |
+
Args:
|
104 |
+
session_id: Benzersiz oturum kimliği
|
105 |
+
|
106 |
+
Returns:
|
107 |
+
Başarılı olup olmadığı
|
108 |
+
"""
|
109 |
+
file_path = os.path.join(self.storage_dir, f"{session_id}.enc")
|
110 |
+
|
111 |
+
if os.path.exists(file_path):
|
112 |
+
os.remove(file_path)
|
113 |
+
return True
|
114 |
+
|
115 |
+
return False
|