get(); // Menyimpan nilai similarity untuk setiap penyakit $similarities = []; // Menyimpan total bobot rule untuk setiap penyakit $totalBobotRulePenyakit = []; // Loop melalui aturan untuk menghitung similarity dan total bobot rule penyakit foreach ($rules as $rule) { $penyakit = $rule->kode_penyakit; $weight = $rule->nilai_cf; // Menggunakan kolom nilai_cf sebagai bobot gejala // Hitung total bobot rule penyakit if (!isset($totalBobotRulePenyakit[$penyakit])) { // Ambil semua aturan untuk penyakit ini dan hitung total bobotnya $totalBobotRulePenyakit[$penyakit] = Aturan::where('kode_penyakit', $penyakit) ->sum('nilai_cf'); } // Jika penyakit sudah ada dalam array similarities, tambahkan nilai similarity if (isset($similarities[$penyakit])) { $similarities[$penyakit] += $weight; // Tambahkan bobot gejala relevan } else { $similarities[$penyakit] = $weight; // Inisialisasi similarity } } // Hitung similarity berdasarkan formula baru $results = []; foreach ($similarities as $kode_penyakit => $similarityScore) { $penyakit = Penyakit::find($kode_penyakit); if ($penyakit) { // Total bobot rule penyakit sebagai penyebut $totalBobotPenyakit = $totalBobotRulePenyakit[$kode_penyakit] ?? 0; // Hitung similarity $similarity = ($totalBobotPenyakit > 0) ? round(($similarityScore / $totalBobotPenyakit) * 100, 2) : 0; $results[] = [ 'penyakit' => $penyakit, 'confidence_score' => $similarity // Persentase similarity ]; } } // Urutkan hasil dari yang paling tinggi ke rendah usort($results, function ($a, $b) { return $b['confidence_score'] <=> $a['confidence_score']; }); return $results; } }