AirSearch adalah aplikasi mesin pencari sederhana bertema polusi udara yang dikembangkan sebagai proyek UAS mata kuliah STKI. Sistem ini dirancang untuk membantu pengguna menemukan informasi relevan dari dua jenis sumber data, yaitu dokumen PDF dan halaman web.
Proyek ini mengimplementasikan alur dasar sistem temu kembali informasi, mulai dari pengumpulan dokumen, ekstraksi teks, prapemrosesan, pembangunan inverted index, hingga penyediaan API pencarian yang terhubung dengan antarmuka web.
AirSearch memproses kumpulan dokumen bertema polusi udara, seperti artikel, laporan, berita, dan dokumen PDF. Setelah data dikumpulkan, sistem melakukan prapemrosesan teks Bahasa Indonesia, membangun indeks pencarian, lalu menampilkan hasil pencarian berdasarkan kata kunci yang dimasukkan pengguna.
Sistem ini terdiri dari dua bagian utama:
- Backend, digunakan untuk scraping, ekstraksi PDF, preprocessing, indexing, penyimpanan dokumen, dan API pencarian.
- Frontend, digunakan sebagai antarmuka pengguna untuk melakukan pencarian dan menampilkan hasil secara visual.
- Scraping halaman web dari daftar URL.
- Ekstraksi teks dari dokumen PDF.
- Normalisasi teks Bahasa Indonesia.
- Tokenisasi, stopword removal, dan stemming menggunakan PySastrawi.
- Penyimpanan dokumen menggunakan SQLite.
- Pembangunan inverted index berbasis TF-IDF.
- Dukungan pencarian dengan scoring
cosinedanbm25. - REST API menggunakan FastAPI.
- Frontend modern berbasis Next.js.
- Tampilan hasil pencarian berupa judul, sumber, cuplikan dokumen, dan skor relevansi.
Alur kerja sistem secara umum adalah sebagai berikut:
PDF & URL Web
↓
Ekstraksi Teks / Scraping
↓
Preprocessing Teks
↓
Penyimpanan Dokumen
↓
Pembangunan Inverted Index
↓
API Pencarian
↓
Frontend
↓
Hasil Pencarian
Backend mengikuti struktur pipeline berikut:
-
backend/pipeline/scraper.pyMembaca daftar URL daribackend/data/links.csv, melakukan scraping halaman web, lalu menyimpan hasil mentah kebackend/data/raw/. -
backend/pipeline/pdf_extractor.pyMembaca file PDF daribackend/data/pdfs/, mengekstrak teks, lalu menyimpan hasil mentah kebackend/data/raw/. -
backend/pipeline/preprocessor.pyMelakukan normalisasi teks, tokenisasi, stopword removal Bahasa Indonesia, dan stemming menggunakan PySastrawi. -
backend/pipeline/indexer.pyMenyimpan dokumen ke SQLite dan membangun inverted index berbasis TF-IDF padabackend/db/index.json. -
backend/app/Menyediakan API pencarian yang digunakan oleh frontend.
.
├── backend
│ ├── app
│ │ ├── main.py
│ │ ├── routes.py
│ │ └── search.py
│ ├── data
│ │ ├── links.csv
│ │ ├── pdfs
│ │ ├── raw
│ │ └── processed
│ ├── db
│ │ ├── documents.db
│ │ └── index.json
│ ├── pipeline
│ │ ├── scraper.py
│ │ ├── pdf_extractor.py
│ │ ├── preprocessor.py
│ │ └── indexer.py
│ ├── requirements.txt
│ └── run_pipeline.py
│
└── frontend
├── app
├── components
├── lib
│ └── api.ts
├── package.json
└── .env.local
- Python
- FastAPI
- Uvicorn
- SQLite
- PySastrawi
- BeautifulSoup
- Requests
- PyPDF atau library ekstraksi PDF sejenis
- JSON-based inverted index
- Next.js
- TypeScript
- Tailwind CSS
Masuk ke folder backend:
cd backendBuat virtual environment:
python3 -m venv .venvAktifkan virtual environment:
source .venv/bin/activateInstall dependency:
pip install -r requirements.txtMasukkan data ke lokasi berikut:
backend/data/pdfs/
backend/data/links.csv
Data yang digunakan terdiri dari:
- 50 file PDF bertema polusi udara.
- 50 URL web bertema polusi udara.
Format links.csv yang disarankan:
url,title
https://contoh.com/artikel-polusi-udara,Judul ArtikelKolom title bersifat opsional dan dapat dikosongkan.
Jalankan pipeline untuk memproses seluruh data:
cd backend
python run_pipeline.pySetelah pipeline dijalankan, sistem akan menghasilkan beberapa output utama:
backend/data/raw/
backend/data/processed/
backend/db/documents.db
backend/db/index.json
Keterangan output:
backend/data/raw/berisi hasil scraping web dan ekstraksi teks PDF.backend/data/processed/berisi token dan term frequency tiap dokumen.backend/db/documents.dbberisi document store berbasis SQLite.backend/db/index.jsonberisi inverted index yang digunakan untuk proses pencarian.
Jalankan server backend menggunakan Uvicorn:
cd backend
uvicorn app.main:app --reload --port 8000Backend akan berjalan pada:
http://localhost:8000
| Method | Endpoint | Deskripsi |
|---|---|---|
| GET | /api/health |
Mengecek status backend |
| GET | /api/search?q=polusi udara&limit=10 |
Melakukan pencarian dengan query tertentu |
| GET | /api/search?q=emisi kendaraan&scoring=bm25 |
Melakukan pencarian menggunakan scoring BM25 |
| POST | /api/reload |
Memuat ulang index pencarian |
{
"query": "polusi udara",
"scoring": "cosine",
"results": [
{
"id": 1,
"title": "Judul Dokumen",
"sourceType": "web",
"source": "https://contoh.com",
"snippet": "Cuplikan isi dokumen...",
"score": 0.42
}
]
}Masuk ke folder frontend:
cd frontendInstall dependency:
npm installJalankan development server:
npm run devFrontend dapat diakses melalui:
http://localhost:3000
Backend API dapat diakses melalui:
http://localhost:8000
Frontend sudah terhubung ke backend melalui file:
frontend/lib/api.ts
Jika backend dijalankan pada host atau port lain, buat file .env.local di dalam folder frontend/:
NEXT_PUBLIC_API_BASE_URL=http://localhost:8000Halaman hasil pencarian akan memanggil endpoint berikut:
GET /api/search?q=<query>
Apabila index backend masih kosong, frontend akan menampilkan data contoh dari v0 agar tampilan antarmuka tetap dapat dilihat.
Beberapa contoh kata kunci yang dapat digunakan:
polusi udara
emisi kendaraan
kualitas udara
pencemaran udara
partikulat PM2.5
dampak polusi
transportasi dan emisi
Proyek ini dikembangkan untuk memahami konsep dasar sistem temu kembali informasi, khususnya pada proses:
- pengumpulan data dari berbagai sumber,
- ekstraksi dan pembersihan teks,
- pembentukan representasi dokumen,
- pembangunan inverted index,
- perhitungan relevansi dokumen,
- serta integrasi backend dan frontend dalam aplikasi pencarian.
Proyek ini merupakan implementasi akademik untuk tugas UAS. Sistem sudah mendukung pipeline pemrosesan data, penyimpanan dokumen, API pencarian, dan integrasi dengan frontend. Pengembangan lanjutan dapat dilakukan dengan menambahkan evaluasi relevansi, highlight kata kunci, pagination, filter sumber dokumen, dan deployment penuh ke layanan cloud.
Beberapa fitur yang dapat dikembangkan pada versi berikutnya:
- Menambahkan pagination pada hasil pencarian.
- Menambahkan highlight keyword pada snippet.
- Menambahkan filter berdasarkan sumber dokumen, seperti PDF atau web.
- Menambahkan evaluasi performa pencarian menggunakan precision, recall, dan F1-score.
- Menambahkan dashboard statistik dokumen.
- Melakukan deployment backend dan frontend.
- Menambahkan fitur crawling otomatis untuk URL baru.
Dikembangkan oleh Kelompok 3 sebagai proyek UAS mata kuliah STKI.