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.'
}
# 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)
# Pemetaan tingkat keparahan
@ -213,47 +213,35 @@ class ForwardChaining:
'P04': 'akut umum'
}
diagnosis = []
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})
# Ambil hanya diagnosis teratas (top-1)
top_kode = hasil_urut[0][0]
top_score = hasil_urut[0][1][0]
penyakit = self.kb.penyakit[top_kode]
relevant_aliases = DISEASE_ALIAS_MAP.get(top_kode, {top_kode})
evidence_rules = [rule for rule in self.matched_rules if rule['hasil'] in relevant_aliases]
if not evidence_rules:
all_evidence = list(self.disease_evidence.get(kode_penyakit, []))
all_evidence = list(self.disease_evidence.get(top_kode, []))
all_evidence.sort(key=lambda r: (r.get('coverage', 0.0), r.get('matched_count', 0)), reverse=True)
evidence_rules = all_evidence[:3]
diagnosis.append({
'kode': kode_penyakit,
'severity': severity_map.get(kode_penyakit, 'unknown'),
'nama': penyakit['nama'],
'deskripsi': penyakit['deskripsi'],
'solusi': penyakit['solusi'],
'score': score,
diag = {
'kode': top_kode,
'severity': severity_map.get(top_kode, 'unknown'),
'nama': penyakit.get('nama', ''),
'deskripsi': penyakit.get('deskripsi', ''),
'solusi': penyakit.get('solusi', []),
'score': top_score,
'persentase': round(float(top_score) * 100.0, 2),
'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]
# Isi daftar hasil untuk ditampilkan ke pengguna
for diag in filtered_diagnosis:
diag['persentase'] = round(float(diag['score']) * 100.0, 2)
diag['semua_diagnosis'] = [
{
'nama': d['nama'],
'severity': d['severity'],
'score': d['score']
'jumlah_bukti': len(evidence_rules)
}
for d in diagnosis
]
return {
'status': 'terdiagnosis',
'diagnosis': filtered_diagnosis,
'diagnosis': [diag],
'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.