TIF_E41253394/Readme.md

114 lines
5.2 KiB
Markdown

# 🧠 Analisis Sentimen Komentar TikTok (TF-IDF & Logistic Regression)
Sistem aplikasi web untuk klasifikasi dan analisis sentimen komentar video TikTok berbahasa Indonesia ke dalam kategori **POSITIF** atau **NEGATIF**. Sistem ditenagai oleh representasi fitur **TF-IDF (1..2 n-gram)** dan model **Logistic Regression**.
---
## ✨ Fitur Utama Sistem
1. **Dashboard & Analisis Video TikTok**:
- Memasukkan tautan video TikTok (`https://www.tiktok.com/@.../video/...`).
- Menganalisis komentar secara otomatis (Mode Demo 300 komentar realistis) atau input komentar manual (*one comment per line*).
- Menghitung persentase sentimen, rasio sentimen, dan diagram visual (*Donut Chart*).
2. **Riwayat Analisis (History)**:
- Menyimpan seluruh riwayat analisis ke database SQLite lokal (`sentiment_tiktok.db`).
- Tabel komentar interaktif dengan filter (*Semua, Positif, Negatif*) dan paginasi.
3. **Pengujian Model & Confusion Matrix (Admin)**:
- Evaluasi komprehensif performa model Logistic Regression & ekstraksi TF-IDF.
- Perhitungan otomatis Akurasi, Presisi, Recall, F1-Score, dan Matriks Kebingungan 2x2 (*True Positive, True Negative, False Positive, False Negative*).
- Mendukung 3 mode sumber data uji: Dataset Benchmark Bawaan (60 sampel seimbang), Upload File CSV/TXT berlabel, dan Input Manual Batch.
- Tabel Classification Report formal standar Scikit-Learn dan rincian prediksi per sampel komentar.
- Ekspor laporan pengujian ke format CSV dan cetak PDF.
4. **Autentikasi Pengguna**:
- Sistem login dan registrasi akun peneliti.
- Akun default: `admin@tiktok.com` (password: `admin123`).
---
## 📁 Struktur Direktori Proyek
```text
project/
├── app.py # Server Flask utama (REST API, Autentikasi, Analisis TikTok, Static)
├── nlp.py # Modul pra-pemrosesan teks NLP (9 tahapan pembersihan)
├── models.py # Modul pemuatan model Logistic Regression & ekstraksi TF-IDF
├── model_logistic_regression.pkl # Bobot model Logistic Regression hasil latih
├── tfidf_vectorizer.pkl # Objek TF-IDF Vectorizer terlatih (4.732 fitur n-gram)
├── kamus_alay.csv # Dataset kamus normalisasi kata alay/slang
├── requirements.txt # Daftar pustaka Python yang dibutuhkan
├── Readme.md # Dokumentasi panduan lengkap (file ini)
├── PENJELASAN_PROJECT.txt # Dokumentasi teknis & simulasi perhitungan matematis
├── sentiment_tiktok.db # Database SQLite lokal untuk riwayat & pengguna
│
└── frontend/ # Aset Antarmuka Pengguna (Web SPA)
├── index.html # Halaman utama aplikasi Analisis Sentimen TikTok
├── style.css # Berkas tata letak dan tema modern
└── app.js # Logika SPA (Router, Auth, Dashboard, Riwayat, Donut Chart)
```
---
## ⚙️ Persyaratan Sistem & Dependensi
Proyek ini menggunakan **Python 3.11 / 3.12**.
| Pustaka | Versi | Kegunaan |
|---|---|---|
| **Flask** | `>=3.0.0` | Server web & penyedia endpoint REST API |
| **scikit-learn** | `>=1.3.0` | Model Logistic Regression & TF-IDF Vectorizer |
| **joblib** | `>=1.3.0` | Deserialisasi file model `.pkl` |
| **pandas** | `>=2.0.0` | Pembacaan dataset kamus kata gaul CSV |
| **nltk** | `>=3.8.0` | Tokenisasi kata (`word_tokenize`) & korpus stopword |
| **Sastrawi** | `>=1.0.1` | Algoritma stemming kata dasar bahasa Indonesia |
---
## 🚀 Cara Menjalankan Aplikasi
### 1. Buka PowerShell / Terminal pada folder proyek
```powershell
cd "d:\SEMESTER 7\Tugas Akhir\project"
```
### 2. Aktifkan Virtual Environment
```powershell
.\venv\Scripts\activate
```
### 3. Jalankan Server Flask
```powershell
python App.py
```
*(Atau `.\venv\Scripts\python.exe App.py`)*
### 4. Buka di Browser
Kunjungi alamat:
```
http://127.0.0.1:5000
```
- **Login Akun Bawaan**:
- Email: `admin@tiktok.com`
- Password: `admin123`
- Atau klik **"Daftar"** untuk membuat akun baru.
---
## 📡 Dokumentasi Endpoint REST API
| Method | Endpoint | Keterangan |
|---|---|---|
| `GET` | `/` atau `/index.html` | Memuat aplikasi web utama (TikTok Sentiment Analysis) |
| `POST` | `/api/login` | Autentikasi pengguna (`email`, `password`) |
| `POST` | `/api/register` | Mendaftarkan pengguna baru |
| `GET` | `/api/me` | Memeriksa sesi pengguna aktif |
| `POST` | `/api/logout` | Mengakhiri sesi pengguna |
| `GET` | `/api/stats` | Statistik total analisis, komentar, positif, negatif |
| `GET` | `/api/analyses` | Mengambil seluruh riwayat analisis pengguna |
| `POST` | `/api/analyses` | Menganalisis video TikTok baru (`tiktok_url`, `manual_comments`) |
| `GET` | `/api/analyses/<id>` | Detail analisis video (ringkasan persentase sentimen) |
| `DELETE` | `/api/analyses/<id>` | Menghapus data analisis dan komentarnya |
| `GET` | `/api/analyses/<id>/comments` | Daftar komentar dengan filter (`POSITIF`/`NEGATIF`) dan paginasi |
| `POST` | `/predict` | Inferensi satu komentar langsung via REST API |
| `GET` | `/api/model-test/benchmark` | Mengambil dataset benchmark terkurasi 60 sampel berlabel |
| `POST` | `/api/model-test/evaluate` | Evaluasi batch model menghasilkan Confusion Matrix & classification report |