# 🧠 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/` | Detail analisis video (ringkasan persentase sentimen) | | `DELETE` | `/api/analyses/` | Menghapus data analisis dan komentarnya | | `GET` | `/api/analyses//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 |