Update recommendation_builder.py
Browse files- recommendation_builder.py +12 -6
recommendation_builder.py
CHANGED
|
@@ -27,8 +27,8 @@ CLAUSES_FALLBACK = {
|
|
| 27 |
"tinggi": "rekam IPK kumulatif yang solid",
|
| 28 |
},
|
| 29 |
"Jumlah_MK_Gagal": {
|
| 30 |
-
"rendah": "rekam jejak mata kuliah yang
|
| 31 |
-
"tinggi": "adanya beban mata kuliah gagal
|
| 32 |
},
|
| 33 |
"Total_SKS_Gagal": {
|
| 34 |
"rendah": "minimnya SKS yang terbuang",
|
|
@@ -42,6 +42,10 @@ CLAUSES_FALLBACK = {
|
|
| 42 |
"rendah": "jumlah SKS yang masih di bawah target progres studi",
|
| 43 |
"tinggi": "kemajuan pengambilan SKS yang sejalan dengan rencana studi",
|
| 44 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
| 45 |
}
|
| 46 |
|
| 47 |
# --- KATA SAMBUNG ---
|
|
@@ -128,12 +132,12 @@ def _get_dynamic_clause(feature: str, condition: str, value: float) -> str:
|
|
| 128 |
if value < 2.5:
|
| 129 |
return "capaian IPS semester terakhir yang sedikit membaik namun masih rawan"
|
| 130 |
elif value < 3.0:
|
| 131 |
-
# Ini akan menangkap 2.62
|
| 132 |
return "capaian IPS semester terakhir yang cukup aman"
|
| 133 |
else:
|
| 134 |
return "capaian IPS semester terakhir yang sangat memuaskan"
|
| 135 |
else: # DT bilang "rendah"
|
| 136 |
-
return "capaian IPS semester terakhir yang
|
| 137 |
|
| 138 |
# 2. IPK Terakhir (Skala 0-4)
|
| 139 |
elif feature == "IPK_Terakhir":
|
|
@@ -142,6 +146,7 @@ def _get_dynamic_clause(feature: str, condition: str, value: float) -> str:
|
|
| 142 |
# Ini akan menangkap 2.15
|
| 143 |
return "IPK kumulatif yang baru saja lolos ambang batas kritis"
|
| 144 |
elif value < 3.0:
|
|
|
|
| 145 |
return "IPK kumulatif yang tergolong cukup baik"
|
| 146 |
else:
|
| 147 |
return "IPK kumulatif yang sangat solid"
|
|
@@ -162,12 +167,13 @@ def _get_dynamic_clause(feature: str, condition: str, value: float) -> str:
|
|
| 162 |
if value < 3:
|
| 163 |
return f"adanya {int(value)} mata kuliah gagal yang perlu segera diulang"
|
| 164 |
else:
|
|
|
|
| 165 |
return f"adanya beban {int(value)} mata kuliah gagal yang menumpuk"
|
| 166 |
|
| 167 |
# 4. Tren
|
| 168 |
elif feature == "Tren_IPS_Slope":
|
| 169 |
if condition == "tinggi":
|
| 170 |
-
if value < 0.
|
| 171 |
return "tren performa yang cukup membaik"
|
| 172 |
else:
|
| 173 |
return "tren peningkatan nilai yang konsisten"
|
|
@@ -251,5 +257,5 @@ def generate_recommendation_paragraph(prediction_val: str, structured_rules: Lis
|
|
| 251 |
# 4️⃣ Gabungkan template + hasil stitching
|
| 252 |
# Format: [Paragraf Statis] + [Paragraf Dinamis]
|
| 253 |
# \n\n digunakan untuk membuat paragraf baru
|
| 254 |
-
final_text = f"{base_text}{dynamic_part}"
|
| 255 |
return final_text
|
|
|
|
| 27 |
"tinggi": "rekam IPK kumulatif yang solid",
|
| 28 |
},
|
| 29 |
"Jumlah_MK_Gagal": {
|
| 30 |
+
"rendah": "rekam jejak mata kuliah yang cukup baik",
|
| 31 |
+
"tinggi": "adanya beban mata kuliah gagal",
|
| 32 |
},
|
| 33 |
"Total_SKS_Gagal": {
|
| 34 |
"rendah": "minimnya SKS yang terbuang",
|
|
|
|
| 42 |
"rendah": "jumlah SKS yang masih di bawah target progres studi",
|
| 43 |
"tinggi": "kemajuan pengambilan SKS yang sejalan dengan rencana studi",
|
| 44 |
},
|
| 45 |
+
"Rentang_IPS": {
|
| 46 |
+
"rendah": "konsistensi performa yang stabil",
|
| 47 |
+
"tinggi": "fluktuasi performa yang tidak stabil"
|
| 48 |
+
}
|
| 49 |
}
|
| 50 |
|
| 51 |
# --- KATA SAMBUNG ---
|
|
|
|
| 132 |
if value < 2.5:
|
| 133 |
return "capaian IPS semester terakhir yang sedikit membaik namun masih rawan"
|
| 134 |
elif value < 3.0:
|
| 135 |
+
# Ini akan menangkap 2.62 dan 2.92
|
| 136 |
return "capaian IPS semester terakhir yang cukup aman"
|
| 137 |
else:
|
| 138 |
return "capaian IPS semester terakhir yang sangat memuaskan"
|
| 139 |
else: # DT bilang "rendah"
|
| 140 |
+
return "capaian IPS semester terakhir yang cukup rendah"
|
| 141 |
|
| 142 |
# 2. IPK Terakhir (Skala 0-4)
|
| 143 |
elif feature == "IPK_Terakhir":
|
|
|
|
| 146 |
# Ini akan menangkap 2.15
|
| 147 |
return "IPK kumulatif yang baru saja lolos ambang batas kritis"
|
| 148 |
elif value < 3.0:
|
| 149 |
+
# Ini akan menangkap 2.78
|
| 150 |
return "IPK kumulatif yang tergolong cukup baik"
|
| 151 |
else:
|
| 152 |
return "IPK kumulatif yang sangat solid"
|
|
|
|
| 167 |
if value < 3:
|
| 168 |
return f"adanya {int(value)} mata kuliah gagal yang perlu segera diulang"
|
| 169 |
else:
|
| 170 |
+
# Ini akan menangkap 4 Gagal
|
| 171 |
return f"adanya beban {int(value)} mata kuliah gagal yang menumpuk"
|
| 172 |
|
| 173 |
# 4. Tren
|
| 174 |
elif feature == "Tren_IPS_Slope":
|
| 175 |
if condition == "tinggi":
|
| 176 |
+
if value < 0.1: # Jika naiknya sedikit (kasus 0.066)
|
| 177 |
return "tren performa yang cukup membaik"
|
| 178 |
else:
|
| 179 |
return "tren peningkatan nilai yang konsisten"
|
|
|
|
| 257 |
# 4️⃣ Gabungkan template + hasil stitching
|
| 258 |
# Format: [Paragraf Statis] + [Paragraf Dinamis]
|
| 259 |
# \n\n digunakan untuk membuat paragraf baru
|
| 260 |
+
final_text = f"{base_text}\n\n{dynamic_part}"
|
| 261 |
return final_text
|