fix
This commit is contained in:
parent
a642eef7c4
commit
8d00213055
|
|
@ -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.
Loading…
Reference in New Issue