46 lines
1.9 KiB
Python
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)")
|
|
|
|
|