This commit is contained in:
livindra 2026-06-15 05:14:13 +07:00
parent a642eef7c4
commit 8d00213055
4 changed files with 27 additions and 39 deletions

View File

@ -202,7 +202,7 @@ class ForwardChaining:
'message': 'Gejala yang dipilih masih belum cukup untuk menentukan PMK.' 'message': 'Gejala yang dipilih masih belum cukup untuk menentukan PMK.'
} }
# Urutkan hasil dari yang paling cocok # Urutkan hasil dari yang paling cocok dan ambil yang teratas saja
hasil_urut = sorted(hasil_inferensi.items(), key=lambda x: (x[1][0], x[1][1]), reverse=True) hasil_urut = sorted(hasil_inferensi.items(), key=lambda x: (x[1][0], x[1][1]), reverse=True)
# Pemetaan tingkat keparahan # Pemetaan tingkat keparahan
@ -213,47 +213,35 @@ class ForwardChaining:
'P04': 'akut umum' 'P04': 'akut umum'
} }
diagnosis = [] # Ambil hanya diagnosis teratas (top-1)
for kode_penyakit, (score, _matched_count) in hasil_urut: top_kode = hasil_urut[0][0]
penyakit = self.kb.penyakit[kode_penyakit] top_score = hasil_urut[0][1][0]
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]
if not evidence_rules: penyakit = self.kb.penyakit[top_kode]
all_evidence = list(self.disease_evidence.get(kode_penyakit, [])) relevant_aliases = DISEASE_ALIAS_MAP.get(top_kode, {top_kode})
all_evidence.sort(key=lambda r: (r.get('coverage', 0.0), r.get('matched_count', 0)), reverse=True) evidence_rules = [rule for rule in self.matched_rules if rule['hasil'] in relevant_aliases]
evidence_rules = all_evidence[:3]
diagnosis.append({ if not evidence_rules:
'kode': kode_penyakit, all_evidence = list(self.disease_evidence.get(top_kode, []))
'severity': severity_map.get(kode_penyakit, 'unknown'), all_evidence.sort(key=lambda r: (r.get('coverage', 0.0), r.get('matched_count', 0)), reverse=True)
'nama': penyakit['nama'], evidence_rules = all_evidence[:3]
'deskripsi': penyakit['deskripsi'],
'solusi': penyakit['solusi'],
'score': score,
'gejala_teramati': [g for g in self.fakta if g in self.kb.gejala],
'bukti_aturan': evidence_rules,
'jumlah_bukti': len(evidence_rules),
'semua_diagnosis': diagnosis # Will be populated after all diagnosis generated
})
filtered_diagnosis = diagnosis[:5] diag = {
'kode': top_kode,
# Isi daftar hasil untuk ditampilkan ke pengguna 'severity': severity_map.get(top_kode, 'unknown'),
for diag in filtered_diagnosis: 'nama': penyakit.get('nama', ''),
diag['persentase'] = round(float(diag['score']) * 100.0, 2) 'deskripsi': penyakit.get('deskripsi', ''),
diag['semua_diagnosis'] = [ 'solusi': penyakit.get('solusi', []),
{ 'score': top_score,
'nama': d['nama'], 'persentase': round(float(top_score) * 100.0, 2),
'severity': d['severity'], 'gejala_teramati': [g for g in self.fakta if g in self.kb.gejala],
'score': d['score'] 'bukti_aturan': evidence_rules,
} 'jumlah_bukti': len(evidence_rules)
for d in diagnosis }
]
return { return {
'status': 'terdiagnosis', 'status': 'terdiagnosis',
'diagnosis': filtered_diagnosis, 'diagnosis': [diag],
'gejala_teramati': [self.kb.gejala.get(g, g) for g in sorted(self.fakta)] 'gejala_teramati': [self.kb.gejala.get(g, g) for g in sorted(self.fakta)]
} }

Binary file not shown.

Binary file not shown.

Binary file not shown.