kelompok-a/knowledge-retrieval-assistant
Knowledge Retrieval Assistant (TF-IDF Q&A)
Aplikasi ini adalah Knowledge Retrieval Assistant sederhana untuk mendukung Knowledge Management System (KMS). Pengguna bisa upload dokumen pengetahuan (PDF/TXT) lalu mengajukan pertanyaan. Aplikasi akan mencari potongan teks yang paling relevan menggunakan TF-IDF + cosine similarity dan menyimpan riwayat pencarian sebagai Knowledge Log.
β¨ Fitur Utama
π Fitur AI
- Ekstraksi teks dari PDF (via
pdfplumber) atau TXT - Preprocessing teks:
- normalisasi spasi & line break
- penghapusan header/footer halaman yang berulang
- pemecahan paragraf dan chunk (dengan overlap)
- Representasi vektor TF-IDF dengan
scikit-learn - Pencarian berbasis cosine similarity:
- pertanyaan user diubah ke vektor
- sistem mengembalikan top-k potongan teks (chunk) paling relevan
- menampilkan skor similarity dan nomor halaman
ποΈ Fitur KMS
Aplikasi ini mengimplementasikan beberapa komponen Knowledge Management:
- Knowledge Capture
- Upload dokumen (PDF/TXT)
- Ekstraksi dan preprocessing teks:
- pemisahan per halaman
- deteksi dan penghapusan header/footer berulang
- pemecahan paragraf & chunk
- Knowledge Storage
- Menyimpan hasil analisis ke filesystem:
index_output/vectorizer.pklβ model TF-IDFindex_output/tfidf_matrix.npzβ matriks TF-IDFindex_output/chunk_meta.jsonβ metadata chunk (teks & nomor halaman)- Menyimpan Knowledge Log ke file:
knowledge_log.jsonβ riwayat pertanyaan & cuplikan jawaban
- Knowledge Retrieval
- Pencarian pengetahuan berbasis pertanyaan user:
- mengembalikan chunk teks paling relevan
- menampilkan nomor halaman terkait
- Knowledge Sharing
- Antarmuka web (Flask atau Gradio) yang:
- menampilkan ringkasan dokumen (jumlah halaman, paragraf, chunk)
- menampilkan hasil pencarian untuk pertanyaan pengguna
- menampilkan Knowledge Log (riwayat pencarian) di UI (mode Gradio)
π§ Model AI yang Digunakan
Model AI di aplikasi ini adalah kombinasi:
- TF-IDF (TfidfVectorizer) dari
scikit-learn - Cosine similarity untuk mengukur kedekatan antara:
- vektor pertanyaan
- vektor chunk dokumen
Ini termasuk dalam kategori:
- Model local dengan scikit-learn, dan
- Contoh sederhana ML (TF-IDF) seperti yang dipersyaratkan pada deskripsi tugas.
π§© Tech Stack
- Bahasa: Python 3.8+
- NLP / IR:
pdfplumberscikit-learnnumpy,scipySastrawi(opsional, untuk stopword & stemming Bahasa Indonesia)- Web Framework:
- Flask (Mode 1 β klasik)
- Gradio (Mode 2 β recommended untuk deploy cepat)
π Struktur Project
Struktur direktori (kurang lebih):
.
ββ app.py # Mode Flask
ββ app_gradio.py # Mode Gradio (disarankan untuk deployment)
ββ templates/
β ββ index.html # Template Flask
ββ index_output/ # Dibuat otomatis (indeks TF-IDF)
β ββ vectorizer.pkl
β ββ tfidf_matrix.npz
β ββ chunk_meta.json
ββ knowledge_log.json # Dibuat otomatis (Knowledge Log)
ββ README.md
ββ requirements.txtCatatan: Folder `index_output/` dan file `knowledge_log.json` akan muncul setelah aplikasi dijalankan dan digunakan. Di mode Gradio, Knowledge Log bisa dilihat langsung dari UI.
βοΈ Instalasi
- Clone / salin repo:
git clone https://github.com/wardanaa/knowledge-retrieval-assistant.git
cd knowledge-retrieval-assistant- (Opsional Tapi Direkomendasikan) Buat virtual environment:
python -m venv venv
source venv/bin/activate # Linux / macOS
# atau
venv\Scripts\activate # Windows- Install dependensi:
pip install -r requirements.txtContoh isi requirements.txt:
flask
pdfplumber
numpy
scipy
scikit-learn
Sastrawi
gradioπ Mode Aplikasi
Aplikasi bisa dijalankan dalam dua mode:
- Mode Gradio β antarmuka modern, mudah di-deploy (disarankan)
- Mode Flask β antarmuka web klasik (HTML + Bootstrap)
1οΈβ£ Mode Gradio (Recommended)
File utama: app_gradio.py
Jalankan:
python app_gradio.pyGradio biasanya akan tampil di:
http://127.0.0.1:7860Alur Penggunaan (Gradio)
- Buka URL Gradio di browser.
- Upload dokumen (PDF/TXT) melalui komponen file.
- Aplikasi akan:
- mengekstrak dan memproses teks
- membangun indeks TF-IDF
- menampilkan:
- info dokumen (jumlah halaman, paragraf, chunk)
- preview teks dokumen
- Tuliskan pertanyaan pada textbox, lalu klik βCari Jawabanβ.
- Aplikasi akan menampilkan:
- beberapa Rank jawaban
- skor similarity
- nomor halaman
- cuplikan teks jawaban
- Buka accordion βKnowledge Log (Riwayat Pencarian)β untuk melihat:
- daftar pertanyaan terbaru
- timestamp
- dokumen terkait
- halaman jawaban
- cuplikan jawaban (snippet)
Knowledge Log (Gradio): Disimpan di file `knowledge_log.json`. Ditampilkan langsung di UI lewat tombol βRefresh Knowledge Logβ. Ini adalah implementasi eksplisit dari Knowledge Storage + Knowledge Retrieval* untuk riwayat pengetahuan.
2οΈβ£ Mode Flask (Alternatif)
File utama: app.py
Jalankan:
python app.pySecara default Flask berjalan di:
http://localhost:5000Alur Penggunaan (Flask)
- Buka
http://localhost:5000. - Di bagian βUpload dokumen (PDF / TXT)β:
- pilih file PDF/TXT
- klik βProses Dokumenβ
- Setelah berhasil, halaman akan menampilkan:
- nama dokumen
- jumlah halaman, paragraf, chunk
- preview teks
- Di bagian βAjukan pertanyaanβ:
- tulis pertanyaan terkait isi dokumen
- klik βCari Jawabanβ
- Aplikasi akan menampilkan daftar hasil dengan:
- urutan rank
- skor similarity
- nomor halaman
- potongan teks relevan
Pada mode Flask, Knowledge Log tetap disimpan ke knowledge_log.json, meskipun belum ditampilkan di UI. File tersebut masih bisa digunakan sebagai bukti komponen Knowledge Storage di dokumentasi.π§Ύ Knowledge Log
File: knowledge_log.json
Setiap kali pengguna mengajukan pertanyaan, aplikasi (mode Gradio & Flask) menyimpan entri log berisi antara lain:
- Waktu (
time) - Pertanyaan (
question) - Nama dokumen (
document) - Halaman jawaban teratas (
top_answer_pages) - Cuplikan jawaban teratas (
top_answer_snippet)
Di mode Gradio:
- Log ini bisa dilihat melalui accordion βKnowledge Log (Riwayat Pencarian)β.
- Secara default menampilkan sekitar 20 entri terbaru.
Ini bisa dijadikan bahan:
- Analisis penggunaan sistem
- Sumber pengetahuan tambahan (FAQ internal)
- Bagian pembahasan Knowledge Management di laporan.
π Kaitan dengan Knowledge Management System (untuk Laporan)
Ringkasannya:
- AI Component
- TF-IDF + cosine similarity (scikit-learn) sebagai model retrieval.
- Knowledge Capture
- Upload dan ekstraksi dokumen pengetahuan (PDF/TXT).
- Preprocessing dan chunking sebagai bentuk strukturisasi pengetahuan.
- Knowledge Storage
- Penyimpanan indeks TF-IDF (
index_output/). - Penyimpanan Knowledge Log (
knowledge_log.json).
- Knowledge Retrieval
- Pencarian chunk relevan dari dokumen berdasarkan pertanyaan user.
- Knowledge Sharing
- Antarmuka web (Flask/Gradio) yang menyajikan:
- hasil pencarian
- ringkasan dokumen
- riwayat pertanyaan (Knowledge Log) ke pengguna.
β οΈ Batasan
- Sistem hanya melakukan retrieval, bukan jawaban generatif:
- output berupa potongan teks original dari dokumen.
- Kualitas hasil sangat dipengaruhi oleh:
- kualitas dokumen (scan vs teks asli),
- konsistensi bahasa (ID/EN),
- jumlah noise.
- Untuk dokumen yang sangat besar, proses indeks bisa memakan waktu & memori lebih besar.
π Lisensi
Silakan gunakan dan modifikasi sesuai kebutuhan. Tambahkan lisensi formal (misalnya MIT) jika diperlukan untuk keperluan publikasi atau open source.
