Files
mf-kecerdasan-buatan-10/search.py
T
2026-11-02 11:32:33 +07:00

46 lines
1.9 KiB
Python

from main import koleksi
# Lab 2 — 5 Pertanyaan langsung sesuai isi dokumen
PERTANYAAN_UTAMA = [
"Apa syarat cuti akademik?",
"Berapa batas kehadiran minimal untuk mengikuti ujian akhir semester?",
"Berapa beban maksimal SKS yang dapat diambil dalam satu semester?",
"Apa syarat IPK minimal untuk mengambil mata kuliah Skripsi?",
"Berapa lama batas waktu maksimal masa studi program sarjana?",
]
# Lab 2 — 2 Pertanyaan dengan kata berbeda dari teks dokumen (parafrase)
PERTANYAAN_PARAFRASE = [
# Parafrase dari "cuti akademik" -> "berhenti kuliah sementara waktu"
"Bagaimana prosedur jika mahasiswa ingin berhenti kuliah sementara waktu?",
# Parafrase dari "batas kehadiran 75 persen untuk ujian" -> "jarang masuk kelas apakah boleh ikut UAS"
"Jika mahasiswa sering absen kelas, berapa minimal presensi supaya tetap diizinkan ikut UAS?",
]
def cari_dan_tampilkan(daftar_pertanyaan, judul, n_results=3):
print("=" * 70)
print(judul)
print("=" * 70)
for idx, pertanyaan in enumerate(daftar_pertanyaan, start=1):
print(f"\nQ{idx}: {pertanyaan}")
hasil = koleksi.query(query_texts=[pertanyaan], n_results=n_results)
for rank, (doc, meta, jarak) in enumerate(
zip(hasil["documents"][0], hasil["metadatas"][0], hasil["distances"][0]),
start=1,
):
cuplikan = doc[:200].replace("\n", " ")
print(f" #{rank} [{meta['sumber']} · chunk {meta['chunk']}] jarak={jarak:.3f}")
print(f" {cuplikan} ...")
if __name__ == "__main__":
if koleksi.count() == 0:
print("Koleksi masih kosong. Jalankan `python main.py` terlebih dahulu setelah mengisi folder `dokumen/`.")
else:
cari_dan_tampilkan(PERTANYAAN_UTAMA, "LAB 2 (BAGIAN 2) — 5 PERTANYAAN PENCARIAN")
print()
cari_dan_tampilkan(PERTANYAAN_PARAFRASE, "LAB 2 (BAGIAN 3) — 2 PERTANYAAN PARAFRASE (SEMANTIC SEARCH)")