Skip to content
 
 

Latest commit

 

History

36 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mesin Pencari Buku Berbasis Aljabar Linear

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.

Fitur Utama

  • 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

Getting Started

Prerequisites

  • Node.js (v14 atau lebih baru)
  • Python 3.x
  • Java Runtime Environment (JRE)
  • npm atau yarn

Installation

  1. Clone repository
git clone https://github.com/IRK-23/algeo2-penunggangbabiliar.git
cd algeo2-penunggangbabiliar
  1. 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
  1. Install dependensi Frontend
cd ../frontend
npm install

Running the Application

1. Start Backend (Python FastAPI)

cd src/backend
python3 main.py

Backend 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.

2. Start Frontend (React + Vite)

cd src/frontend
npm run dev

Frontend berjalan di http://localhost:5173

Building for Production

Frontend:

cd src/frontend
npm run build

Output: dist/ folder

Backend: Backend Python tidak perlu build, langsung jalankan dengan:

uvicorn main:app --host 0.0.0.0 --port 5000 --workers 4

Struktur Proyek

algeo2-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

API Endpoints

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

Contoh Penggunaan

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"

Algoritma yang Digunakan

PCA (Principal Component Analysis)

  • 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

LSA (Latent Semantic Analysis)

  • Tujuan: Menemukan semantic similarity antar dokumen
  • Proses:
    • TF-IDF weighting
    • SVD decomposition (280 dimensions)
    • Document embeddings
    • Cosine similarity
  • Use Case: Pencarian dokumen & rekomendasi buku

Pre-computation Strategy

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!


Tech Stack

Frontend

  • 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

Backend

  • 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

Backend Logic (Java)

  • Custom JAR - Highly optimized PCA & LSA implementations
  • SVD - Singular Value Decomposition algorithms
  • Matrix Operations - Linear algebra computations

Tim Pengembang

Penunggangbabiliar

  • Fahd Muhammad Zahid (13524078)
  • Manuel Timothy Silalahi (13524102)
  • I Gusti Ngurah Alit Dharma Y (13524072)

Dokumentasi Lengkap

Untuk dokumentasi teknis lengkap termasuk arsitektur sistem, data flow, dan implementasi algoritma, silakan lihat:

  • Laporan Lengkap: Folder docs/

Troubleshooting

macOS: Port 5000 Conflict

Problem: Backend tidak bisa diakses di localhost:5000
Cause: Apple AirPlay menggunakan port 5000
Solution:

  1. System Settings → Sharing → Disable AirPlay Receiver
  2. Atau gunakan 127.0.0.1:5000 di semua API calls

Books Not Displaying

Problem: Buku tidak muncul di frontend
Solution:

  1. Pastikan backend running: curl http://127.0.0.1:5000/books
  2. Check browser console (F12) untuk error
  3. Verify frontend menggunakan 127.0.0.1:5000 bukan localhost:5000

Import Error: NLTK Resources

Problem: LookupError: Resource stopwords not found
Solution:

import nltk
nltk.download('punkt')
nltk.download('stopwords')

License

Proyek ini dibuat untuk keperluan akademis sebagai Tugas Besar 2 mata kuliah IF2123 Aljabar Linier dan Geometri.


Links


Built with using Linear Algebra & Geometry

© 2025 Penunggangbabiliar - IF2123 Aljabar Linier dan Geometri

About

algeo25-algeo2-tb2-template created by GitHub Classroom

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages