114 lines
5.2 KiB
Markdown
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 |
|