Tugas Besar 2 IF2123 Aljabar Linier dan Geometri
Aplikasi web pencarian buku menggunakan algoritma PCA (Principal Component Analysis) untuk pencarian berdasarkan cover dan LSA (Latent Semantic Analysis) untuk pencarian berdasarkan konten teks. Aplikasi ini memanfaatkan konsep aljabar linear untuk memberikan hasil pencarian yang akurat dan relevan dengan komputasi yang efisien.
- Pencarian Berdasarkan Judul - Cari buku dengan substring matching
- Pencarian Berdasarkan Cover (PCA) - Upload gambar cover untuk menemukan buku serupa
- Pencarian Berdasarkan Dokumen (LSA) - Upload file .txt untuk menemukan buku dengan konten serupa
- Rekomendasi Buku (LSA) - Dapatkan 5 buku ter mirip secara semantik
- UI Modern - Interface responsif dengan dark/light mode
- Performa Tinggi - Pre-computed embeddings untuk response time cepat
- Node.js (v14 atau lebih baru)
- Python 3.x
- Java Runtime Environment (JRE)
- npm atau yarn
- Clone repository
git clone https://github.com/IRK-23/algeo2-penunggangbabiliar.git
cd algeo2-penunggangbabiliar- Install dependensi Backend Python
cd src/backend
pip install -r dependency.txt
# atau gunakan virtual environment
python3 -m venv myenv
source myenv/bin/activate # macOS/Linux
# myenv\Scripts\activate # Windows
pip install -r dependency.txt- Install dependensi Frontend
cd ../frontend
npm installcd src/backend
python3 main.pyBackend berjalan di http://127.0.0.1:5000
** PENTING untuk pengguna macOS**: Port 5000 mungkin digunakan oleh Apple AirPlay. Jika backend tidak bisa diakses, nonaktifkan AirPlay Receiver di System Settings → Sharing → AirPlay Receiver.
cd src/frontend
npm run devFrontend berjalan di http://localhost:5173
Frontend:
cd src/frontend
npm run buildOutput: dist/ folder
Backend: Backend Python tidak perlu build, langsung jalankan dengan:
uvicorn main:app --host 0.0.0.0 --port 5000 --workers 4algeo2-penunggangbabiliar/
├── data/ # Dataset (523 buku)
│ ├── covers/ # Gambar cover buku
│ ├── txt/ # Konten teks buku
│ └── mapper.json # Metadata buku
│
├── src/
│ ├── backend/ # Python FastAPI Server
│ │ ├── main.py # FastAPI application
│ │ ├── preprocess.py # Preprocessing utilities
│ │ ├── mathlogic/ # Java implementation
│ │ │ ├── temubalikPCA/ # PCA algorithms
│ │ │ └── temubalikLSA/ # LSA algorithms
│ │ ├── preprocessing/ # Pre-computed data
│ │ │ ├── eigenvectors.npy # PCA eigenvectors
│ │ │ ├── pca_coefficients.npz
│ │ │ ├── lsa_embeddings.npy
│ │ │ └── lsa_recommendations.json
│ │ ├── backend_logic.jar # Compiled Java code
│ │ └── dependency.txt # Python dependencies
│ │
│ └── frontend/ # React Application
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── assets/ # Images & icons
│ │ ├── App.jsx # Main component
│ │ └── main.jsx # Entry point
│ ├── package.json
│ └── vite.config.js
│
├── docs/ # Dokumentasi & laporan
├── test/ # Test cases
└── README.md
Backend menyediakan RESTful API dengan endpoints berikut:
| Endpoint | Method | Deskripsi | Response |
|---|---|---|---|
/ |
GET | Health check | {"status": "Ready", "loaded_books": 523} |
/books |
GET | Daftar semua buku | Array of book metadata |
/book/{id} |
GET | Detail buku | Book info |
/book/{id}/content |
GET | Konten teks buku | Plain text |
/covers/{id}.jpg |
GET | Cover image | JPEG image |
/search?q={query} |
GET | Search by title | Array of matching books |
/api/search |
POST | PCA image search | Top-10 similar books |
/api/search/document |
POST | LSA document search | Top-10 similar books |
/api/recommendations/{id} |
GET | LSA recommendations | Top-5 similar books |
Search by Title:
curl "http://127.0.0.1:5000/search?q=frankenstein"PCA Image Search:
curl -X POST http://127.0.0.1:5000/api/search \
-F "file=@cover_image.jpg"LSA Document Search:
curl -X POST http://127.0.0.1:5000/api/search/document \
-F "file=@document.txt"Get Recommendations:
curl "http://127.0.0.1:5000/api/recommendations/84"- Tujuan: Mengurangi dimensi gambar 200x300 (60,000 pixel) menjadi 120 components
- Proses:
- Mean subtraction & centering
- SVD decomposition
- Proyeksi ke PCA space
- Euclidean distance untuk similarity
- Use Case: Pencarian berdasarkan cover buku
- Tujuan: Menemukan semantic similarity antar dokumen
- Proses:
- TF-IDF weighting
- SVD decomposition (280 dimensions)
- Document embeddings
- Cosine similarity
- Use Case: Pencarian dokumen & rekomendasi buku
Untuk performa optimal, semua matriks besar sudah di-precompute:
- eigenvectors.npy (72 MB) - PCA basis vectors
- pca_coefficients.npz (724 KB) - Book cover coefficients
- lsa_embeddings.npy (1.1 MB) - Document embeddings
- lsa_recommendations.json (331 KB) - Pre-computed similarities
Hasil: Response time 300-500ms untuk search, <10ms untuk recommendations!
- React 19.2.0 - UI library
- Vite 7.2.2 - Build tool & dev server
- Tailwind CSS 3.4.18 - Styling
- Framer Motion 12.23.24 - Animations
- Vanilla CSS - Additional custom styling
- FastAPI - Modern Python web framework
- Uvicorn - ASGI server
- NumPy - Numerical computations
- OpenCV - Image processing
- NLTK - Natural language processing
- JPype1 - Python-Java bridge
- Pydantic - Data validation
- Custom JAR - Highly optimized PCA & LSA implementations
- SVD - Singular Value Decomposition algorithms
- Matrix Operations - Linear algebra computations
Penunggangbabiliar
- Fahd Muhammad Zahid (13524078)
- Manuel Timothy Silalahi (13524102)
- I Gusti Ngurah Alit Dharma Y (13524072)
Untuk dokumentasi teknis lengkap termasuk arsitektur sistem, data flow, dan implementasi algoritma, silakan lihat:
- Laporan Lengkap: Folder
docs/
Problem: Backend tidak bisa diakses di localhost:5000
Cause: Apple AirPlay menggunakan port 5000
Solution:
- System Settings → Sharing → Disable AirPlay Receiver
- Atau gunakan
127.0.0.1:5000di semua API calls
Problem: Buku tidak muncul di frontend
Solution:
- Pastikan backend running:
curl http://127.0.0.1:5000/books - Check browser console (F12) untuk error
- Verify frontend menggunakan
127.0.0.1:5000bukanlocalhost:5000
Problem: LookupError: Resource stopwords not found
Solution:
import nltk
nltk.download('punkt')
nltk.download('stopwords')Proyek ini dibuat untuk keperluan akademis sebagai Tugas Besar 2 mata kuliah IF2123 Aljabar Linier dan Geometri.
- Repository: GitHub - algeo2-penunggangbabiliar
- Issues: Issue Tracker
Built with using Linear Algebra & Geometry
© 2025 Penunggangbabiliar - IF2123 Aljabar Linier dan Geometri