Skip to content

purooo0/search-engine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AirSearch — Search Engine Polusi Udara

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.

Ringkasan Proyek

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.

Fitur Utama

  • 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 cosine dan bm25.
  • REST API menggunakan FastAPI.
  • Frontend modern berbasis Next.js.
  • Tampilan hasil pencarian berupa judul, sumber, cuplikan dokumen, dan skor relevansi.

Arsitektur Sistem

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

Struktur Backend

Backend mengikuti struktur pipeline berikut:

  1. backend/pipeline/scraper.py Membaca daftar URL dari backend/data/links.csv, melakukan scraping halaman web, lalu menyimpan hasil mentah ke backend/data/raw/.

  2. backend/pipeline/pdf_extractor.py Membaca file PDF dari backend/data/pdfs/, mengekstrak teks, lalu menyimpan hasil mentah ke backend/data/raw/.

  3. backend/pipeline/preprocessor.py Melakukan normalisasi teks, tokenisasi, stopword removal Bahasa Indonesia, dan stemming menggunakan PySastrawi.

  4. backend/pipeline/indexer.py Menyimpan dokumen ke SQLite dan membangun inverted index berbasis TF-IDF pada backend/db/index.json.

  5. backend/app/ Menyediakan API pencarian yang digunakan oleh frontend.

Struktur Direktori

.
├── 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

Teknologi yang Digunakan

Backend

  • Python
  • FastAPI
  • Uvicorn
  • SQLite
  • PySastrawi
  • BeautifulSoup
  • Requests
  • PyPDF atau library ekstraksi PDF sejenis
  • JSON-based inverted index

Frontend

  • Next.js
  • TypeScript
  • Tailwind CSS

Menyiapkan Backend

Masuk ke folder backend:

cd backend

Buat virtual environment:

python3 -m venv .venv

Aktifkan virtual environment:

source .venv/bin/activate

Install dependency:

pip install -r requirements.txt

Menyiapkan Data

Masukkan 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 Artikel

Kolom title bersifat opsional dan dapat dikosongkan.

Menjalankan Pipeline

Jalankan pipeline untuk memproses seluruh data:

cd backend
python run_pipeline.py

Setelah 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.db berisi document store berbasis SQLite.
  • backend/db/index.json berisi inverted index yang digunakan untuk proses pencarian.

Menjalankan API Backend

Jalankan server backend menggunakan Uvicorn:

cd backend
uvicorn app.main:app --reload --port 8000

Backend akan berjalan pada:

http://localhost:8000

Endpoint API

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

Contoh Respons API

{
  "query": "polusi udara",
  "scoring": "cosine",
  "results": [
    {
      "id": 1,
      "title": "Judul Dokumen",
      "sourceType": "web",
      "source": "https://contoh.com",
      "snippet": "Cuplikan isi dokumen...",
      "score": 0.42
    }
  ]
}

Menjalankan Frontend

Masuk ke folder frontend:

cd frontend

Install dependency:

npm install

Jalankan development server:

npm run dev

Frontend dapat diakses melalui:

http://localhost:3000

Backend API dapat diakses melalui:

http://localhost:8000

Konfigurasi Frontend

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:8000

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

Contoh Query

Beberapa contoh kata kunci yang dapat digunakan:

polusi udara
emisi kendaraan
kualitas udara
pencemaran udara
partikulat PM2.5
dampak polusi
transportasi dan emisi

Tujuan Pengembangan

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.

Status Proyek

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.

Rencana Pengembangan Lanjutan

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.

Author

Dikembangkan oleh Kelompok 3 sebagai proyek UAS mata kuliah STKI.

About

Search engine berbasis web untuk temu kembali informasi bertema polusi udara di kota besar Indonesia. Sistem mengindeks 50 halaman web dan 50 dokumen PDF, dilengkapi preprocessing teks, inverted index, ranking TF-IDF/cosine similarity, backend FastAPI, dan frontend Next.js.

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors