Seicas commited on
Commit
acabbdd
·
verified ·
1 Parent(s): ef80a92

Upload 4 files

Browse files
Files changed (4) hide show
  1. medical_terms.py +185 -0
  2. model_singleton.py +14 -0
  3. secure_config.py +29 -0
  4. 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