This commit is contained in:
Prayoga K. I. 2026-06-14 10:26:15 +07:00
parent d4b3a2d399
commit 16282861de
5 changed files with 16 additions and 14 deletions

6
.env
View File

@ -1,9 +1,11 @@
# MySQL Database Configuration
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_USER=kali
DB_PASSWORD=asu
DB_USER=root
DB_PASSWORD=
DB_NAME=deteksi_pmk
# Flask Configuration
FLASK_SECRET=deteksi-pmk-secret-key-2026
FLASK_DEBUG=1

View File

@ -232,7 +232,7 @@ expert_diseases
-- Aturan forward chaining (5 aturan)
expert_rules
id INT AUTO_INCREMENT PK
code VARCHAR(20) UNIQUE -- FC01FC04
code VARCHAR(20) UNIQUE -- FC01FC05
symptom_codes TEXT -- JSON array of symptom codes
result_disease_code VARCHAR(10) FK → expert_diseases.code
description TEXT
@ -262,12 +262,12 @@ expert_rules_expert_symptoms
- P03 = PMK_LAKTASI (gejala ambing)
- P05 = PMK_AKUT_GENERAL (gejala umum berat)
**4 Aturan (FC01FC04):**
**5 Aturan (FC01FC05):**
- FC01 → P01 (oral): [G01, G02, G03, G04, G11, G18, G19, G20, G21]
- FC02 → P02 (podal): [G01, G02, G05, G06, G15, G22, G23, G24, G25]
- FC03 → P03 (laktasi): [G01, G02, G07, G08, G09, G26, G27]
- FC04 → P05 (akut umum): [G01, G02, G03, G04, G05, G06, G07, G09, G11, G12, G14, G18, G20, G22, G23, G24, G26]
- FC05 → P05 (akut umum): [G01, G02, G03, G04, G05, G06, G07, G09, G11, G12, G14, G18, G20, G22, G23, G24, G26]
> **Auto-check gejala dari hasil deteksi gambar** (di `app.py:pmk_to_symptoms`):
> Mapping ini digunakan saat redirect ke expert system via mode=image. Hanya gejala spesifik body part yang diikutkan (tanpa gejala umum):

4
app.py
View File

@ -811,7 +811,7 @@ def expert_system_page():
# Jika ada hasil prediksi berbasis image processing sebelumnya, tambahkan ke konteks
last_prediction = session.get('last_prediction', {})
upload_images = session.get('upload_images_data', [])
upload_images = session.get('upload_images_data', []) if use_image_context else []
image_info = None
if use_image_context and last_prediction.get('source') == 'image_processing':
image_info = {
@ -839,7 +839,7 @@ def expert_system_page():
# Ambil informasi gambar dari session jika hasil sebelumnya berasal dari image processing
last_prediction = session.get('last_prediction', {})
upload_images = session.get('upload_images_data', [])
upload_images = session.get('upload_images_data', []) if use_image_context else []
image_info = None
if use_image_context and last_prediction.get('source') == 'image_processing':
image_info = {

View File

@ -167,7 +167,7 @@ class ForwardChaining:
matched_rules = stats['matched_rules']
avg_coverage = stats['coverage_sum'] / matched_rules if matched_rules else 0.0
support_ratio = matched_rules / total_rules
evidence_strength = min(stats['best_matched_count'] / 4.0, 1.0)
evidence_strength = stats['best_matched_count'] / max(len(self.kb.gejala), 1)
exact_bonus = 0.10 if stats['exact_rules'] > 0 else 0.0
combined_score = (
@ -180,7 +180,7 @@ class ForwardChaining:
combined_score = min(combined_score, 0.99)
if combined_score >= min_score_threshold:
self.hasil[penyakit] = combined_score
self.hasil[penyakit] = (combined_score, stats['best_matched_count'])
self.disease_evidence = disease_evidence
@ -203,7 +203,7 @@ class ForwardChaining:
}
# Urutkan hasil dari yang paling cocok
hasil_urut = sorted(hasil_inferensi.items(), key=lambda x: x[1], reverse=True)
hasil_urut = sorted(hasil_inferensi.items(), key=lambda x: (x[1][0], x[1][1]), reverse=True)
# Pemetaan tingkat keparahan
severity_map = {
@ -214,7 +214,7 @@ class ForwardChaining:
}
diagnosis = []
for kode_penyakit, score in hasil_urut:
for kode_penyakit, (score, _matched_count) in hasil_urut:
penyakit = self.kb.penyakit[kode_penyakit]
relevant_aliases = DISEASE_ALIAS_MAP.get(kode_penyakit, {kode_penyakit})
evidence_rules = [rule for rule in self.matched_rules if rule['hasil'] in relevant_aliases]
@ -237,7 +237,7 @@ class ForwardChaining:
'semua_diagnosis': diagnosis # Will be populated after all diagnosis generated
})
filtered_diagnosis = diagnosis[:1]
filtered_diagnosis = diagnosis[:5]
# Isi daftar hasil untuk ditampilkan ke pengguna
for diag in filtered_diagnosis:

View File

@ -273,7 +273,7 @@ DEFAULT_EXPERT_RULES = [
'display_order': 3,
},
{
'code': 'FC04',
'code': 'FC05',
'symptom_codes': ['G01', 'G02', 'G03', 'G04', 'G05', 'G06', 'G07', 'G09', 'G11', 'G12', 'G14', 'G18', 'G20', 'G22', 'G23', 'G24', 'G26'],
'result_disease_code': 'P05',
'description': 'PMK akut: demam, air liur berlebihan, luka mulut, nyeri setelah lepuh pecah, lepuh kaki/kuku, lepuh puting, produksi susu menurun, nafsu makan turun, lesu, lepuh moncong, luka meluas, edema/radang, bengkak celah kuku, telapak kaki longgar, dan puting retak',