EigenPustaka: Sistem Perpustakaan Digital dengan Rekomendasi Semantik dan Pencarian Visual Berbasis SVD
Tugas Besar 2 IF2123 Aljabar Linier dan Geometri
Program Studi Teknik Informatika - Institut Teknologi Bandung
Semester I Tahun 2025/2026
| NIM | Nama |
|---|---|
| 13524012 | Tengku Naufal Saqib |
| 13523070 | A. Fawwaz Azam Wicaksono |
| 13523076 | Fayyaz Akmal Lauda |
EigenPustaka (Vectoria Library) adalah aplikasi perpustakaan digital modern yang menerapkan konsep Aljabar Linier untuk fitur pencarian dan rekomendasi cerdas. Aplikasi ini dibangun untuk membantu pengguna menemukan buku tidak hanya berdasarkan judul, tetapi juga berdasarkan kemiripan visual sampul dan relevansi topik konten.
Fitur utama yang diimplementasikan menggunakan algoritma matematis tanpa bantuan pustaka tingkat tinggi:
- Pencarian Visual (Image Search): Menggunakan Principal Component Analysis (PCA) untuk mereduksi dimensi gambar sampul dan Euclidean Distance untuk mencari kemiripan visual.
- Pencarian Semantik (Document Search): Menggunakan Latent Semantic Analysis (LSA) dengan teknik Fold-in untuk memproyeksikan dokumen kueri ke ruang laten dan mencari kesamaan topik.
- Sistem Rekomendasi: Memberikan rekomendasi buku terkait menggunakan Cosine Similarity pada vektor dokumen yang dihasilkan oleh SVD.
- Katalog Buku: Menampilkan daftar buku dengan paginasi yang efisien.
- Pencarian Judul: Pencarian berbasis teks (substring matching) untuk judul buku.
- Pencarian Gambar (PCA): Unggah gambar sampul untuk menemukan buku dengan desain sampul yang mirip. Menampilkan nilai Euclidean Distance (Jarak) sebagai indikator kemiripan.
- Pencarian Dokumen (LSA): Unggah file teks (.txt) untuk menemukan buku dengan topik/isi yang relevan. Menampilkan nilai Cosine Similarity (0-1) sebagai indikator relevansi.
- Detail Buku & Baca Cepat: Halaman detail yang menampilkan isi buku secara lengkap dengan antarmuka baca yang nyaman.
- Rekomendasi Cerdas: Pada halaman detail, sistem secara otomatis merekomendasikan 8 buku lain yang memiliki kemiripan topik tertinggi.
- Responsive UI/UX: Antarmuka modern yang responsif (Mobile & Desktop) dengan dukungan mode Carousel interaktif.
Frontend:
- React + Vite (TypeScript)
- Tailwind CSS (Styling)
- Framer Motion (Animasi)
- Lucide React (Ikon)
Backend:
- Python (FastAPI)
- NumPy (Komputasi Matriks & Vektor)
- NLTK (Preprocessing Teks: Stemming & Stopwords)
- Pillow (Pemrosesan Citra)
Algoritma Inti (Implementasi Manual):
- Singular Value Decomposition (SVD)
- Principal Component Analysis (PCA)
- TF-IDF Weighting
- Cosine Similarity & Euclidean Distance
.
├── data/ # Dataset (covers, txt, mapper.json) akan didownload ke sini
├── src/
│ ├── backend/
│ │ ├── api/ # Definisi Routes (search, books, recommend)
│ │ ├── artifacts/ # Model tersimpan (LSA: Uk, S, Vk | PCA: Mean, Eigenfaces)
│ │ ├── core/ # Implementasi Algoritma (SVD, LSA, PCA, Loader, Downloader)
│ │ │ ├── download_data.py
│ │ │ ├── pipeline.py
│ │ │ ├── lsa.py
│ │ │ └── pca.py
│ │ ├── main.py # Entry point FastAPI
│ │
│ └── frontend/
│ ├── src/
│ │ ├── components/ # Reusable UI (Navbar, BookGrid, Carousel)
│ │ ├── pages/ # Halaman Utama (Home, Upload, Detail)
│ │ └── App.tsx # Routing & State Management
│
├── requirements.txt # Dependensi Backend
└── README.md
Pastikan Anda telah menginstal Python 3.10+, Node.js, dan NPM.
Lakukan langkah ini di root directory proyek (algeo2-pak-rila-tolong-kami).
# 1. Buat virtual environment (Disarankan)
python -m venv .venv
# 2. Aktifkan virtual environment
# Windows:
.venv\Scripts\activate
# Mac/Linux:
source .venv/bin/activate
# 3. Instal dependensi backend
pip install -r requirements.txt
Anda wajib menjalankan skrip ini secara berurutan agar data tersedia sebelum server dijalankan.
Langkah A: Download Dataset
Skrip ini akan mengunduh dataset buku (teks & gambar sampul) dari Kaggle/Sumber eksternal ke dalam folder data/.
python src/backend/core/download_data.py
Langkah B: Training Model & Pipeline
Skrip ini akan memproses data mentah, menghitung matriks SVD & PCA, lalu menyimpan hasilnya sebagai file .npy di folder src/backend/artifacts/.
py -m src.backend.core.pipeline
Tunggu hingga proses selesai. Pastikan folder src/backend/artifacts terisi file .npy (seperti IDF.npy, Uk.npy, D_norm.npy) sebelum melanjutkan.
# Pastikan venv masih aktif
# Jalankan server FastAPI
python main.py
Server akan berjalan di http://localhost:8000. Tunggu hingga muncul pesan di terminal:
Startup: Artifacts berhasil dimuat.
Buka terminal baru (jangan matikan terminal backend).
# Masuk ke folder frontend
cd src/frontend
# Instal dependensi Node (hanya pertama kali)
npm install
# Jalankan mode pengembangan
npm run dev
Aplikasi akan berjalan di http://localhost:5173. Buka alamat tersebut di browser Anda untuk mulai menggunakan aplikasi.
- Format File: Sistem hanya menerima file .txt (UTF-8) untuk pencarian dokumen dan file gambar (.jpg, .png) untuk pencarian cover.
- Performa: Kecepatan pencarian bergantung pada spesifikasi mesin dan ukuran dataset. Untuk dataset 500+ buku, pencarian biasanya membutuhkan waktu < 1 detik setelah artifacts dimuat.
- Threshold: Slider ambang batas di halaman pencarian bersifat dinamis:
- PCA (Jarak): Semakin KECIL nilainya, semakin mirip.
- LSA (Similaritas): Semakin BESAR nilainya (mendekati 1.0), semakin mirip.
Dibuat dengan 💻 dan ☕ oleh Kelompok "Pak Rila Tolong Kami"