first commit

This commit is contained in:
ericko-cyber 2026-10-20 13:28:38 +07:00
commit 88ac7037e4
13454 changed files with 2876963 additions and 0 deletions

113
Readme.md Normal file
View File

@ -0,0 +1,113 @@
# 🧠 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 |

Binary file not shown.

Binary file not shown.

Binary file not shown.

1276
app.py Normal file

File diff suppressed because it is too large Load Diff

1967
frontend/app.js Normal file

File diff suppressed because it is too large Load Diff

98
frontend/index.html Normal file
View File

@ -0,0 +1,98 @@
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Analisis Sentimen Komentar TikTok | TF-IDF & Logistic Regression</title>
<meta name="description"
content="Sistem analisis sentimen komentar TikTok menggunakan ekstraksi fitur TF-IDF dan algoritma Logistic Regression dengan dukungan database MySQL Laragon.">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link
href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap"
rel="stylesheet">
<link rel="icon"
href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><rect width='100' height='100' rx='25' fill='%230f172a'/><path d='M65 30c-5 0-9.5-2.2-12.5-5.6V62a15 15 0 1 1-15-15c2.3 0 4.5.5 6.4 1.5v9.1A6.8 6.8 0 1 0 50 64V18h8.5c1.4 6 5.8 10.5 11.5 11.5v6.5A16.5 16.5 0 0 1 65 30z' fill='%2325f4ee'/><path d='M62 33c-5 0-9.5-2.2-12.5-5.6V65a15 15 0 1 1-15-15c2.3 0 4.5.5 6.4 1.5v9.1A6.8 6.8 0 1 0 47 67V21h8.5c1.4 6 5.8 10.5 11.5 11.5v6.5A16.5 16.5 0 0 1 62 33z' fill='%23fe2c55'/></svg>">
<link rel="stylesheet" href="/static/style.css">
</head>
<body>
<div class="shell">
<header class="top" id="topbar" hidden>
<div class="brand-wrap">
<a class="brand" href="#/">
<div class="brand-icon">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M16.5 3C14.5 5.5 12 6.5 9 6.5V15.5C9 18 6.8 20 4.5 20C2.2 20 0 18 0 15.5C0 13 2 11 4.5 11C5.2 11 6 11.2 6.5 11.5V6.8C5.8 6.6 5.2 6.5 4.5 6.5C1.8 6.5 -0.5 9 -0.5 12C-0.5 15 1.8 17.5 4.5 17.5C7.2 17.5 9.5 15 9.5 12V3H16.5Z"
fill="#25f4ee" transform="translate(4, 2)" />
<path
d="M18.5 5C16.5 7.5 14 8.5 11 8.5V17.5C11 20 8.8 22 6.5 22C4.2 22 2 20 2 17.5C2 15 4 13 6.5 13C7.2 13 8 13.2 8.5 13.5V8.8C7.8 8.6 7.2 8.5 6.5 8.5C3.8 8.5 1.5 11 1.5 14C1.5 17 3.8 19.5 6.5 19.5C9.2 19.5 11.5 17 11.5 14V5H18.5Z"
fill="#fe2c55" transform="translate(3, 1)" />
</svg>
</div>
<div class="brand-text">
<span class="brand-title">Sentimen TikTok</span>
<span class="brand-subtitle">TF-IDF & Logistic Regression</span>
</div>
</a>
<div class="db-pill" id="dbStatusBadge" title="Status Koneksi Database">
<span class="db-dot"></span>
</div>
</div>
<nav class="nav">
<a href="#/" data-nav="dashboard" class="nav-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<rect x="3" y="3" width="7" height="9" rx="1" />
<rect x="14" y="3" width="7" height="5" rx="1" />
<rect x="14" y="12" width="7" height="9" rx="1" />
<rect x="3" y="16" width="7" height="5" rx="1" />
</svg>
<span>Dashboard</span>
</a>
<a href="#/playground" data-nav="playground" class="nav-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path
d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z" />
<polyline points="3.27 6.96 12 12.01 20.73 6.96" />
<line x1="12" y1="22.08" x2="12" y2="12" />
</svg>
<span>Uji Cepat Kata</span>
</a>
<a href="#/history" data-nav="history" class="nav-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<circle cx="12" cy="12" r="10" />
<polyline points="12 6 12 12 16 14" />
</svg>
<span>Riwayat</span>
</a>
<a href="#/evaluation" data-nav="evaluation" class="nav-item nav-item-admin" id="navEvaluation">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<rect x="3" y="3" width="18" height="18" rx="2" />
<path d="M3 9h18" />
<path d="M9 21V9" />
</svg>
<span>Pengujian Model</span>
<span class="admin-pill">Admin</span>
</a>
<div class="user-chip">
<div class="avatar-circle" id="userAvatar">-</div>
<span class="who" id="whoami"></span>
</div>
<button class="btn-logout" id="btnLogout" title="Keluar">
<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4" />
<polyline points="16 17 21 12 16 7" />
<line x1="21" y1="12" x2="9" y2="12" />
</svg>
<span>Keluar</span>
</button>
</nav>
</header>
<main id="app" aria-live="polite"></main>
</div>
<script src="/static/app.js"></script>
</body>
</html>

2374
frontend/style.css Normal file

File diff suppressed because it is too large Load Diff

15397
kamus_alay.csv Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

125
models.py Normal file
View File

@ -0,0 +1,125 @@
"""
Models.py - Modul Model Klasifikasi dan Vektorisasi TF-IDF
Proyek Tugas Akhir: Analisis Sentimen Komentar Berbasis TF-IDF & Logistic Regression
Modul ini menangani:
1. Pemuatan pre-trained TF-IDF Vectorizer dan model Logistic Regression
2. Transformasi teks bersih ke vektor TF-IDF
3. Perhitungan skor probabilitas dan decision value
4. Ekstraksi fitur n-gram dominan berserta bobot koefisiennya
"""
import os
import time
import warnings
import joblib
from typing import Dict, Any
warnings.filterwarnings("ignore")
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
MODEL_PATH = os.path.join(BASE_DIR, "model_logistic_regression.pkl")
TFIDF_PATH = os.path.join(BASE_DIR, "tfidf_vectorizer.pkl")
# Memuat model dan vectorizer saat modul diimpor
model = joblib.load(MODEL_PATH)
tfidf = joblib.load(TFIDF_PATH)
def predict_sentiment(teks_bersih: str) -> Dict[str, Any]:
"""
Melakukan inferensi klasifikasi sentimen berdasarkan teks yang telah diproses:
- X = tfidf.transform([teks_bersih])
- Prediksi label: POSITIF / NEGATIF
- Probabilitas Sigmoid untuk tiap kelas
- Nilai Decision Function (z = w*x + b)
- Ekstraksi kontribusi bobot fitur dominan
"""
start_time = time.time()
if not teks_bersih or not teks_bersih.strip():
return {
"success": True,
"sentimen": "GAGAL DIANALISIS",
"preprocessing": "",
"probabilitas": {
"negatif": 0.0,
"positif": 0.0
},
"keyakinan": 0.0,
"decision_value": 0.0,
"fitur_dominan": [],
"elapsed_ms": 0.5,
"keterangan": "Hasil preprocessing kosong (tidak dapat dianalisis)."
}
# Transformasi TF-IDF
X = tfidf.transform([teks_bersih])
# Ekstraksi Fitur N-Gram Dominan
feature_names = tfidf.get_feature_names_out()
non_zero_indices = X.nonzero()[1]
has_features = len(non_zero_indices) > 0
elapsed_ms = round((time.time() - start_time) * 1000, 1)
# Bila fitur kata tidak ditemukan pada TF-IDF, jangan gunakan bias model
if not has_features:
return {
"success": True,
"sentimen": "FITUR TIDAK DITEMUKAN",
"preprocessing": teks_bersih,
"probabilitas": {
"negatif": 0.0,
"positif": 0.0
},
"keyakinan": 0.0,
"decision_value": 0.0,
"fitur_dominan": [],
"fitur_ditemukan": False,
"keterangan": "Fitur tidak ditemukan",
"elapsed_ms": max(1.0, elapsed_ms)
}
# Prediksi Label dan Probabilitas hanya bila fitur kata ditemukan
hasil_prediksi = model.predict(X)[0]
proba = model.predict_proba(X)[0]
prob_negatif = float(proba[0])
prob_positif = float(proba[1])
decision_val = float(model.decision_function(X)[0])
features_info = []
for idx in non_zero_indices:
token = feature_names[idx]
val = float(X[0, idx])
weight = float(model.coef_[0, idx])
features_info.append({
"token": token,
"tfidf": round(val, 4),
"weight": round(weight, 4)
})
# Urutkan berdasarkan nilai absolut kontribusi fitur
features_info.sort(key=lambda item: abs(item['weight'] * item['tfidf']), reverse=True)
top_features = features_info[:8]
keyakinan = (prob_negatif if hasil_prediksi == 'NEGATIF' else prob_positif) * 100
return {
"success": True,
"sentimen": str(hasil_prediksi),
"preprocessing": teks_bersih,
"probabilitas": {
"negatif": round(prob_negatif, 4),
"positif": round(prob_positif, 4)
},
"keyakinan": round(keyakinan, 1),
"decision_value": round(decision_val, 4),
"fitur_dominan": top_features,
"fitur_ditemukan": True,
"keterangan": "Fitur berhasil diekstraksi",
"elapsed_ms": max(1.0, elapsed_ms)
}
if __name__ == "__main__":
test_clean = "sok cantik banget"
hasil = predict_sentiment(test_clean)
print("Hasil Prediksi:", hasil)

15167
new_kamusalay.csv Normal file

File diff suppressed because it is too large Load Diff

280
nlp.py Normal file
View File

@ -0,0 +1,280 @@
"""
Nlp.py - Modul Pemrosesan Teks (Natural Language Processing)
Proyek Tugas Akhir: Analisis Sentimen Komentar Berbasis TF-IDF & Logistic Regression
Modul ini menangani tahapan preprocessing teks:
1. Case Folding
2. Slang Negation Replacement ('t)
3. Reduksi Karakter Berulang
4. Tokenizing (NLTK)
5a. Normalisasi Rumus Alay 1 (Kamus Manual + kamus_alay.csv)
5b. Normalisasi Rumus Alay 2 (new_kamusalay.csv - 15.000+ entri)
6. Cleaning (Hanya huruf alfabet)
7. Stopword Removal (Menyimpan kata negasi & penegas)
8. Stemming Bahasa Indonesia (Sastrawi)
9. Negation Tagging (menggabungkan 'tidak_bagus')
"""
import os
import re
import warnings
try:
import regex
except ImportError:
regex = None
import pandas as pd
import nltk
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from Sastrawi.Stemmer.StemmerFactory import StemmerFactory
warnings.filterwarnings("ignore")
# Kata-kata yang ada di vocabulary model TF-IDF agar tidak ditimpa oleh kamus ke kata yang OOV
KATA_PROTEKSI_TFIDF = {'aku', 'lu', 'kasih', 'moga', 'cakep'}
# Memastikan korpus NLTK yang dibutuhkan terunduh
for resource in ['punkt', 'punkt_tab', 'stopwords']:
try:
nltk.data.find(f'tokenizers/{resource}' if 'punkt' in resource else f'corpora/{resource}')
except LookupError:
nltk.download(resource, quiet=True)
# ==========================================
# 1. KAMUS NORMALISASI DAN SLANG / ALAY
# ==========================================
normalisasi = {
# Singkatan umum
'bgt': 'banget', 'bgtt': 'banget', 'bangett': 'banget', 'bngt': 'banget', 'bngtt': 'banget',
'yg': 'yang', 'yng': 'yang', 'dgn': 'dengan', 'dngn': 'dengan', 'dr': 'dari',
'drpd': 'daripada', 'krn': 'karena', 'karna': 'karena', 'krena': 'karena',
'klo': 'kalau', 'kalo': 'kalau', 'kl': 'kalau', 'klau': 'kalau',
'aja': 'saja', 'aj': 'saja', 'sja': 'saja', 'udah': 'sudah', 'udh': 'sudah',
'sdh': 'sudah', 'dah': 'sudah', 'blm': 'belum', 'blom': 'belum', 'belom': 'belum',
'tp': 'tapi', 'tpi': 'tapi', 'tpp': 'tapi', 'trs': 'terus', 'trus': 'terus',
'terusss': 'terus', 'smp': 'sampai', 'sampe': 'sampai', 'ampe': 'sampai',
'sm': 'sama', 'sma': 'sama', 'ama': 'sama', 'emg': 'memang', 'emang': 'memang',
'emng': 'memang', 'bkn': 'bukan', 'bknnya': 'bukannya', 'tdk': 'tidak',
'gak': 'tidak', 'ga': 'tidak', 'g': 'tidak', 'nggak': 'tidak', 'ngga': 'tidak',
'nggk': 'tidak', 'enggak': 'tidak', 'engga': 'tidak', 'kagak': 'tidak',
'gk': 'tidak', 'gpp': 'tidak apa apa',
# Kata ganti
'gw': 'aku', 'gua': 'aku', 'gue': 'aku', 'aku': 'aku', 'aq': 'aku',
'sya': 'saya', 'ane': 'aku', 'ana': 'aku', 'lu': 'lu', 'lo': 'lu',
'elu': 'lu', 'elo': 'lu', 'km': 'kamu', 'kamu': 'kamu', 'mu': 'kamu',
'dia': 'dia', 'dy': 'dia', 'dya': 'dia', 'mereka': 'mereka', 'mrk': 'mereka',
# Orang / sapaan
'org': 'orang', 'orng': 'orang', 'org2': 'orang', 'tmn': 'teman',
'temen': 'teman', 'tmen': 'teman', 'kwn': 'kawan', 'sob': 'teman',
'bestie': 'teman', 'besty': 'teman', 'kak': 'kak', 'kk': 'kak',
'kaka': 'kak', 'kakak': 'kak', 'bang': 'abang', 'bng': 'abang',
'bro': 'saudara', 'sis': 'saudari',
# Kata kerja / aktivitas
'bikin': 'membuat', 'bwt': 'buat', 'buat': 'buat', 'ngapain': 'ngapain',
'ngapa2in': 'mengapa', 'ngomong': 'berbicara', 'ngomongin': 'membicarakan',
'ngeliat': 'melihat', 'liat': 'lihat', 'liat2': 'lihat', 'ngelihat': 'melihat',
'nonton': 'menonton', 'nyari': 'mencari', 'cari': 'cari', 'nyoba': 'mencoba',
'coba': 'coba', 'pake': 'pakai', 'pakai': 'pakai', 'kasih': 'kasih',
'kasi': 'kasih', 'ngasih': 'memberi', 'dikasih': 'diberi', 'dikasi': 'diberi',
'ngambil': 'mengambil', 'ambil': 'ambil', 'nanya': 'bertanya', 'tanya': 'tanya',
'jawab': 'jawab', 'ngejek': 'mengejek', 'ejek': 'ejek', 'nyindir': 'menyindir', 'sindir': 'sindir',
# Kata sifat / ekspresi
'bagusss': 'bagus', 'baguss': 'bagus', 'bgs': 'bagus', 'jelek2': 'jelek',
'jelekk': 'jelek', 'keren2': 'keren', 'kerenn': 'keren', 'keren banget': 'keren banget',
'lucuu': 'lucu', 'lucuuu': 'lucu', 'lucu2': 'lucu', 'gemess': 'gemas',
'gemesss': 'gemas', 'gemoy': 'gemas', 'gemoyy': 'gemas', 'cantikk': 'cantik',
'cantikkk': 'cantik', 'cantiknyaaa': 'cantiknya', 'gantenggg': 'ganteng',
'gantengg': 'ganteng', 'imuttt': 'imut', 'imutttt': 'imut', 'maniss': 'manis',
'manisss': 'manis', 'cakepp': 'cakep', 'cakeppp': 'cakep', 'mantapp': 'mantap',
'mantappp': 'mantap', 'parahh': 'parah', 'parahhh': 'parah', 'anehh': 'aneh',
'anehhh': 'aneh', 'burukkk': 'buruk',
# Bahasa gaul
'sok': 'sok', 'alay': 'alay', 'norak': 'norak', 'lebay': 'berlebihan',
'lebayy': 'berlebihan', 'garing': 'garing', 'receh': 'receh', 'gabut': 'tidak ada kegiatan',
'mager': 'malas', 'baper': 'terbawa perasaan', 'bucin': 'budak cinta',
'kepo': 'ingin tahu', 'julid': 'iri', 'nyinyir': 'mencela', 'santuy': 'santai',
'santuyy': 'santai', 'mantul': 'mantap betul', 'wkwk': 'tertawa',
'wkwkwk': 'tertawa', 'wkwwk': 'tertawa', 'haha': 'tertawa', 'hahaha': 'tertawa',
# Singkatan internet
'otw': 'dalam perjalanan', 'btw': 'ngomong ngomong', 'fyi': 'sebagai informasi',
'cmiiw': 'koreksi jika saya salah', 'lol': 'tertawa', 'plis': 'tolong',
'pls': 'tolong', 'please': 'tolong', 'thx': 'terima kasih', 'tks': 'terima kasih',
'makasih': 'terima kasih', 'mksh': 'terima kasih', 'mksd': 'maksud',
'mksih': 'terima kasih', 'thanks': 'terima kasih',
# Angka / bentuk pendek
'bbrp': 'beberapa', 'brp': 'berapa', 'blh': 'boleh', 'bs': 'bisa',
'bisa': 'bisa', 'hrs': 'harus', 'harus': 'harus', 'jd': 'jadi',
'jdi': 'jadi', 'jdnya': 'jadinya', 'lg': 'lagi', 'lgi': 'lagi',
'sdg': 'sedang', 'dlu': 'dulu', 'dahulu': 'dulu', 'skrg': 'sekarang',
'skrng': 'sekarang', 'sekarang': 'sekarang', 'kpn': 'kapan', 'knp': 'kenapa',
'kenapa': 'kenapa', 'gmn': 'bagaimana', 'gmna': 'bagaimana', 'gimana': 'bagaimana',
'dmn': 'dimana', 'dimana': 'dimana', 'kmn': 'kemana', 'kemana': 'kemana',
# Lain-lain
'dpt': 'dapat', 'dapet': 'dapat', 'dri': 'dari', 'mslh': 'masalah',
'masalah': 'masalah', 'msh': 'masih', 'masi': 'masih', 'bnyk': 'banyak',
'byk': 'banyak', 'bnyak': 'banyak', 'sedikit': 'sedikit', 'sdkt': 'sedikit',
'pgn': 'ingin', 'pengen': 'ingin', 'pngn': 'ingin', 'ingin': 'ingin',
'mau': 'mau', 'mw': 'mau', 'udh': 'sudah', 'blm': 'belum', 'jg': 'juga',
'jga': 'juga', 'jgn': 'jangan', 'jangan': 'jangan', 'td': 'tadi',
'tadi': 'tadi', 'smoga': 'moga', 'moga': 'moga', 'semoga': 'semoga',
't': 'tidak',
}
kamus_alay_path = os.path.join(os.path.dirname(__file__), "kamus_alay.csv")
if os.path.exists(kamus_alay_path):
try:
kamus_df = pd.read_csv(kamus_alay_path)[['slang', 'formal']].dropna()
kamus_alay_1_dict = dict(zip(
kamus_df['slang'].astype(str).str.lower().str.strip(),
kamus_df['formal'].astype(str).str.lower().str.strip()
))
except Exception:
kamus_alay_1_dict = {}
else:
kamus_alay_1_dict = {}
# Rumus Alay 1: Kamus Manual + kamus_alay.csv
normalisasi_1 = kamus_alay_1_dict.copy()
normalisasi_1.update(normalisasi)
# Rumus Alay 2: new_kamusalay.csv (15.000+ entri kata gaul)
new_kamusalay_path = os.path.join(os.path.dirname(__file__), "new_kamusalay.csv")
if os.path.exists(new_kamusalay_path):
try:
new_kamus_df = pd.read_csv(new_kamusalay_path, header=None, encoding='latin-1').dropna()
kamus_alay_2_dict = dict(zip(
new_kamus_df[0].astype(str).str.lower().str.strip(),
new_kamus_df[1].astype(str).str.lower().str.strip()
))
except Exception as e:
print("[!] Gagal memuat new_kamusalay.csv:", e)
kamus_alay_2_dict = {}
else:
kamus_alay_2_dict = {}
# Gabungan kamus lengkap
normalisasi_gabungan = kamus_alay_2_dict.copy()
normalisasi_gabungan.update(normalisasi_1)
# ==========================================
# 2. STOPWORDS & STEMMER SETUP
# ==========================================
stop_words = set(stopwords.words('indonesian'))
kata_negasi = {
'tidak', 'bukan', 'jangan', 'belum', 'tanpa',
'gak', 'ga', 'gk', 'nggak', 'ngga', 'enggak', 'engga', 'tak',
'bukanlah', 'tidaklah', 'jangan', 'kurang'
}
kata_kontras_dan_penegas = {
'tapi', 'namun', 'padahal', 'sangat', 'banget', 'sekali', 'terlalu'
}
# Kata sentimen bermakna yang tidak boleh dibuang oleh stopword
kata_sentiment_simpan = {
'jelas', 'guna', 'manfaat', 'bisa', 'benar', 'pasti', 'penting',
'puas', 'baik', 'bagus', 'suka', 'sayang', 'senang', 'cinta',
'indah', 'hebat', 'tolong', 'bantu'
}
# Partikel obrolan medsos yang perlu dibuang agar tidak menempel pada negasi (mis: tidak_sih -> tidak_jelas)
partikel_tambahan = {
'sih', 'deh', 'kah', 'loh', 'lho', 'tuh', 'nih', 'dong', 'kok', 'kan', 'pun', 'ya', 'yah'
}
stop_words = (stop_words - kata_negasi - kata_kontras_dan_penegas - kata_sentiment_simpan) | partikel_tambahan
factory = StemmerFactory()
stemmer = factory.create_stemmer()
print("Stemmer berhasil dibuat!")
# ==========================================
# 6. FUNGSI PREPROCESSING
# ==========================================
def preprocessing(teks, use_stopword=False):
# 1. Pastikan teks berupa string dan case folding ke huruf kecil
teks = str(teks).lower()
# 2. Menangani bentuk negasi singkatan bahasa gaul: bagus't -> tidak bagus
teks = re.sub(r"(\w+)'t\b", r"tidak \1", teks)
# 3. Penanganan Teks Berdampingan dengan Emotikon (text terus emote / emote terus text)
# Sisipkan spasi di sekeliling karakter emoji/piktogram agar tidak melekat ke huruf
if regex is not None:
teks = regex.sub(r'(\p{Extended_Pictographic}+|\p{So}+|\p{Sk}+)', r' \1 ', teks)
else:
teks = re.sub(r'([\U00010000-\U0010ffff\u2600-\u27bf])', r' \1 ', teks)
# 4. Tangani tanda baca, petik, atau simbol (misal: assalamu'alaikum -> assalamu alaikum)
teks = re.sub(r"[^\w\s]|_", " ", teks)
# 5. Reduksi huruf berulang lebih dari 2 (contoh: bngttttt -> bngt, baguuus -> baguus)
teks = re.sub(r'(.)\1{2,}', r'\1\1', teks)
# 6. Tokenizing
tokens = [t for t in teks.split() if t]
# 7a. Normalisasi Rumus Alay 1 (Kamus Manual + kamus_alay.csv)
tokens_norm_1 = []
for kata in tokens:
if kata in KATA_PROTEKSI_TFIDF:
tokens_norm_1.append(kata)
continue
kata_ganti = normalisasi_1.get(kata, kata)
tokens_norm_1.extend(kata_ganti.split())
# 7b. Normalisasi Rumus Alay 2 (Kamus new_kamusalay.csv)
tokens_norm_2 = []
for kata in tokens_norm_1:
if kata in KATA_PROTEKSI_TFIDF:
tokens_norm_2.append(kata)
continue
kata_ganti = kamus_alay_2_dict.get(kata, kata)
tokens_norm_2.extend(kata_ganti.split())
# 8. Menghapus karakter selain huruf
tokens = [kata for kata in tokens_norm_2 if kata.isalpha()]
# 9. Stopword Removal (Default: False / nonaktif sesuai instruksi agar tidak banyak data kosong)
if use_stopword:
tokens = [kata for kata in tokens if kata not in stop_words]
# 10. Stemming menggunakan Sastrawi
tokens = [stemmer.stem(kata) for kata in tokens if kata.strip()]
# 11. Negation Tagging (menggabungkan kata negasi dengan kata setelahnya, misal: tidak_bagus)
kata_negasi_gabung = {'tidak', 'bukan', 'jangan', 'belum', 'kurang', 'tak'}
final_tokens = []
skip = False
for i in range(len(tokens)):
if skip:
skip = False
continue
if tokens[i] in kata_negasi_gabung and i + 1 < len(tokens):
final_tokens.append(f"{tokens[i]}_{tokens[i+1]}")
skip = True
else:
final_tokens.append(tokens[i])
# Menggabungkan token kembali
teks_hasil = ' '.join(final_tokens)
return teks_hasil
if __name__ == "__main__":
contoh = "sok cantik banget jadi cewek"
print("Contoh Masukan :", contoh)
print("Hasil Bersih :", preprocessing(contoh))

9
requirements.txt Normal file
View File

@ -0,0 +1,9 @@
Flask>=3.0.0
pandas>=2.0.0
scikit-learn>=1.3.0
joblib>=1.3.0
nltk>=3.8.0
Sastrawi>=1.0.1
pymysql>=1.1.0
cryptography>=42.0.0
regex>=2024.1.0

BIN
sentiment_tiktok.db Normal file

Binary file not shown.

365
sentiment_tiktok.sql Normal file
View File

@ -0,0 +1,365 @@
-- MySQL dump converted from sentiment_tiktok.db (SQLite)
-- Generated for phpMyAdmin / MySQL
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS=0;
-- Table structure for users
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`email` VARCHAR(255) NOT NULL,
`password_hash` TEXT NOT NULL,
`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_users_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Table structure for analyses
DROP TABLE IF EXISTS `analyses`;
CREATE TABLE `analyses` (
`id` INT NOT NULL AUTO_INCREMENT,
`user_id` INT NOT NULL,
`tiktok_url` TEXT NOT NULL,
`video_id` VARCHAR(255) DEFAULT NULL,
`status` VARCHAR(50) DEFAULT 'done',
`total_comments` INT DEFAULT 0,
`positive_count` INT DEFAULT 0,
`positive_percentage` DOUBLE DEFAULT 0.0,
`negative_count` INT DEFAULT 0,
`negative_percentage` DOUBLE DEFAULT 0.0,
`error` TEXT DEFAULT NULL,
`created_at` DATETIME(6) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_analyses_user_id` (`user_id`),
CONSTRAINT `fk_analyses_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Table structure for comments
DROP TABLE IF EXISTS `comments`;
CREATE TABLE `comments` (
`id` INT NOT NULL AUTO_INCREMENT,
`analysis_id` INT NOT NULL,
`original_comment` TEXT NOT NULL,
`cleaned_comment` TEXT DEFAULT NULL,
`sentiment` VARCHAR(50) NOT NULL,
`probability` DOUBLE NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_comments_analysis_id` (`analysis_id`),
CONSTRAINT `fk_comments_analysis` FOREIGN KEY (`analysis_id`) REFERENCES `analyses` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Data for `users` (1 rows)
INSERT INTO `users` (`id`, `name`, `email`, `password_hash`, `created_at`) VALUES (1, 'Admin Peneliti', 'admin@tiktok.com', 'scrypt:32768:8:1$LV2o1OlhA72Xgl0h$f2537eb4a25d27038e3e09ea4670ec4edc41664adcfc77f879196a5cef56bc5fa69571786527cff1be2a1d89e6fddc4148bdaf3cc0f103d7761845dff2d03b9f', '2026-10-01 13:03:36');
-- Data for `analyses` (1 rows)
INSERT INTO `analyses` (`id`, `user_id`, `tiktok_url`, `video_id`, `status`, `total_comments`, `positive_count`, `positive_percentage`, `negative_count`, `negative_percentage`, `error`, `created_at`) VALUES (1, 1, 'https://www.tiktok.com/@creator/video/7123456789012345678', '7123456789012345678', 'done', 300, 193, 64.3, 107, 35.7, NULL, '2026-10-01T13:03:51.596064Z');
-- Data for `comments` (300 rows)
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (1, 1, 'terharu nonton video ini, pesan moralnya dapet banget', 'haru tonton video pesan moral banget', 'POSITIF', 0.5154);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (2, 1, 'parah banget hasilnya ga sesuai sama yang diomongin', 'parah banget hasil tidak_sesuai diomongin', 'POSITIF', 0.5012);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (3, 1, 'bagus banget kualitas videonya, visual dan audionya jernih', 'bagus banget kualitas video visual audio jernih', 'POSITIF', 0.7399);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (4, 1, 'pembodohan publik ini mah, tolong jangan dipercaya', 'bodoh publik mah tolong jangan_percaya', 'NEGATIF', 0.6374);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (5, 1, 'norak banget sumpah ga ada bagus-bagusnya konten kayak gini beneran', 'norak banget sumpah tidak_konten kayak benar', 'NEGATIF', 0.5977);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (6, 1, 'mantap betul ilmunya, makasih banyak ya kak sukses selalu', 'mantap ilmu terima kasih ya kak sukses', 'POSITIF', 0.7655);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (7, 1, 'suaranya adem banget didenger, penjelasannya runtut ya ampun', 'suara adem banget didenger jelas runtut ya ampun', 'POSITIF', 0.6201);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (8, 1, 'paling suka pas bagian tips terakhir, beneran ngebantu', 'suka pas tips benar bantu', 'NEGATIF', 0.5979);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (9, 1, 'bagus pol hasilnya rapi banget kak, berbakat sekali parah sih', 'bagus pol hasil rapi banget kak bakat sekali parah sih', 'POSITIF', 0.8137);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (10, 1, 'jelek banget penjelasannya ga jelas muter-muter bikin pusing', 'jelek banget jelas tidak_pusing', 'NEGATIF', 0.5695);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (11, 1, 'ga usah sok pintar deh, teorinya salah total itu', 'tidak_sok pintar deh teori salah total', 'POSITIF', 0.5149);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (12, 1, 'kreatif banget idenya kak, gak kepikiran sebelumnya', 'kreatif banget ide kak tidak_pikir', 'POSITIF', 0.8359);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (13, 1, 'lucu banget ekspresinya di akhir video haha ngakak banget', 'lucu banget ekspresi video tertawa akak banget', 'POSITIF', 0.6543);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (14, 1, 'bener-bener nyesel ngikutin sarannya, malah tambah ancur', 'sesal ikut saran hancur', 'NEGATIF', 0.5601);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (15, 1, 'semangat berkarya kak, konten edukatifnya sangat menginspirasi', 'semangat karya kak konten edukatif sangat inspirasi', 'POSITIF', 0.8821);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (16, 1, 'mantap betul ilmunya, makasih banyak ya kak sukses selalu sumpah', 'mantap ilmu terima kasih ya kak sukses sumpah', 'POSITIF', 0.7519);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (17, 1, 'lucu banget ekspresinya di akhir video haha ngakak banget', 'lucu banget ekspresi video tertawa akak banget', 'POSITIF', 0.6543);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (18, 1, 'bagus banget kualitas videonya, visual dan audionya jernih gan', 'bagus banget kualitas video visual audio jernih gan', 'POSITIF', 0.7399);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (19, 1, 'clickbait parah judul sama isinya sama sekali ga nyambung parah sih', 'clickbait parah judul isi sekali tidak_sambung parah sih', 'NEGATIF', 0.5661);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (20, 1, 'kreatif banget idenya kak, gak kepikiran sebelumnya banget kak', 'kreatif banget ide kak tidak_pikir banget kak', 'POSITIF', 0.8925);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (21, 1, 'paling suka pas bagian tips terakhir, beneran ngebantu', 'suka pas tips benar bantu', 'NEGATIF', 0.5979);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (22, 1, 'bener-bener nyesel ngikutin sarannya, malah tambah ancur', 'sesal ikut saran hancur', 'NEGATIF', 0.5601);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (23, 1, 'lucu banget ekspresinya di akhir video haha ngakak banget', 'lucu banget ekspresi video tertawa akak banget', 'POSITIF', 0.6543);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (24, 1, 'konten bermutu kayak gini yang harusnya trending di tiktok sumpah', 'konten mutu kayak trending tiktok sumpah', 'POSITIF', 0.5195);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (25, 1, 'terharu nonton video ini, pesan moralnya dapet banget sumpah', 'haru tonton video pesan moral banget sumpah', 'NEGATIF', 0.5183);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (26, 1, 'makin ke sini kontennya makin garing dan ga bermakna banget kak', 'konten garing tidak_makna banget kak', 'POSITIF', 0.7564);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (27, 1, 'terharu nonton video ini, pesan moralnya dapet banget ya ampun', 'haru tonton video pesan moral banget ya ampun', 'POSITIF', 0.5614);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (28, 1, 'selalu nungguin konten kakak, ga pernah gagal bikin semangat', 'tunggu konten kak tidak_gagal semangat', 'POSITIF', 0.7935);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (29, 1, 'ngomong apa sih ga jelas banget artikulasinya jelek', 'bicara sih tidak_banget artikulasi jelek', 'NEGATIF', 0.7061);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (30, 1, 'selalu nungguin konten kakak, ga pernah gagal bikin semangat', 'tunggu konten kak tidak_gagal semangat', 'POSITIF', 0.7935);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (31, 1, 'rekomendasi terbaik sih ini, udah coba dan hasilnya memuaskan banget kak', 'rekomendasi baik sih coba hasil muas banget kak', 'POSITIF', 0.759);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (32, 1, 'sok cantik banget jadi cewek, gayanya norak dan alay', 'sok cantik banget cewek gaya norak alay', 'NEGATIF', 0.5901);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (33, 1, 'sangat mengecewakan pelayanannya lambat dan judes ya ampun', 'sangat kecewa layan lambat judes ya ampun', 'POSITIF', 0.6482);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (34, 1, 'cantik banget kak masyaAllah, outfitnya beli di mana ya?', 'cantik banget kak masyaallah outfitnya beli ya', 'POSITIF', 0.8306);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (35, 1, 'semoga rezekinya lancar terus kak, kontennya selalu positif parah sih', 'moga rezeki lancar kak konten positif parah sih', 'POSITIF', 0.834);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (36, 1, 'cantik banget kak masyaAllah, outfitnya beli di mana ya?', 'cantik banget kak masyaallah outfitnya beli ya', 'POSITIF', 0.8306);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (37, 1, 'lebay banget deh ekspresinya dibuat-buat ga natural fix no debat', 'banget deh ekspresi tidak_natural fix no debat', 'NEGATIF', 0.5038);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (38, 1, 'clickbait parah judul sama isinya sama sekali ga nyambung', 'clickbait parah judul isi sekali tidak_sambung', 'NEGATIF', 0.532);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (39, 1, 'semoga rezekinya lancar terus kak, kontennya selalu positif parah sih', 'moga rezeki lancar kak konten positif parah sih', 'POSITIF', 0.834);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (40, 1, 'jelek banget penjelasannya ga jelas muter-muter bikin pusing', 'jelek banget jelas tidak_pusing', 'NEGATIF', 0.5695);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (41, 1, 'semoga rezekinya lancar terus kak, kontennya selalu positif', 'moga rezeki lancar kak konten positif', 'POSITIF', 0.8595);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (42, 1, 'lucu banget ekspresinya di akhir video haha ngakak banget', 'lucu banget ekspresi video tertawa akak banget', 'POSITIF', 0.6543);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (43, 1, 'gak suka banget sama cara bicaranya, sombong dan angkuh', 'tidak_suka banget bicara sombong angkuh', 'NEGATIF', 0.6805);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (44, 1, 'suaranya adem banget didenger, penjelasannya runtut', 'suara adem banget didenger jelas runtut', 'POSITIF', 0.5084);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (45, 1, 'wah baru tahu trik ini, keren banget makasih tipsnya!', 'trik keren banget terima kasih tipsnya', 'POSITIF', 0.695);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (46, 1, 'kreatif banget idenya kak, gak kepikiran sebelumnya', 'kreatif banget ide kak tidak_pikir', 'POSITIF', 0.8359);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (47, 1, 'mantap betul ilmunya, makasih banyak ya kak sukses selalu banget kak', 'mantap ilmu terima kasih ya kak sukses banget kak', 'POSITIF', 0.8536);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (48, 1, 'terharu nonton video ini, pesan moralnya dapet banget', 'haru tonton video pesan moral banget', 'POSITIF', 0.5154);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (49, 1, 'terharu nonton video ini, pesan moralnya dapet banget', 'haru tonton video pesan moral banget', 'POSITIF', 0.5154);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (50, 1, 'jelek parah kualitasnya, baru dipakai sekali langsung rusak', 'jelek parah kualitas pakai sekali langsung rusak', 'NEGATIF', 0.6173);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (51, 1, 'paling suka pas bagian tips terakhir, beneran ngebantu', 'suka pas tips benar bantu', 'NEGATIF', 0.5979);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (52, 1, 'ga usah sok pintar deh, teorinya salah total itu', 'tidak_sok pintar deh teori salah total', 'POSITIF', 0.5149);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (53, 1, 'clickbait parah judul sama isinya sama sekali ga nyambung fix no debat', 'clickbait parah judul isi sekali tidak_sambung fix no debat', 'NEGATIF', 0.5206);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (54, 1, 'makasih banyak ya kak sudah berbagi informasi yang sangat berharga beneran', 'terima kasih ya kak bagi informasi sangat harga benar', 'POSITIF', 0.6528);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (55, 1, 'buruk banget kualitas videonya burem ga keliatan apa-apa tolong', 'buruk banget kualitas video buram tidak_tolong', 'NEGATIF', 0.5211);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (56, 1, 'lucu banget ekspresinya di akhir video haha ngakak banget', 'lucu banget ekspresi video tertawa akak banget', 'POSITIF', 0.6543);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (57, 1, 'norak banget sumpah ga ada bagus-bagusnya konten kayak gini tolong', 'norak banget sumpah tidak_konten kayak tolong', 'NEGATIF', 0.55);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (58, 1, 'cantik banget kak masyaAllah, outfitnya beli di mana ya?', 'cantik banget kak masyaallah outfitnya beli ya', 'POSITIF', 0.8306);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (59, 1, 'suka banget sama cara penyampaiannya, santai tapi masuk materinya tolong', 'suka banget sampai santai tapi masuk materi tolong', 'POSITIF', 0.6054);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (60, 1, 'rekomendasi terbaik sih ini, udah coba dan hasilnya memuaskan tolong', 'rekomendasi baik sih coba hasil muas tolong', 'POSITIF', 0.5104);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (61, 1, 'berfaedah banget kontennya kak, auto follow dan share sumpah', 'faedah banget konten kak auto follow share sumpah', 'POSITIF', 0.7184);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (62, 1, 'wah baru tahu trik ini, keren banget makasih tipsnya!', 'trik keren banget terima kasih tipsnya', 'POSITIF', 0.695);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (63, 1, 'wah baru tahu trik ini, keren banget makasih tipsnya!', 'trik keren banget terima kasih tipsnya', 'POSITIF', 0.695);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (64, 1, 'keren abis tutorialnya, langsung paham cara pakainya', 'keren habis tutorial langsung paham pakai', 'POSITIF', 0.5661);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (65, 1, 'masyaAllah kak cantik luar dalam, pembawaannya ramah', 'masyaallah kak cantik bawa ramah', 'POSITIF', 0.7933);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (66, 1, 'sok cantik banget jadi cewek, gayanya norak dan alay', 'sok cantik banget cewek gaya norak alay', 'NEGATIF', 0.5901);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (67, 1, 'selalu nungguin konten kakak, ga pernah gagal bikin semangat sumpah', 'tunggu konten kak tidak_gagal semangat sumpah', 'POSITIF', 0.7709);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (68, 1, 'semoga rezekinya lancar terus kak, kontennya selalu positif gan', 'moga rezeki lancar kak konten positif gan', 'POSITIF', 0.8595);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (69, 1, 'berfaedah banget kontennya kak, auto follow dan share', 'faedah banget konten kak auto follow share', 'POSITIF', 0.7399);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (70, 1, 'penjelasannya detail dan sangat mudah dipahami pemula tolong', 'jelas detail sangat mudah paham mula tolong', 'POSITIF', 0.59);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (71, 1, 'selalu nungguin konten kakak, ga pernah gagal bikin semangat', 'tunggu konten kak tidak_gagal semangat', 'POSITIF', 0.7935);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (72, 1, 'bener-bener nyesel ngikutin sarannya, malah tambah ancur', 'sesal ikut saran hancur', 'NEGATIF', 0.5601);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (73, 1, 'paling suka pas bagian tips terakhir, beneran ngebantu deh', 'suka pas tips benar bantu deh', 'NEGATIF', 0.5977);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (74, 1, 'gak suka banget sama cara bicaranya, sombong dan angkuh', 'tidak_suka banget bicara sombong angkuh', 'NEGATIF', 0.6805);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (75, 1, 'semangat berkarya kak, konten edukatifnya sangat menginspirasi gan', 'semangat karya kak konten edukatif sangat inspirasi gan', 'POSITIF', 0.8821);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (76, 1, 'jangan beli di sini penipu barangnya sangat mengecewakan', 'jangan_beli tipu barang sangat kecewa', 'NEGATIF', 0.5725);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (77, 1, 'penjelasannya detail dan sangat mudah dipahami pemula', 'jelas detail sangat mudah paham mula', 'POSITIF', 0.5946);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (78, 1, 'beneran worth it dicoba, hasilnya sesuai ekspektasi', 'benar worth coba hasil sesuai ekspektasi', 'NEGATIF', 0.609);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (79, 1, 'lebay banget deh ekspresinya dibuat-buat ga natural gan', 'banget deh ekspresi tidak_natural gan', 'NEGATIF', 0.513);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (80, 1, 'terima kasih infonya kak sangat membantu buat tugas akhir saya', 'terima info kak sangat bantu tugas', 'POSITIF', 0.6957);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (81, 1, 'jangan beli di sini penipu barangnya sangat mengecewakan wkwk', 'jangan_beli tipu barang sangat kecewa tertawa', 'NEGATIF', 0.6113);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (82, 1, 'bagus pol hasilnya rapi banget kak, berbakat sekali', 'bagus pol hasil rapi banget kak bakat sekali', 'POSITIF', 0.8355);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (83, 1, 'makasih banyak ya kak sudah berbagi informasi yang sangat berharga', 'terima kasih ya kak bagi informasi sangat harga', 'POSITIF', 0.6985);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (84, 1, 'jelek parah kualitasnya, baru dipakai sekali langsung rusak', 'jelek parah kualitas pakai sekali langsung rusak', 'NEGATIF', 0.6173);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (85, 1, 'berfaedah banget kontennya kak, auto follow dan share', 'faedah banget konten kak auto follow share', 'POSITIF', 0.7399);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (86, 1, 'jelek parah kualitasnya, baru dipakai sekali langsung rusak', 'jelek parah kualitas pakai sekali langsung rusak', 'NEGATIF', 0.6173);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (87, 1, 'pembodohan publik ini mah, tolong jangan dipercaya', 'bodoh publik mah tolong jangan_percaya', 'NEGATIF', 0.6374);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (88, 1, 'mantap betul ilmunya, makasih banyak ya kak sukses selalu ya ampun', 'mantap ilmu terima kasih ya kak sukses ya ampun', 'POSITIF', 0.7778);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (89, 1, 'bagus pol hasilnya rapi banget kak, berbakat sekali', 'bagus pol hasil rapi banget kak bakat sekali', 'POSITIF', 0.8355);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (90, 1, 'keren abis tutorialnya, langsung paham cara pakainya', 'keren habis tutorial langsung paham pakai', 'POSITIF', 0.5661);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (91, 1, 'selalu nungguin konten kakak, ga pernah gagal bikin semangat deh', 'tunggu konten kak tidak_gagal semangat deh', 'POSITIF', 0.7617);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (92, 1, 'suaranya adem banget didenger, penjelasannya runtut', 'suara adem banget didenger jelas runtut', 'POSITIF', 0.5084);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (93, 1, 'cantik banget kak videonya, sangat bermanfaat dan mengedukasi! beneran', 'cantik banget kak video sangat manfaat edukasi benar', 'POSITIF', 0.8172);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (94, 1, 'buruk banget kualitas videonya burem ga keliatan apa-apa', 'buruk banget kualitas video buram tidak', 'NEGATIF', 0.5851);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (95, 1, 'makin ke sini kontennya makin garing dan ga bermakna', 'konten garing tidak_makna', 'NEGATIF', 0.5539);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (96, 1, 'lebay banget deh ekspresinya dibuat-buat ga natural', 'banget deh ekspresi tidak_natural', 'NEGATIF', 0.513);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (97, 1, 'berfaedah banget kontennya kak, auto follow dan share banget kak', 'faedah banget konten kak auto follow share banget kak', 'POSITIF', 0.8356);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (98, 1, 'salah info tuh, belajar lagi sebelum bikin video edukasi', 'salah info tuh ajar video edukasi', 'NEGATIF', 0.5511);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (99, 1, 'berfaedah banget kontennya kak, auto follow dan share', 'faedah banget konten kak auto follow share', 'POSITIF', 0.7399);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (100, 1, 'paling suka pas bagian tips terakhir, beneran ngebantu deh', 'suka pas tips benar bantu deh', 'NEGATIF', 0.5977);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (101, 1, 'rugi waktu dan kuota nonton video ginian ga ada faedahnya wkwk', 'rugi kuota tonton video tidak_faedah tertawa', 'NEGATIF', 0.6918);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (102, 1, 'ga usah sok pintar deh, teorinya salah total itu', 'tidak_sok pintar deh teori salah total', 'POSITIF', 0.5149);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (103, 1, 'kreatif banget idenya kak, gak kepikiran sebelumnya', 'kreatif banget ide kak tidak_pikir', 'POSITIF', 0.8359);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (104, 1, 'kakak baik banget mau share resep rahasia ini gratis', 'kak banget share resep rahasia gratis', 'POSITIF', 0.7358);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (105, 1, 'beneran worth it dicoba, hasilnya sesuai ekspektasi gan', 'benar worth coba hasil sesuai ekspektasi gan', 'NEGATIF', 0.609);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (106, 1, 'terima kasih infonya kak sangat membantu buat tugas akhir saya tolong', 'terima info kak sangat bantu tugas tolong', 'POSITIF', 0.6854);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (107, 1, 'cantik banget kak masyaAllah, outfitnya beli di mana ya? fix no debat', 'cantik banget kak masyaallah outfitnya beli ya fix no debat', 'POSITIF', 0.8214);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (108, 1, 'bohong banget ini mah ga sesuai realita di lapangan', 'bohong banget mah tidak_sesuai realita lapang', 'NEGATIF', 0.6018);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (109, 1, 'gak usah lebay deh biasa aja ga ada spesialnya', 'tidak_deh tidak_spesial', 'NEGATIF', 0.5714);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (110, 1, 'norak banget sumpah ga ada bagus-bagusnya konten kayak gini', 'norak banget sumpah tidak_konten kayak', 'NEGATIF', 0.5562);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (111, 1, 'paling suka pas bagian tips terakhir, beneran ngebantu', 'suka pas tips benar bantu', 'NEGATIF', 0.5979);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (112, 1, 'bikin emosi nontonnya, informasi yang disampaikan menyesatkan', 'emosi nontonnya informasi sesat', 'NEGATIF', 0.6076);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (113, 1, 'pembodohan publik ini mah, tolong jangan dipercaya deh', 'bodoh publik mah tolong jangan_percaya deh', 'NEGATIF', 0.6278);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (114, 1, 'mantap betul ilmunya, makasih banyak ya kak sukses selalu', 'mantap ilmu terima kasih ya kak sukses', 'POSITIF', 0.7655);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (115, 1, 'makasih banyak ya kak sudah berbagi informasi yang sangat berharga deh', 'terima kasih ya kak bagi informasi sangat harga deh', 'POSITIF', 0.6817);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (116, 1, 'suka banget sama cara penyampaiannya, santai tapi masuk materinya', 'suka banget sampai santai tapi masuk materi', 'POSITIF', 0.6113);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (117, 1, 'parah banget hasilnya ga sesuai sama yang diomongin', 'parah banget hasil tidak_sesuai diomongin', 'POSITIF', 0.5012);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (118, 1, 'masyaAllah kak cantik luar dalam, pembawaannya ramah', 'masyaallah kak cantik bawa ramah', 'POSITIF', 0.7933);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (119, 1, 'bener-bener nyesel ngikutin sarannya, malah tambah ancur ya ampun', 'sesal ikut saran hancur ya ampun', 'POSITIF', 0.5096);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (120, 1, 'konten ga bermutu buang-buang kuota doang nontonnya parah sih', 'konten tidak_mutu kuota doang nontonnya parah sih', 'NEGATIF', 0.5858);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (121, 1, 'kreatif banget idenya kak, gak kepikiran sebelumnya', 'kreatif banget ide kak tidak_pikir', 'POSITIF', 0.8359);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (122, 1, 'cantik banget kak masyaAllah, outfitnya beli di mana ya? parah sih', 'cantik banget kak masyaallah outfitnya beli ya parah sih', 'POSITIF', 0.8082);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (123, 1, 'wah baru tahu trik ini, keren banget makasih tipsnya!', 'trik keren banget terima kasih tipsnya', 'POSITIF', 0.695);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (124, 1, 'kakak baik banget mau share resep rahasia ini gratis', 'kak banget share resep rahasia gratis', 'POSITIF', 0.7358);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (125, 1, 'semangat berkarya kak, konten edukatifnya sangat menginspirasi fix no debat', 'semangat karya kak konten edukatif sangat inspirasi fix no debat', 'POSITIF', 0.8608);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (126, 1, 'lucu banget ekspresinya di akhir video haha ngakak banget', 'lucu banget ekspresi video tertawa akak banget', 'POSITIF', 0.6543);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (127, 1, 'males banget liat kelakuannya caper banget di kamera fix no debat', 'malas banget lihat laku caper banget kamera fix no debat', 'POSITIF', 0.5501);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (128, 1, 'selalu nungguin konten kakak, ga pernah gagal bikin semangat fix no debat', 'tunggu konten kak tidak_gagal semangat fix no debat', 'POSITIF', 0.7758);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (129, 1, 'suka banget sama cara penyampaiannya, santai tapi masuk materinya', 'suka banget sampai santai tapi masuk materi', 'POSITIF', 0.6113);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (130, 1, 'berfaedah banget kontennya kak, auto follow dan share deh', 'faedah banget konten kak auto follow share deh', 'POSITIF', 0.7083);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (131, 1, 'makasih banyak ya kak sudah berbagi informasi yang sangat berharga parah sih', 'terima kasih ya kak bagi informasi sangat harga parah sih', 'POSITIF', 0.6711);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (132, 1, 'terharu nonton video ini, pesan moralnya dapet banget', 'haru tonton video pesan moral banget', 'POSITIF', 0.5154);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (133, 1, 'jelek banget penjelasannya ga jelas muter-muter bikin pusing', 'jelek banget jelas tidak_pusing', 'NEGATIF', 0.5695);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (134, 1, 'terima kasih infonya kak sangat membantu buat tugas akhir saya', 'terima info kak sangat bantu tugas', 'POSITIF', 0.6957);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (135, 1, 'selalu nungguin konten kakak, ga pernah gagal bikin semangat fix no debat', 'tunggu konten kak tidak_gagal semangat fix no debat', 'POSITIF', 0.7758);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (136, 1, 'terharu nonton video ini, pesan moralnya dapet banget fix no debat', 'haru tonton video pesan moral banget fix no debat', 'POSITIF', 0.5217);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (137, 1, 'sangat mengecewakan pelayanannya lambat dan judes fix no debat', 'sangat kecewa layan lambat judes fix no debat', 'POSITIF', 0.5542);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (138, 1, 'terima kasih infonya kak sangat membantu buat tugas akhir saya banget kak', 'terima info kak sangat bantu tugas banget kak', 'POSITIF', 0.8174);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (139, 1, 'selalu nungguin konten kakak, ga pernah gagal bikin semangat', 'tunggu konten kak tidak_gagal semangat', 'POSITIF', 0.7935);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (140, 1, 'wah baru tahu trik ini, keren banget makasih tipsnya! deh', 'trik keren banget terima kasih tipsnya deh', 'POSITIF', 0.671);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (141, 1, 'terharu nonton video ini, pesan moralnya dapet banget', 'haru tonton video pesan moral banget', 'POSITIF', 0.5154);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (142, 1, 'clickbait parah judul sama isinya sama sekali ga nyambung', 'clickbait parah judul isi sekali tidak_sambung', 'NEGATIF', 0.532);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (143, 1, 'lucu banget ekspresinya di akhir video haha ngakak banget', 'lucu banget ekspresi video tertawa akak banget', 'POSITIF', 0.6543);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (144, 1, 'cantik banget kak masyaAllah, outfitnya beli di mana ya? beneran', 'cantik banget kak masyaallah outfitnya beli ya benar', 'POSITIF', 0.7904);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (145, 1, 'paling suka pas bagian tips terakhir, beneran ngebantu', 'suka pas tips benar bantu', 'NEGATIF', 0.5979);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (146, 1, 'bener-bener nyesel ngikutin sarannya, malah tambah ancur', 'sesal ikut saran hancur', 'NEGATIF', 0.5601);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (147, 1, 'ngomong apa sih ga jelas banget artikulasinya jelek parah sih', 'bicara sih tidak_banget artikulasi jelek parah sih', 'NEGATIF', 0.7101);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (148, 1, 'gak suka banget sama cara bicaranya, sombong dan angkuh', 'tidak_suka banget bicara sombong angkuh', 'NEGATIF', 0.6805);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (149, 1, 'bagus pol hasilnya rapi banget kak, berbakat sekali', 'bagus pol hasil rapi banget kak bakat sekali', 'POSITIF', 0.8355);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (150, 1, 'bener-bener nyesel ngikutin sarannya, malah tambah ancur wkwk', 'sesal ikut saran hancur tertawa', 'NEGATIF', 0.5984);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (151, 1, 'konten ga bermutu buang-buang kuota doang nontonnya', 'konten tidak_mutu kuota doang nontonnya', 'NEGATIF', 0.5449);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (152, 1, 'cantik banget kak videonya, sangat bermanfaat dan mengedukasi!', 'cantik banget kak video sangat manfaat edukasi', 'POSITIF', 0.8707);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (153, 1, 'cantik banget kak masyaAllah, outfitnya beli di mana ya?', 'cantik banget kak masyaallah outfitnya beli ya', 'POSITIF', 0.8306);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (154, 1, 'mantap betul ilmunya, makasih banyak ya kak sukses selalu gan', 'mantap ilmu terima kasih ya kak sukses gan', 'POSITIF', 0.7655);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (155, 1, 'norak banget sumpah ga ada bagus-bagusnya konten kayak gini fix no debat', 'norak banget sumpah tidak_konten kayak fix no debat', 'NEGATIF', 0.543);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (156, 1, 'keren abis tutorialnya, langsung paham cara pakainya', 'keren habis tutorial langsung paham pakai', 'POSITIF', 0.5661);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (157, 1, 'lucu banget ekspresinya di akhir video haha ngakak banget fix no debat', 'lucu banget ekspresi video tertawa akak banget fix no debat', 'POSITIF', 0.6516);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (158, 1, 'konten toxic kayak gini kok masih bisa viral heran', 'konten toxic kayak viral heran', 'NEGATIF', 0.5503);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (159, 1, 'kreatif banget idenya kak, gak kepikiran sebelumnya', 'kreatif banget ide kak tidak_pikir', 'POSITIF', 0.8359);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (160, 1, 'gak usah lebay deh biasa aja ga ada spesialnya', 'tidak_deh tidak_spesial', 'NEGATIF', 0.5714);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (161, 1, 'jelek parah kualitasnya, baru dipakai sekali langsung rusak sumpah', 'jelek parah kualitas pakai sekali langsung rusak sumpah', 'NEGATIF', 0.6078);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (162, 1, 'mantap betul ilmunya, makasih banyak ya kak sukses selalu banget kak', 'mantap ilmu terima kasih ya kak sukses banget kak', 'POSITIF', 0.8536);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (163, 1, 'cantik banget kak videonya, sangat bermanfaat dan mengedukasi!', 'cantik banget kak video sangat manfaat edukasi', 'POSITIF', 0.8707);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (164, 1, 'wah baru tahu trik ini, keren banget makasih tipsnya!', 'trik keren banget terima kasih tipsnya', 'POSITIF', 0.695);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (165, 1, 'gak usah lebay deh biasa aja ga ada spesialnya', 'tidak_deh tidak_spesial', 'NEGATIF', 0.5714);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (166, 1, 'cantik banget kak videonya, sangat bermanfaat dan mengedukasi! wkwk', 'cantik banget kak video sangat manfaat edukasi tertawa', 'POSITIF', 0.8277);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (167, 1, 'makasih banyak ya kak sudah berbagi informasi yang sangat berharga deh', 'terima kasih ya kak bagi informasi sangat harga deh', 'POSITIF', 0.6817);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (168, 1, 'penjelasannya detail dan sangat mudah dipahami pemula', 'jelas detail sangat mudah paham mula', 'POSITIF', 0.5946);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (169, 1, 'bagus pol hasilnya rapi banget kak, berbakat sekali', 'bagus pol hasil rapi banget kak bakat sekali', 'POSITIF', 0.8355);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (170, 1, 'wah baru tahu trik ini, keren banget makasih tipsnya! fix no debat', 'trik keren banget terima kasih tipsnya fix no debat', 'POSITIF', 0.6865);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (171, 1, 'berfaedah banget kontennya kak, auto follow dan share', 'faedah banget konten kak auto follow share', 'POSITIF', 0.7399);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (172, 1, 'jelek banget penjelasannya ga jelas muter-muter bikin pusing fix no debat', 'jelek banget jelas tidak_pusing fix no debat', 'NEGATIF', 0.5523);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (173, 1, 'bagus banget kualitas videonya, visual dan audionya jernih banget kak', 'bagus banget kualitas video visual audio jernih banget kak', 'POSITIF', 0.8738);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (174, 1, 'rekomendasi terbaik sih ini, udah coba dan hasilnya memuaskan', 'rekomendasi baik sih coba hasil muas', 'POSITIF', 0.5098);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (175, 1, 'bagus pol hasilnya rapi banget kak, berbakat sekali sumpah', 'bagus pol hasil rapi banget kak bakat sekali sumpah', 'POSITIF', 0.8233);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (176, 1, 'gak usah lebay deh biasa aja ga ada spesialnya', 'tidak_deh tidak_spesial', 'NEGATIF', 0.5714);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (177, 1, 'terima kasih infonya kak sangat membantu buat tugas akhir saya deh', 'terima info kak sangat bantu tugas deh', 'POSITIF', 0.6714);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (178, 1, 'bohong banget ini mah ga sesuai realita di lapangan fix no debat', 'bohong banget mah tidak_sesuai realita lapang fix no debat', 'NEGATIF', 0.5835);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (179, 1, 'gak suka banget sama cara bicaranya, sombong dan angkuh parah sih', 'tidak_suka banget bicara sombong angkuh parah sih', 'NEGATIF', 0.7009);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (180, 1, 'lucu banget ekspresinya di akhir video haha ngakak banget tolong', 'lucu banget ekspresi video tertawa akak banget tolong', 'POSITIF', 0.6358);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (181, 1, 'bener-bener nyesel ngikutin sarannya, malah tambah ancur deh', 'sesal ikut saran hancur deh', 'NEGATIF', 0.5636);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (182, 1, 'sok cantik banget jadi cewek, gayanya norak dan alay', 'sok cantik banget cewek gaya norak alay', 'NEGATIF', 0.5901);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (183, 1, 'paling suka pas bagian tips terakhir, beneran ngebantu banget kak', 'suka pas tips benar bantu banget kak', 'POSITIF', 0.6738);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (184, 1, 'jelek parah kualitasnya, baru dipakai sekali langsung rusak', 'jelek parah kualitas pakai sekali langsung rusak', 'NEGATIF', 0.6173);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (185, 1, 'salah info tuh, belajar lagi sebelum bikin video edukasi ya ampun', 'salah info tuh ajar video edukasi ya ampun', 'POSITIF', 0.5148);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (186, 1, 'bohong banget ini mah ga sesuai realita di lapangan', 'bohong banget mah tidak_sesuai realita lapang', 'NEGATIF', 0.6018);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (187, 1, 'ga usah sok pintar deh, teorinya salah total itu', 'tidak_sok pintar deh teori salah total', 'POSITIF', 0.5149);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (188, 1, 'konten toxic kayak gini kok masih bisa viral heran', 'konten toxic kayak viral heran', 'NEGATIF', 0.5503);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (189, 1, 'cantik banget kak masyaAllah, outfitnya beli di mana ya?', 'cantik banget kak masyaallah outfitnya beli ya', 'POSITIF', 0.8306);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (190, 1, 'jelek banget penjelasannya ga jelas muter-muter bikin pusing', 'jelek banget jelas tidak_pusing', 'NEGATIF', 0.5695);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (191, 1, 'salah info tuh, belajar lagi sebelum bikin video edukasi', 'salah info tuh ajar video edukasi', 'NEGATIF', 0.5511);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (192, 1, 'bikin emosi nontonnya, informasi yang disampaikan menyesatkan', 'emosi nontonnya informasi sesat', 'NEGATIF', 0.6076);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (193, 1, 'suaranya adem banget didenger, penjelasannya runtut', 'suara adem banget didenger jelas runtut', 'POSITIF', 0.5084);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (194, 1, 'parah banget hasilnya ga sesuai sama yang diomongin', 'parah banget hasil tidak_sesuai diomongin', 'POSITIF', 0.5012);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (195, 1, 'semoga rezekinya lancar terus kak, kontennya selalu positif', 'moga rezeki lancar kak konten positif', 'POSITIF', 0.8595);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (196, 1, 'parah banget hasilnya ga sesuai sama yang diomongin', 'parah banget hasil tidak_sesuai diomongin', 'POSITIF', 0.5012);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (197, 1, 'penjelasannya detail dan sangat mudah dipahami pemula', 'jelas detail sangat mudah paham mula', 'POSITIF', 0.5946);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (198, 1, 'buruk banget kualitas videonya burem ga keliatan apa-apa tolong', 'buruk banget kualitas video buram tidak_tolong', 'NEGATIF', 0.5211);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (199, 1, 'beneran worth it dicoba, hasilnya sesuai ekspektasi banget kak', 'benar worth coba hasil sesuai ekspektasi banget kak', 'POSITIF', 0.6485);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (200, 1, 'rekomendasi terbaik sih ini, udah coba dan hasilnya memuaskan ya ampun', 'rekomendasi baik sih coba hasil muas ya ampun', 'POSITIF', 0.589);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (201, 1, 'kakak baik banget mau share resep rahasia ini gratis', 'kak banget share resep rahasia gratis', 'POSITIF', 0.7358);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (202, 1, 'konten bermutu kayak gini yang harusnya trending di tiktok', 'konten mutu kayak trending tiktok', 'POSITIF', 0.5259);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (203, 1, 'gak suka banget sama cara bicaranya, sombong dan angkuh', 'tidak_suka banget bicara sombong angkuh', 'NEGATIF', 0.6805);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (204, 1, 'mantap betul ilmunya, makasih banyak ya kak sukses selalu', 'mantap ilmu terima kasih ya kak sukses', 'POSITIF', 0.7655);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (205, 1, 'jangan beli di sini penipu barangnya sangat mengecewakan', 'jangan_beli tipu barang sangat kecewa', 'NEGATIF', 0.5725);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (206, 1, 'buruk banget kualitas videonya burem ga keliatan apa-apa deh', 'buruk banget kualitas video buram tidak_deh', 'NEGATIF', 0.5211);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (207, 1, 'konten bermutu kayak gini yang harusnya trending di tiktok', 'konten mutu kayak trending tiktok', 'POSITIF', 0.5259);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (208, 1, 'konten bermutu kayak gini yang harusnya trending di tiktok sumpah', 'konten mutu kayak trending tiktok sumpah', 'POSITIF', 0.5195);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (209, 1, 'cantik banget kak videonya, sangat bermanfaat dan mengedukasi!', 'cantik banget kak video sangat manfaat edukasi', 'POSITIF', 0.8707);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (210, 1, 'bagus pol hasilnya rapi banget kak, berbakat sekali', 'bagus pol hasil rapi banget kak bakat sekali', 'POSITIF', 0.8355);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (211, 1, 'terharu nonton video ini, pesan moralnya dapet banget', 'haru tonton video pesan moral banget', 'POSITIF', 0.5154);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (212, 1, 'jangan beli di sini penipu barangnya sangat mengecewakan', 'jangan_beli tipu barang sangat kecewa', 'NEGATIF', 0.5725);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (213, 1, 'beneran worth it dicoba, hasilnya sesuai ekspektasi', 'benar worth coba hasil sesuai ekspektasi', 'NEGATIF', 0.609);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (214, 1, 'masyaAllah kak cantik luar dalam, pembawaannya ramah', 'masyaallah kak cantik bawa ramah', 'POSITIF', 0.7933);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (215, 1, 'bohong banget ini mah ga sesuai realita di lapangan deh', 'bohong banget mah tidak_sesuai realita lapang deh', 'NEGATIF', 0.6011);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (216, 1, 'bohong banget ini mah ga sesuai realita di lapangan', 'bohong banget mah tidak_sesuai realita lapang', 'NEGATIF', 0.6018);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (217, 1, 'berfaedah banget kontennya kak, auto follow dan share', 'faedah banget konten kak auto follow share', 'POSITIF', 0.7399);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (218, 1, 'cantik banget kak videonya, sangat bermanfaat dan mengedukasi!', 'cantik banget kak video sangat manfaat edukasi', 'POSITIF', 0.8707);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (219, 1, 'paling suka pas bagian tips terakhir, beneran ngebantu beneran', 'suka pas tips benar bantu benar', 'NEGATIF', 0.6178);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (220, 1, 'berfaedah banget kontennya kak, auto follow dan share', 'faedah banget konten kak auto follow share', 'POSITIF', 0.7399);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (221, 1, 'terharu nonton video ini, pesan moralnya dapet banget banget kak', 'haru tonton video pesan moral banget banget kak', 'POSITIF', 0.7124);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (222, 1, 'rekomendasi terbaik sih ini, udah coba dan hasilnya memuaskan', 'rekomendasi baik sih coba hasil muas', 'POSITIF', 0.5098);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (223, 1, 'bener-bener nyesel ngikutin sarannya, malah tambah ancur', 'sesal ikut saran hancur', 'NEGATIF', 0.5601);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (224, 1, 'parah banget hasilnya ga sesuai sama yang diomongin fix no debat', 'parah banget hasil tidak_sesuai diomongin fix no debat', 'POSITIF', 0.5088);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (225, 1, 'suaranya adem banget didenger, penjelasannya runtut', 'suara adem banget didenger jelas runtut', 'POSITIF', 0.5084);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (226, 1, 'jelek banget penjelasannya ga jelas muter-muter bikin pusing', 'jelek banget jelas tidak_pusing', 'NEGATIF', 0.5695);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (227, 1, 'gak suka banget sama cara bicaranya, sombong dan angkuh', 'tidak_suka banget bicara sombong angkuh', 'NEGATIF', 0.6805);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (228, 1, 'lebay banget deh ekspresinya dibuat-buat ga natural', 'banget deh ekspresi tidak_natural', 'NEGATIF', 0.513);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (229, 1, 'keren abis tutorialnya, langsung paham cara pakainya deh', 'keren habis tutorial langsung paham pakai deh', 'POSITIF', 0.5526);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (230, 1, 'makasih banyak ya kak sudah berbagi informasi yang sangat berharga banget kak', 'terima kasih ya kak bagi informasi sangat harga banget kak', 'POSITIF', 0.8062);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (231, 1, 'rekomendasi terbaik sih ini, udah coba dan hasilnya memuaskan', 'rekomendasi baik sih coba hasil muas', 'POSITIF', 0.5098);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (232, 1, 'bagus banget kualitas videonya, visual dan audionya jernih deh', 'bagus banget kualitas video visual audio jernih deh', 'POSITIF', 0.6998);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (233, 1, 'parah banget hasilnya ga sesuai sama yang diomongin gan', 'parah banget hasil tidak_sesuai diomongin gan', 'POSITIF', 0.5012);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (234, 1, 'ngomong apa sih ga jelas banget artikulasinya jelek', 'bicara sih tidak_banget artikulasi jelek', 'NEGATIF', 0.7061);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (235, 1, 'males banget liat kelakuannya caper banget di kamera', 'malas banget lihat laku caper banget kamera', 'POSITIF', 0.546);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (236, 1, 'bohong banget ini mah ga sesuai realita di lapangan', 'bohong banget mah tidak_sesuai realita lapang', 'NEGATIF', 0.6018);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (237, 1, 'jelek parah kualitasnya, baru dipakai sekali langsung rusak wkwk', 'jelek parah kualitas pakai sekali langsung rusak tertawa', 'NEGATIF', 0.6509);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (238, 1, 'jangan beli di sini penipu barangnya sangat mengecewakan', 'jangan_beli tipu barang sangat kecewa', 'NEGATIF', 0.5725);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (239, 1, 'terharu nonton video ini, pesan moralnya dapet banget', 'haru tonton video pesan moral banget', 'POSITIF', 0.5154);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (240, 1, 'penjelasannya detail dan sangat mudah dipahami pemula', 'jelas detail sangat mudah paham mula', 'POSITIF', 0.5946);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (241, 1, 'lucu banget ekspresinya di akhir video haha ngakak banget beneran', 'lucu banget ekspresi video tertawa akak banget benar', 'POSITIF', 0.6058);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (242, 1, 'ga usah sok pintar deh, teorinya salah total itu', 'tidak_sok pintar deh teori salah total', 'POSITIF', 0.5149);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (243, 1, 'sangat mengecewakan pelayanannya lambat dan judes', 'sangat kecewa layan lambat judes', 'POSITIF', 0.5567);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (244, 1, 'salah info tuh, belajar lagi sebelum bikin video edukasi', 'salah info tuh ajar video edukasi', 'NEGATIF', 0.5511);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (245, 1, 'suaranya adem banget didenger, penjelasannya runtut', 'suara adem banget didenger jelas runtut', 'POSITIF', 0.5084);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (246, 1, 'keren abis tutorialnya, langsung paham cara pakainya', 'keren habis tutorial langsung paham pakai', 'POSITIF', 0.5661);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (247, 1, 'suaranya adem banget didenger, penjelasannya runtut', 'suara adem banget didenger jelas runtut', 'POSITIF', 0.5084);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (248, 1, 'pembodohan publik ini mah, tolong jangan dipercaya', 'bodoh publik mah tolong jangan_percaya', 'NEGATIF', 0.6374);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (249, 1, 'beneran worth it dicoba, hasilnya sesuai ekspektasi', 'benar worth coba hasil sesuai ekspektasi', 'NEGATIF', 0.609);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (250, 1, 'konten toxic kayak gini kok masih bisa viral heran', 'konten toxic kayak viral heran', 'NEGATIF', 0.5503);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (251, 1, 'clickbait parah judul sama isinya sama sekali ga nyambung', 'clickbait parah judul isi sekali tidak_sambung', 'NEGATIF', 0.532);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (252, 1, 'berfaedah banget kontennya kak, auto follow dan share', 'faedah banget konten kak auto follow share', 'POSITIF', 0.7399);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (253, 1, 'masyaAllah kak cantik luar dalam, pembawaannya ramah', 'masyaallah kak cantik bawa ramah', 'POSITIF', 0.7933);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (254, 1, 'kreatif banget idenya kak, gak kepikiran sebelumnya', 'kreatif banget ide kak tidak_pikir', 'POSITIF', 0.8359);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (255, 1, 'makin ke sini kontennya makin garing dan ga bermakna deh', 'konten garing tidak_makna deh', 'NEGATIF', 0.5605);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (256, 1, 'bagus banget kualitas videonya, visual dan audionya jernih', 'bagus banget kualitas video visual audio jernih', 'POSITIF', 0.7399);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (257, 1, 'jelek banget penjelasannya ga jelas muter-muter bikin pusing', 'jelek banget jelas tidak_pusing', 'NEGATIF', 0.5695);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (258, 1, 'jangan beli di sini penipu barangnya sangat mengecewakan', 'jangan_beli tipu barang sangat kecewa', 'NEGATIF', 0.5725);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (259, 1, 'ga usah sok pintar deh, teorinya salah total itu', 'tidak_sok pintar deh teori salah total', 'POSITIF', 0.5149);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (260, 1, 'bagus pol hasilnya rapi banget kak, berbakat sekali fix no debat', 'bagus pol hasil rapi banget kak bakat sekali fix no debat', 'POSITIF', 0.8264);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (261, 1, 'rekomendasi terbaik sih ini, udah coba dan hasilnya memuaskan', 'rekomendasi baik sih coba hasil muas', 'POSITIF', 0.5098);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (262, 1, 'kreatif banget idenya kak, gak kepikiran sebelumnya', 'kreatif banget ide kak tidak_pikir', 'POSITIF', 0.8359);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (263, 1, 'gak usah lebay deh biasa aja ga ada spesialnya', 'tidak_deh tidak_spesial', 'NEGATIF', 0.5714);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (264, 1, 'males banget liat kelakuannya caper banget di kamera gan', 'malas banget lihat laku caper banget kamera gan', 'POSITIF', 0.546);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (265, 1, 'mantap betul ilmunya, makasih banyak ya kak sukses selalu', 'mantap ilmu terima kasih ya kak sukses', 'POSITIF', 0.7655);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (266, 1, 'terharu nonton video ini, pesan moralnya dapet banget', 'haru tonton video pesan moral banget', 'POSITIF', 0.5154);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (267, 1, 'terharu nonton video ini, pesan moralnya dapet banget', 'haru tonton video pesan moral banget', 'POSITIF', 0.5154);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (268, 1, 'jelek parah kualitasnya, baru dipakai sekali langsung rusak', 'jelek parah kualitas pakai sekali langsung rusak', 'NEGATIF', 0.6173);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (269, 1, 'suaranya adem banget didenger, penjelasannya runtut', 'suara adem banget didenger jelas runtut', 'POSITIF', 0.5084);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (270, 1, 'masyaAllah kak cantik luar dalam, pembawaannya ramah', 'masyaallah kak cantik bawa ramah', 'POSITIF', 0.7933);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (271, 1, 'sangat mengecewakan pelayanannya lambat dan judes fix no debat', 'sangat kecewa layan lambat judes fix no debat', 'POSITIF', 0.5542);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (272, 1, 'penjelasannya detail dan sangat mudah dipahami pemula ya ampun', 'jelas detail sangat mudah paham mula ya ampun', 'POSITIF', 0.6585);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (273, 1, 'rekomendasi terbaik sih ini, udah coba dan hasilnya memuaskan sumpah', 'rekomendasi baik sih coba hasil muas sumpah', 'POSITIF', 0.5075);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (274, 1, 'terima kasih infonya kak sangat membantu buat tugas akhir saya', 'terima info kak sangat bantu tugas', 'POSITIF', 0.6957);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (275, 1, 'kakak baik banget mau share resep rahasia ini gratis deh', 'kak banget share resep rahasia gratis deh', 'POSITIF', 0.6986);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (276, 1, 'sangat mengecewakan pelayanannya lambat dan judes', 'sangat kecewa layan lambat judes', 'POSITIF', 0.5567);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (277, 1, 'sok cantik banget jadi cewek, gayanya norak dan alay', 'sok cantik banget cewek gaya norak alay', 'NEGATIF', 0.5901);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (278, 1, 'berfaedah banget kontennya kak, auto follow dan share', 'faedah banget konten kak auto follow share', 'POSITIF', 0.7399);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (279, 1, 'ga usah sok pintar deh, teorinya salah total itu', 'tidak_sok pintar deh teori salah total', 'POSITIF', 0.5149);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (280, 1, 'parah banget hasilnya ga sesuai sama yang diomongin', 'parah banget hasil tidak_sesuai diomongin', 'POSITIF', 0.5012);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (281, 1, 'makin ke sini kontennya makin garing dan ga bermakna beneran', 'konten garing tidak_makna benar', 'NEGATIF', 0.6075);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (282, 1, 'sok cantik banget jadi cewek, gayanya norak dan alay tolong', 'sok cantik banget cewek gaya norak alay tolong', 'NEGATIF', 0.583);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (283, 1, 'wah baru tahu trik ini, keren banget makasih tipsnya!', 'trik keren banget terima kasih tipsnya', 'POSITIF', 0.695);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (284, 1, 'bagus pol hasilnya rapi banget kak, berbakat sekali ya ampun', 'bagus pol hasil rapi banget kak bakat sekali ya ampun', 'POSITIF', 0.8608);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (285, 1, 'suka banget sama cara penyampaiannya, santai tapi masuk materinya fix no debat', 'suka banget sampai santai tapi masuk materi fix no debat', 'POSITIF', 0.6088);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (286, 1, 'terima kasih infonya kak sangat membantu buat tugas akhir saya', 'terima info kak sangat bantu tugas', 'POSITIF', 0.6957);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (287, 1, 'lebay banget deh ekspresinya dibuat-buat ga natural', 'banget deh ekspresi tidak_natural', 'NEGATIF', 0.513);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (288, 1, 'kreatif banget idenya kak, gak kepikiran sebelumnya', 'kreatif banget ide kak tidak_pikir', 'POSITIF', 0.8359);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (289, 1, 'keren abis tutorialnya, langsung paham cara pakainya', 'keren habis tutorial langsung paham pakai', 'POSITIF', 0.5661);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (290, 1, 'terima kasih infonya kak sangat membantu buat tugas akhir saya fix no debat', 'terima info kak sangat bantu tugas fix no debat', 'POSITIF', 0.687);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (291, 1, 'salah info tuh, belajar lagi sebelum bikin video edukasi', 'salah info tuh ajar video edukasi', 'NEGATIF', 0.5511);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (292, 1, 'sok cantik banget jadi cewek, gayanya norak dan alay tolong', 'sok cantik banget cewek gaya norak alay tolong', 'NEGATIF', 0.583);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (293, 1, 'ngomong apa sih ga jelas banget artikulasinya jelek', 'bicara sih tidak_banget artikulasi jelek', 'NEGATIF', 0.7061);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (294, 1, 'suka banget sama cara penyampaiannya, santai tapi masuk materinya fix no debat', 'suka banget sampai santai tapi masuk materi fix no debat', 'POSITIF', 0.6088);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (295, 1, 'bagus pol hasilnya rapi banget kak, berbakat sekali beneran', 'bagus pol hasil rapi banget kak bakat sekali benar', 'POSITIF', 0.7964);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (296, 1, 'selalu nungguin konten kakak, ga pernah gagal bikin semangat fix no debat', 'tunggu konten kak tidak_gagal semangat fix no debat', 'POSITIF', 0.7758);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (297, 1, 'parah banget hasilnya ga sesuai sama yang diomongin wkwk', 'parah banget hasil tidak_sesuai diomongin tertawa', 'NEGATIF', 0.549);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (298, 1, 'rugi waktu dan kuota nonton video ginian ga ada faedahnya', 'rugi kuota tonton video tidak_faedah', 'NEGATIF', 0.6555);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (299, 1, 'rugi waktu dan kuota nonton video ginian ga ada faedahnya gan', 'rugi kuota tonton video tidak_faedah gan', 'NEGATIF', 0.6555);
INSERT INTO `comments` (`id`, `analysis_id`, `original_comment`, `cleaned_comment`, `sentiment`, `probability`) VALUES (300, 1, 'sangat mengecewakan pelayanannya lambat dan judes', 'sangat kecewa layan lambat judes', 'POSITIF', 0.5567);
ALTER TABLE `users` AUTO_INCREMENT = 2;
ALTER TABLE `analyses` AUTO_INCREMENT = 2;
ALTER TABLE `comments` AUTO_INCREMENT = 301;
SET FOREIGN_KEY_CHECKS=1;

BIN
tfidf_vectorizer.pkl Normal file

Binary file not shown.

View File

@ -0,0 +1,3 @@
Library for stemming Indonesian (Bahasa) text

View File

@ -0,0 +1 @@
pip

View File

@ -0,0 +1,25 @@
Metadata-Version: 2.0
Name: Sastrawi
Version: 1.0.1
Summary: Library for stemming Indonesian (Bahasa) text
Home-page: https://github.com/har07/sastrawi
Author: Hanif Amal Robbani
Author-email: dev.har07@gmail.com
License: MIT
Keywords: nlp stemming indonesia indonesian
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: Science/Research
Classifier: Topic :: Text Processing :: Linguistic
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Library for stemming Indonesian (Bahasa) text

View File

@ -0,0 +1,162 @@
Sastrawi-1.0.1.dist-info/DESCRIPTION.rst,sha256=_8EMTiWZFL-fc08weStUaDW77aRZDxA645j8clIUeYo,48
Sastrawi-1.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
Sastrawi-1.0.1.dist-info/METADATA,sha256=kYLckaBVXokwQ64BLaVfHSjRIHFg7bpWu08ZEgs7Tjg,909
Sastrawi-1.0.1.dist-info/RECORD,,
Sastrawi-1.0.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
Sastrawi-1.0.1.dist-info/WHEEL,sha256=5f-Lb0dq-Ei5P75pgK065AnrFl2dK_ZqskZBpCbWERA,116
Sastrawi-1.0.1.dist-info/metadata.json,sha256=LJkTV4Te02EZPjh-VeOxsW4ov4ieFsbtlkYEX0JUI4I,956
Sastrawi-1.0.1.dist-info/top_level.txt,sha256=G5gMS6UiyRAF5R4S6kljfGyIJLHVgEltCUUyYWO9ujk,9
Sastrawi/Dictionary/ArrayDictionary.py,sha256=T7ES9rVIiw3Njmd2h73Bm7Ds2PqIcai2MkzgJANnE8Q,628
Sastrawi/Dictionary/DictionaryInterface.py,sha256=3O6q8hGdEALlQGXYcIBjVhvaQ0HlZEehVSiXaRgO8aY,121
Sastrawi/Dictionary/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
Sastrawi/Dictionary/__pycache__/ArrayDictionary.cpython-311.pyc,,
Sastrawi/Dictionary/__pycache__/DictionaryInterface.cpython-311.pyc,,
Sastrawi/Dictionary/__pycache__/__init__.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule1.py,sha256=mkf-glrZNQCDrMyGVZv6VRXIf_P3TmrpWMErosGHCP8,733
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule10.py,sha256=0YozsELBLIfkVlVqm3lop_q_LqBoVWRyZg5XUxMqtOw,448
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule11.py,sha256=DG2aUH9PlDQQnZF7k3adN7fnuES8qfmZQWzFkHsdxgk,412
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule12.py,sha256=8b7KSqqPUQttR0WM31pR0qiK6OQF9r9EqJ3Z_NyCMP0,625
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule13.py,sha256=N8_T9VxUYVBB2wEDy58v_fPaTaPFIF12Kk_ThZCGzqY,831
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule14.py,sha256=v_8d2j1KcEwJn1Ugpb5Xjne7ZgzHG98ZcdZl6RgX0p4,933
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule15.py,sha256=RWhNcDLjLKUulVPB7KxAup15UxOdXIc4UwhzsPJjCNU,807
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule16.py,sha256=TFe1m6DFMkxh4jmsDE5wcNIZlfwnaCyotgXaltu_oIY,671
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule17.py,sha256=epujL8knVIMzz41MKrMFW_-GsNk5xH23AWP-8ggW7yA,1585
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule18.py,sha256=8p9C5I6_DNxr0xQfB45z3lgOd3hx_WGNtwO8jRaBaQs,980
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule19.py,sha256=zM_q79o1cH-LheWjWwnB0DZlovUkFuWOrgrwN5c14-8,654
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule2.py,sha256=4B0dw78JdmWA3utIYBEy8RlrkaBehw361qAN9eNUVNs,587
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule20.py,sha256=HZjrJUICRuC-qetfjR_yH6a-d8silB1JUVmyZ14DwQQ,430
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule21.py,sha256=xG5a9c-B42Ejen9JEIiJK6CRifB0bmCv4h3RDZukSsI,779
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule23.py,sha256=mXsNZ5oAo7JUDH1SdAEyLSQcxLj1fHcg9MSZWaPJ2zI,579
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule24.py,sha256=_k4H6wbuvSWt7iYdFGeDjqHowJ99cTLu4tmU4kt7L2I,580
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule25.py,sha256=Y2EEUp8N9ZkS3-iIBBKW1Pakj8w7khGLIjog9Hb3nuk,412
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule26.py,sha256=PXPsMHaHf6UJIR-zWs15EDYpyyuqIfaXweHZup9wjZE,831
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule27.py,sha256=IndtHEV413QpQLgy8BQvJ6-71WA_7uJDBxRF3534Wws,421
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule28.py,sha256=vPNU_LjOSFe3oL1fEfIS5JylgxV7qjwo5XQxBpxuuUs,807
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule29.py,sha256=RIBfzVMTPMNAIeIfVoCGG_3C3ou8XcQozU31yQQO6-c,551
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule3.py,sha256=DhH2XPxVjwkpE_OevKKhDCSN58EbUI0VhiXWTczCw9g,587
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule30.py,sha256=XSmgZNEUIXnoXbXs7jvTv5HznQLq3xV6Sv9hxLlBC1M,1187
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule31.py,sha256=h5OTYFJ9ttIsI2EJvhUgENfhX182_MFKM6qfGyaJgDA,896
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule32.py,sha256=LHcaCxtknvQx20HGPOhpPVJjI_ezdl0C3yYHuLlEUkE,494
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule34.py,sha256=yMRECW2UrPXLIb5Iqojpei0T0ge9z_Y2Yzk2FOp6aAc,564
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule35.py,sha256=0tgnroHCLmCOd6nDfANpvLOCpHxekzWUPyFbs_3xCuU,498
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule36.py,sha256=3YTpKX1MjXxTz4iUjHHuBTQS7XZ9kVx6TdwWhd8Bw5w,513
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule37.py,sha256=6LVvA-oKUXHIZFMuefkiE3bjF1XAnVyilCHn2uZw8Tc,925
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule38.py,sha256=mTvut4OSqE61vhuY6_X0LWxkQ1dj0Ek114fTwTiG9F4,925
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule39.py,sha256=GACTRhl5dFZ9rSTHh_X45sUqHKC82YkfQLHCLhR8vDQ,925
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule4.py,sha256=lrGeYHdHZl6kGoQQC5-iBYktM8qZJ1KsGJuZRioTNnQ,308
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule40.py,sha256=HriW1IGUdGhMBlzpfY7KMKVN5byoINQr420X3vz0i4g,925
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule41.py,sha256=JokRY9g-B5Te_dEzo26PTVMFQrW2fZ60_Gk8kKWxkuo,357
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule42.py,sha256=82SDsYz_Zq5OXBcPNCRTzHCN33YJ7GqKmx2eMNjiYv4,362
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule5.py,sha256=jGOKFdjh38m3CUV-5K2m0Dxu7oXSq3B5Zh1WPDpzDh8,492
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule6.py,sha256=4W3T-_c1Aokg0rTuQ5SfeP_XvdQYu4d2cZ5sxmCbhwg,733
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule7.py,sha256=aKcKLLPTd8IIwEytEZtYcSmVbFA_4SeXZbK3b3uH1Ko,524
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule8.py,sha256=3znbuxXU62dQuhzN4-WHHftGgfXZ-orRfl70JfThLRI,571
Sastrawi/Morphology/Disambiguator/DisambiguatorPrefixRule9.py,sha256=LgXY1bJJHUow4yIuH084I5qFmcKcBeCLD1DbIoRTpXE,568
Sastrawi/Morphology/Disambiguator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule1.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule10.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule11.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule12.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule13.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule14.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule15.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule16.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule17.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule18.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule19.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule2.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule20.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule21.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule23.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule24.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule25.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule26.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule27.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule28.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule29.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule3.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule30.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule31.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule32.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule34.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule35.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule36.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule37.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule38.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule39.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule4.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule40.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule41.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule42.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule5.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule6.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule7.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule8.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/DisambiguatorPrefixRule9.cpython-311.pyc,,
Sastrawi/Morphology/Disambiguator/__pycache__/__init__.cpython-311.pyc,,
Sastrawi/Morphology/InvalidAffixPairSpecification.py,sha256=P1ulQhN9q04b0Ml1Msis-HQ2eurlOzcWPlLM-9knF-A,808
Sastrawi/Morphology/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
Sastrawi/Morphology/__pycache__/InvalidAffixPairSpecification.cpython-311.pyc,,
Sastrawi/Morphology/__pycache__/__init__.cpython-311.pyc,,
Sastrawi/Stemmer/Cache/ArrayCache.py,sha256=oZomA7c9k_EySG0Y-vV-v6DmT5UV4UmPDK9rZ5-toEw,408
Sastrawi/Stemmer/Cache/CacheInterface.py,sha256=pD8wNvEjFpXBu9lziybHyQ854krNmIA0iq89f7r_KLM,197
Sastrawi/Stemmer/Cache/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
Sastrawi/Stemmer/Cache/__pycache__/ArrayCache.cpython-311.pyc,,
Sastrawi/Stemmer/Cache/__pycache__/CacheInterface.cpython-311.pyc,,
Sastrawi/Stemmer/Cache/__pycache__/__init__.cpython-311.pyc,,
Sastrawi/Stemmer/CachedStemmer.py,sha256=4hFc0RRBP6jOllROqfYvRVmZlcLW3UqUZx-voMY0MNQ,834
Sastrawi/Stemmer/ConfixStripping/PrecedenceAdjustmentSpecification.py,sha256=0JQchEK8XHK7fgCES2Jh-ditfFWcuEgjG9SgwT3P9AM,675
Sastrawi/Stemmer/ConfixStripping/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
Sastrawi/Stemmer/ConfixStripping/__pycache__/PrecedenceAdjustmentSpecification.cpython-311.pyc,,
Sastrawi/Stemmer/ConfixStripping/__pycache__/__init__.cpython-311.pyc,,
Sastrawi/Stemmer/Context/Context.py,sha256=C0JaXxNMvUWcGRBvgr0ATpcw58pkcMmxZC6l34I3R78,5678
Sastrawi/Stemmer/Context/ContextInterface.py,sha256=kvEI9e4W4glAHmsXJe2_JQq5R5dUrgtffmHl6cM5U4k,456
Sastrawi/Stemmer/Context/Removal.py,sha256=9QrixJFgP9g4sKyDXkVBnZ0bMNEvRGuMmawE_mwTUBE,690
Sastrawi/Stemmer/Context/RemovalInterface.py,sha256=gbDtpCBJk5Kw7IpaSqCc_OPNKgFzwLtmyZ8vtf-_91M,300
Sastrawi/Stemmer/Context/Visitor/AbstractDisambiguatePrefixRule.py,sha256=x9sPtTZ6QCl_7IZYZaxv8WzEfusJYTNTkwupLchiWwA,999
Sastrawi/Stemmer/Context/Visitor/DontStemShortWord.py,sha256=0oi4bSFDwEjrReenpgb9smXDx5Z4mbFG8UmI54S6AGo,265
Sastrawi/Stemmer/Context/Visitor/PrefixDisambiguator.py,sha256=U3nP0nn_6o74zbsaZDQnCVzAeBMOweXS1h06PTYMbK4,355
Sastrawi/Stemmer/Context/Visitor/RemoveDerivationalSuffix.py,sha256=07D97jYEi1_9dyubU3W7o6SDlf8QfE7J2kxldfXM2Os,932
Sastrawi/Stemmer/Context/Visitor/RemoveInflectionalParticle.py,sha256=wLSSTFcOT98CnTT52WuH7MgPxJuuJUlWsS90euEaJVk,857
Sastrawi/Stemmer/Context/Visitor/RemoveInflectionalPossessivePronoun.py,sha256=JbCS6OppPIY4WCKakHLoSku_EVBx-FL_j-JLQrQOsxo,875
Sastrawi/Stemmer/Context/Visitor/RemovePlainPrefix.py,sha256=XqeqFRq706JnW1zhZshDIPUuJ23vQCrYvl3fzBtEyTk,813
Sastrawi/Stemmer/Context/Visitor/VisitorProvider.py,sha256=ZrvJGLOj4nKLAIlEtqGivv-m3AbKB9x_cDR7ZKX7UIs,10248
Sastrawi/Stemmer/Context/Visitor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
Sastrawi/Stemmer/Context/Visitor/__pycache__/AbstractDisambiguatePrefixRule.cpython-311.pyc,,
Sastrawi/Stemmer/Context/Visitor/__pycache__/DontStemShortWord.cpython-311.pyc,,
Sastrawi/Stemmer/Context/Visitor/__pycache__/PrefixDisambiguator.cpython-311.pyc,,
Sastrawi/Stemmer/Context/Visitor/__pycache__/RemoveDerivationalSuffix.cpython-311.pyc,,
Sastrawi/Stemmer/Context/Visitor/__pycache__/RemoveInflectionalParticle.cpython-311.pyc,,
Sastrawi/Stemmer/Context/Visitor/__pycache__/RemoveInflectionalPossessivePronoun.cpython-311.pyc,,
Sastrawi/Stemmer/Context/Visitor/__pycache__/RemovePlainPrefix.cpython-311.pyc,,
Sastrawi/Stemmer/Context/Visitor/__pycache__/VisitorProvider.cpython-311.pyc,,
Sastrawi/Stemmer/Context/Visitor/__pycache__/__init__.cpython-311.pyc,,
Sastrawi/Stemmer/Context/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
Sastrawi/Stemmer/Context/__pycache__/Context.cpython-311.pyc,,
Sastrawi/Stemmer/Context/__pycache__/ContextInterface.cpython-311.pyc,,
Sastrawi/Stemmer/Context/__pycache__/Removal.cpython-311.pyc,,
Sastrawi/Stemmer/Context/__pycache__/RemovalInterface.cpython-311.pyc,,
Sastrawi/Stemmer/Context/__pycache__/__init__.cpython-311.pyc,,
Sastrawi/Stemmer/Filter/TextNormalizer.py,sha256=go8eaXzG5jlQFWH1HeT-HZFOoaBvosxe-JXkv2wtbq4,270
Sastrawi/Stemmer/Filter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
Sastrawi/Stemmer/Filter/__pycache__/TextNormalizer.cpython-311.pyc,,
Sastrawi/Stemmer/Filter/__pycache__/__init__.cpython-311.pyc,,
Sastrawi/Stemmer/Stemmer.py,sha256=dO42J4vyZEeEaT1FkUs7RRJ3lclgTw8_VyAnAJMrjcw,2969
Sastrawi/Stemmer/StemmerFactory.py,sha256=2EpdLmv1I0gqUHl7OMWp-AnqSnOMJlNiEBA7LeEz4zM,1597
Sastrawi/Stemmer/StemmerInterface.py,sha256=vvkoxfEdEEIWkHmoY-qgBmPPqgMHnRjsR1tqKC54C7I,113
Sastrawi/Stemmer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
Sastrawi/Stemmer/__pycache__/CachedStemmer.cpython-311.pyc,,
Sastrawi/Stemmer/__pycache__/Stemmer.cpython-311.pyc,,
Sastrawi/Stemmer/__pycache__/StemmerFactory.cpython-311.pyc,,
Sastrawi/Stemmer/__pycache__/StemmerInterface.cpython-311.pyc,,
Sastrawi/Stemmer/__pycache__/__init__.cpython-311.pyc,,
Sastrawi/Stemmer/data/kata-dasar.original.txt,sha256=Q6_aSMLGZv8FVpJ6dTjmekHaBBTep1NmbZYRtZsIDsQ,239616
Sastrawi/Stemmer/data/kata-dasar.txt,sha256=Tc75NzKHAgc94zNhEnYmOZ3cfajkWgPN5uO2CaHhEHY,236296
Sastrawi/StopWordRemover/StopWordRemover.py,sha256=jmNJaGalPwv15OuJ9QQkHKJNxooV3WChKRgzKNAmzKw,458
Sastrawi/StopWordRemover/StopWordRemoverFactory.py,sha256=NPDvRH14I1OROfSpIevsmOEvhTxby-fTu2BrkhoMgpM,1825
Sastrawi/StopWordRemover/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
Sastrawi/StopWordRemover/__pycache__/StopWordRemover.cpython-311.pyc,,
Sastrawi/StopWordRemover/__pycache__/StopWordRemoverFactory.cpython-311.pyc,,
Sastrawi/StopWordRemover/__pycache__/__init__.cpython-311.pyc,,
Sastrawi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
Sastrawi/__pycache__/__init__.cpython-311.pyc,,

View File

@ -0,0 +1,6 @@
Wheel-Version: 1.0
Generator: bdist_wheel (0.26.0)
Root-Is-Purelib: true
Tag: py2-none-any
Tag: py3-none-any

View File

@ -0,0 +1 @@
{"generator": "bdist_wheel (0.26.0)", "summary": "Library for stemming Indonesian (Bahasa) text", "classifiers": ["Development Status :: 4 - Beta", "Intended Audience :: Information Technology", "Intended Audience :: Science/Research", "Topic :: Text Processing :: Linguistic", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5"], "extensions": {"python.details": {"project_urls": {"Home": "https://github.com/har07/sastrawi"}, "contacts": [{"email": "dev.har07@gmail.com", "name": "Hanif Amal Robbani", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}}}, "keywords": ["nlp", "stemming", "indonesia", "indonesian"], "license": "MIT", "metadata_version": "2.0", "name": "Sastrawi", "version": "1.0.1"}

View File

@ -0,0 +1 @@
Sastrawi

View File

@ -0,0 +1,29 @@
class ArrayDictionary(object):
"""description of class"""
def __init__(self, words=None):
self.words = []
if words:
self.add_words(words)
def contains(self, word):
return word in self.words
def count(self):
return len(self.words)
def add_words(self, words):
"""Add multiple words to the dictionary"""
for word in words:
self.add(word)
def add(self, word):
"""Add a word to the dictionary"""
if not word or word.strip() == '':
return
self.words.append(word)

View File

@ -0,0 +1,8 @@
class DictionaryInterface(object):
"""description of class"""
def contains(self, word):
pass

View File

@ -0,0 +1,27 @@
import re
class DisambiguatorPrefixRule1a(object):
"""Disambiguate Prefix Rule 1a
Rule 1a : berV -> ber-V
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 1a
Rule 1a : berV -> ber-V
"""
matches = re.match(r'^ber([aiueo].*)$', word)
if matches:
return matches.group(1)
class DisambiguatorPrefixRule1b(object):
"""Disambiguate Prefix Rule 1b
Rule 1b : berV -> be-rV
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 1b
Rule 1b : berV -> be-rV
"""
matches = re.match(r'^ber([aiueo].*)$', word)
if matches:
return 'r' + matches.group(1)

View File

@ -0,0 +1,14 @@
import re
class DisambiguatorPrefixRule10(object):
"""Disambiguate Prefix Rule 10
Rule 10 : me{l|r|w|y}V -> me-{l|r|w|y}V
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 10
Rule 10 : me{l|r|w|y}V -> me-{l|r|w|y}V
"""
matches = re.match(r'^me([lrwy])([aiueo])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2) + matches.group(3)

View File

@ -0,0 +1,14 @@
import re
class DisambiguatorPrefixRule11(object):
"""Disambiguate Prefix Rule 11
Rule 11 : mem{b|f|v} -> mem-{b|f|v}
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 11
Rule 11 : mem{b|f|v} -> mem-{b|f|v}
"""
matches = re.match(r'^mem([bfv])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2)

View File

@ -0,0 +1,16 @@
import re
class DisambiguatorPrefixRule12(object):
"""Disambiguate Prefix Rule 12
Nazief and Adriani Rule 12 : beC1erC2 -> be-C1erC2 where C1 != 'r'
Modified by Jelita Asian's CS Rule 12 : mempe -> mem-pe to stem mempengaruhi
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 12
Nazief and Adriani Rule 12 : beC1erC2 -> be-C1erC2 where C1 != 'r'
Modified by Jelita Asian's CS Rule 12 : mempe -> mem-pe to stem mempengaruhi
"""
matches = re.match(r'^mempe(.*)$', word)
if matches:
return 'pe' + matches.group(1)

View File

@ -0,0 +1,27 @@
import re
class DisambiguatorPrefixRule13a(object):
"""Disambiguate Prefix Rule 13a
Rule 13a : mem{rV|V} -> me-m{rV|V}
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 13a
Rule 13a : mem{rV|V} -> me-m{rV|V}
"""
matches = re.match(r'^mem([aiueo])(.*)$', word)
if matches:
return 'm' + matches.group(1) + matches.group(2)
class DisambiguatorPrefixRule13b(object):
"""Disambiguate Prefix Rule 13b
Rule 13b : mem{rV|V} -> me-p{rV|V}
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 13b
Rule 13b : mem{rV|V} -> me-p{rV|V}
"""
matches = re.match(r'^mem([aiueo])(.*)$', word)
if matches:
return 'p' + matches.group(1) + matches.group(2)

View File

@ -0,0 +1,26 @@
import re
class DisambiguatorPrefixRule14(object):
"""Disambiguate Prefix Rule 14
Rule 14 modified by Andy Librian : men{c|d|j|s|t|z} -> men-{c|d|j|s|t|z}
in order to stem mentaati
Rule 14 modified by ECS: men{c|d|j|s|z} -> men-{c|d|j|s|z}
in order to stem mensyaratkan, mensyukuri
Original CS Rule no 14 was : men{c|d|j|z} -> men-{c|d|j|z}
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 14
Rule 14 modified by Andy Librian : men{c|d|j|s|t|z} -> men-{c|d|j|s|t|z}
in order to stem mentaati
Rule 14 modified by ECS: men{c|d|j|s|z} -> men-{c|d|j|s|z}
in order to stem mensyaratkan, mensyukuri
Original CS Rule no 14 was : men{c|d|j|z} -> men-{c|d|j|z}
"""
matches = re.match(r'^men([cdjstz])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2)

View File

@ -0,0 +1,27 @@
import re
class DisambiguatorPrefixRule15a(object):
"""Disambiguate Prefix Rule 15a
Rule 15a : men{V} -> me-n{V}
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 15a
Rule 15a : men{V} -> me-n{V}
"""
matches = re.match(r'^men([aiueo])(.*)$', word)
if matches:
return 'n' + matches.group(1) + matches.group(2)
class DisambiguatorPrefixRule15b(object):
"""Disambiguate Prefix Rule 15b
Rule 15b : men{V} -> me-t{V}
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 15b
Rule 15b : men{V} -> me-t{V}
"""
matches = re.match(r'^men([aiueo])(.*)$', word)
if matches:
return 't' + matches.group(1) + matches.group(2)

View File

@ -0,0 +1,16 @@
import re
class DisambiguatorPrefixRule16(object):
"""Disambiguate Prefix Rule 16
Original Nazief and Adriani's Rule 16 : meng{g|h|q} -> meng-{g|h|q}
Modified Jelita Asian's CS Rule 16 : meng{g|h|q|k} -> meng-{g|h|q|k} to stem mengkritik
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 16
Original Nazief and Adriani's Rule 16 : meng{g|h|q} -> meng-{g|h|q}
Modified Jelita Asian's CS Rule 16 : meng{g|h|q|k} -> meng-{g|h|q|k} to stem mengkritik
"""
matches = re.match(r'^meng([g|h|q|k])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2)

View File

@ -0,0 +1,53 @@
import re
class DisambiguatorPrefixRule17a(object):
"""Disambiguate Prefix Rule 17a
Rule 17a : mengV -> meng-V
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 17a
Rule 17a : mengV -> meng-V
"""
matches = re.match(r'^meng([aiueo])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2)
class DisambiguatorPrefixRule17b(object):
"""Disambiguate Prefix Rule 17b
Rule 17b : mengV -> meng-kV
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 17b
Rule 17b : mengV -> meng-kV
"""
matches = re.match(r'^meng([aiueo])(.*)$', word)
if matches:
return 'k' + matches.group(1) + matches.group(2)
class DisambiguatorPrefixRule17c(object):
"""Disambiguate Prefix Rule 17c
Rule 17c : mengV -> meng-V- where V = 'e'
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 17c
Rule 17c : mengV -> meng-V- where V = 'e'
"""
matches = re.match(r'^menge(.*)$', word)
if matches:
return matches.group(1)
class DisambiguatorPrefixRule17d(object):
"""Disambiguate Prefix Rule 17d
Rule 17d : mengV -> me-ngV
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 17d
Rule 17d : mengV -> me-ngV
"""
matches = re.match(r'^meng([aiueo])(.*)$', word)
if matches:
return 'ng' + matches.group(1) + matches.group(2)

View File

@ -0,0 +1,29 @@
import re
class DisambiguatorPrefixRule18a(object):
"""Disambiguate Prefix Rule 18a
Rule 18a : menyV -> me-nyV to stem menyala -> nyala
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 18a
Rule 18a : menyV -> me-nyV to stem menyala -> nyala
"""
matches = re.match(r'^meny([aiueo])(.*)$', word)
if matches:
return 'ny' + matches.group(1) + matches.group(2)
class DisambiguatorPrefixRule18b(object):
"""Disambiguate Prefix Rule 18a
Original Rule 18 : menyV -> meny-sV
Modified by CC (shifted into 18b, see also 18a)
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 18a
Original Rule 18 : menyV -> meny-sV
Modified by CC (shifted into 18b, see also 18a)
"""
matches = re.match(r'^meny([aiueo])(.*)$', word)
if matches:
return 's' + matches.group(1) + matches.group(2)

View File

@ -0,0 +1,16 @@
import re
class DisambiguatorPrefixRule19(object):
"""Disambiguate Prefix Rule 19
Original Rule 19 : mempV -> mem-pV where V != 'e'
Modified Rule 19 by ECS : mempA -> mem-pA where A != 'e' in order to stem memproteksi
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 19
Original Rule 19 : mempV -> mem-pV where V != 'e'
Modified Rule 19 by ECS : mempA -> mem-pA where A != 'e' in order to stem memproteksi
"""
matches = re.match(r'^memp([abcdfghijklmopqrstuvwxyz])(.*)$', word)
if matches:
return 'p' + matches.group(1) + matches.group(2)

View File

@ -0,0 +1,17 @@
import re
class DisambiguatorPrefixRule2(object):
"""Disambiguate Prefix Rule 2
Rule 2 : berCAP -> ber-CAP where C != 'r' AND P != 'er'
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 2
Rule 2 : berCAP -> ber-CAP where C != 'r' AND P != 'er'
"""
matches = re.match(r'^ber([bcdfghjklmnpqrstvwxyz])([a-z])(.*)', word)
if matches:
if re.match(r'^er(.*)$', matches.group(3)):
return
return matches.group(1) + matches.group(2) + matches.group(3)

View File

@ -0,0 +1,14 @@
import re
class DisambiguatorPrefixRule20(object):
"""Disambiguate Prefix Rule 20
Rule 20 : pe{w|y}V -> pe-{w|y}V
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 20
Rule 20 : pe{w|y}V -> pe-{w|y}V
"""
matches = re.match(r'^pe([wy])([aiueo])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2) + matches.group(3)

View File

@ -0,0 +1,27 @@
import re
class DisambiguatorPrefixRule21a(object):
"""Disambiguate Prefix Rule 21a
Rule 21a : perV -> per-V
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 21a
Rule 21a : perV -> per-V
"""
matches = re.match(r'^per([aiueo])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2)
class DisambiguatorPrefixRule21b(object):
"""Disambiguate Prefix Rule 21b
Rule 21b : perV -> pe-rV
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 21b
Rule 21b : perV -> pe-rV
"""
matches = re.match(r'^pe(r[aiueo])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2)

View File

@ -0,0 +1,16 @@
import re
class DisambiguatorPrefixRule23(object):
"""Disambiguate Prefix Rule 23
Rule 23 : perCAP -> per-CAP where C != 'r' AND P != 'er'
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 23
Rule 23 : perCAP -> per-CAP where C != 'r' AND P != 'er'
"""
matches = re.match(r'^per([bcdfghjklmnpqrstvwxyz])([a-z])(.*)$', word)
if matches:
if re.match(r'^er(.*)$', matches.group(3)):
return
return matches.group(1) + matches.group(2) + matches.group(3)

View File

@ -0,0 +1,16 @@
import re
class DisambiguatorPrefixRule24(object):
"""Disambiguate Prefix Rule 24
Rule 24 : perCAerV -> per-CAerV where C != 'r'
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 24
Rule 24 : perCAerV -> per-CAerV where C != 'r'
"""
matches = re.match(r'^per([bcdfghjklmnpqrstvwxyz])([a-z])er([aiueo])(.*)$', word)
if matches:
if matches.group(1) == 'r':
return
return matches.group(1) + matches.group(2) + 'er' + matches.group(3) + matches.group(4)

View File

@ -0,0 +1,14 @@
import re
class DisambiguatorPrefixRule25(object):
"""Disambiguate Prefix Rule 25
Rule 25 : pem{b|f|v} -> pem-{b|f|v}
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 25
Rule 25 : pem{b|f|v} -> pem-{b|f|v}
"""
matches = re.match(r'^pem([bfv])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2)

View File

@ -0,0 +1,27 @@
import re
class DisambiguatorPrefixRule26a(object):
"""Disambiguate Prefix Rule 26a
Rule 26a : pem{rV|V} -> pe-m{rV|V}
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 26a
Rule 26a : pem{rV|V} -> pe-m{rV|V}
"""
matches = re.match(r'^pem([aiueo])(.*)$', word)
if matches:
return 'm' + matches.group(1) + matches.group(2)
class DisambiguatorPrefixRule26b(object):
"""Disambiguate Prefix Rule 26b
Rule 26b : pem{rV|V} -> pe-p{rV|V}
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 26b
Rule 26b : pem{rV|V} -> pe-p{rV|V}
"""
matches = re.match(r'^pem([aiueo])(.*)$', word)
if matches:
return 'p' + matches.group(1) + matches.group(2)

View File

@ -0,0 +1,14 @@
import re
class DisambiguatorPrefixRule27(object):
"""Disambiguate Prefix Rule 27
Rule 27 : pen{c|d|j|z} -> pen-{c|d|j|z}
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 27
Rule 27 : pen{c|d|j|z} -> pen-{c|d|j|z}
"""
matches = re.match(r'^pen([cdjz])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2)

View File

@ -0,0 +1,27 @@
import re
class DisambiguatorPrefixRule28a(object):
"""Disambiguate Prefix Rule 28a
Rule 28a : pen{V} -> pe-n{V}
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 28a
Rule 28a : pen{V} -> pe-n{V}
"""
matches = re.match(r'^pen([aiueo])(.*)$', word)
if matches:
return 'n' + matches.group(1) + matches.group(2)
class DisambiguatorPrefixRule28b(object):
"""Disambiguate Prefix Rule 28b
Rule 28b : pen{V} -> pe-t{V}
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 28b
Rule 28b : pen{V} -> pe-t{V}
"""
matches = re.match(r'^pen([aiueo])(.*)$', word)
if matches:
return 't' + matches.group(1) + matches.group(2)

View File

@ -0,0 +1,16 @@
import re
class DisambiguatorPrefixRule29(object):
"""Disambiguate Prefix Rule 29
Original Rule 29 : peng{g|h|q} -> peng-{g|h|q}
Modified Rule 29 by ECS : pengC -> peng-C
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 29
Original Rule 29 : peng{g|h|q} -> peng-{g|h|q}
Modified Rule 29 by ECS : pengC -> peng-C
"""
matches = re.match(r'^peng([bcdfghjklmnpqrstvwxyz])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2)

View File

@ -0,0 +1,17 @@
import re
class DisambiguatorPrefixRule3(object):
"""Disambiguate Prefix Rule 3
Rule 3 : berCAerV -> ber-CAerV where C != 'r'
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 3
Rule 3 : berCAerV -> ber-CAerV where C != 'r'
"""
matches = re.match(r'ber([bcdfghjklmnpqrstvwxyz])([a-z])er([aiueo])(.*)', word)
if matches:
if matches.group(1) == 'r':
return
return matches.group(1) + matches.group(2) + 'er' + matches.group(3) + matches.group(4)

View File

@ -0,0 +1,40 @@
import re
class DisambiguatorPrefixRule30a(object):
"""Disambiguate Prefix Rule 30a
Rule 30a : pengV -> peng-V
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 30a
Rule 30a : pengV -> peng-V
"""
matches = re.match(r'^peng([aiueo])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2)
class DisambiguatorPrefixRule30b(object):
"""Disambiguate Prefix Rule 30b
Rule 30a : pengV -> peng-kV
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 30b
Rule 30a : pengV -> peng-kV
"""
matches = re.match(r'^peng([aiueo])(.*)$', word)
if matches:
return 'k' + matches.group(1) + matches.group(2)
class DisambiguatorPrefixRule30c(object):
"""Disambiguate Prefix Rule 30c
Rule 30a : pengV -> pengV- where V = 'e'
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 30c
Rule 30a : pengV -> pengV- where V = 'e'
"""
matches = re.match(r'^penge(.*)$', word)
if matches:
return matches.group(1)

View File

@ -0,0 +1,29 @@
import re
class DisambiguatorPrefixRule31a(object):
"""Disambiguate Prefix Rule 31a
Rule 31a : penyV -> pe-nyV
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 31a
Rule 31a : penyV -> pe-nyV
"""
matches = re.match(r'^peny([aiueo])(.*)$', word)
if matches:
return 'ny' + matches.group(1) + matches.group(2)
class DisambiguatorPrefixRule31b(object):
"""Disambiguate Prefix Rule 31b
Original Rule 31 : penyV -> peny-sV
Modified by CC, shifted to 31b
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 31b
Original Rule 31 : penyV -> peny-sV
Modified by CC, shifted to 31b
"""
matches = re.match(r'^peny([aiueo])(.*)$', word)
if matches:
return 's' + matches.group(1) + matches.group(2)

View File

@ -0,0 +1,16 @@
import re
class DisambiguatorPrefixRule32(object):
"""Disambiguate Prefix Rule 32
Rule 32 : pelV -> pe-lV except pelajar -> ajar
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 32
Rule 32 : pelV -> pe-lV except pelajar -> ajar
"""
if word == 'pelajar':
return 'ajar'
matches = re.match(r'^pe(l[aiueo])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2)

View File

@ -0,0 +1,16 @@
import re
class DisambiguatorPrefixRule34(object):
"""Disambiguate Prefix Rule 34
Rule 34 : peCP -> pe-CP where C != {r|w|y|l|m|n} and P != 'er'
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 34
Rule 34 : peCP -> pe-CP where C != {r|w|y|l|m|n} and P != 'er'
"""
matches = re.match(r'^pe([bcdfghjklmnpqrstvwxyz])(.*)$', word)
if matches:
if re.match(r'^er(.*)$', matches.group(2)):
return
return matches.group(1) + matches.group(2)

View File

@ -0,0 +1,14 @@
import re
class DisambiguatorPrefixRule35(object):
"""Disambiguate Prefix Rule 35
Rule 35 : terC1erC2 -> ter-C1erC2 where C1 != {r}
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 35
Rule 35 : terC1erC2 -> ter-C1erC2 where C1 != {r}
"""
matches = re.match(r'^ter([bcdfghjkpqstvxz])(er[bcdfghjklmnpqrstvwxyz])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2) + matches.group(3)

View File

@ -0,0 +1,14 @@
import re
class DisambiguatorPrefixRule36(object):
"""Disambiguate Prefix Rule 36
Rule 36 : peC1erC2 -> pe-C1erC2 where C1 != {r|w|y|l|m|n}
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 36
Rule 36 : peC1erC2 -> pe-C1erC2 where C1 != {r|w|y|l|m|n}
"""
matches = re.match(r'^pe([bcdfghjkpqstvxz])(er[bcdfghjklmnpqrstvwxyz])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2) + matches.group(3)

View File

@ -0,0 +1,27 @@
import re
class DisambiguatorPrefixRule37a(object):
"""Disambiguate Prefix Rule 37a (CC infix rules)
Rule 37a : CerV -> CerV
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 37a (CC infix rules)
Rule 37a : CerV -> CerV
"""
matches = re.match(r'^([bcdfghjklmnpqrstvwxyz])(er[aiueo])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2) + matches.group(3)
class DisambiguatorPrefixRule37b(object):
"""Disambiguate Prefix Rule 37b (CC infix rules)
Rule 37b : CerV -> CV
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 37b (CC infix rules)
Rule 37b : CerV -> CV
"""
matches = re.match(r'^([bcdfghjklmnpqrstvwxyz])er([aiueo])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2) + matches.group(3)

View File

@ -0,0 +1,27 @@
import re
class DisambiguatorPrefixRule38a(object):
"""Disambiguate Prefix Rule 38a (CC infix rules)
Rule 38a : CelV -> CelV
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 38a (CC infix rules)
Rule 38a : CelV -> CelV
"""
matches = re.match(r'^([bcdfghjklmnpqrstvwxyz])(el[aiueo])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2) + matches.group(3)
class DisambiguatorPrefixRule38b(object):
"""Disambiguate Prefix Rule 38b (CC infix rules)
Rule 38b : CelV -> CV
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 38b (CC infix rules)
Rule 38b : CelV -> CV
"""
matches = re.match(r'^([bcdfghjklmnpqrstvwxyz])el([aiueo])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2) + matches.group(3)

View File

@ -0,0 +1,27 @@
import re
class DisambiguatorPrefixRule39a(object):
"""Disambiguate Prefix Rule 39a (CC infix rules)
Rule 39a : CemV -> CemV
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 39a (CC infix rules)
Rule 39a : CemV -> CemV
"""
matches = re.match(r'^([bcdfghjklmnpqrstvwxyz])(em[aiueo])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2) + matches.group(3)
class DisambiguatorPrefixRule39b(object):
"""Disambiguate Prefix Rule 39b (CC infix rules)
Rule 39b : CemV -> CV
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 39b (CC infix rules)
Rule 39b : CemV -> CV
"""
matches = re.match(r'^([bcdfghjklmnpqrstvwxyz])em([aiueo])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2) + matches.group(3)

View File

@ -0,0 +1,11 @@
class DisambiguatorPrefixRule4(object):
"""Disambiguate Prefix Rule 4
Rule 4 : belajar -> bel-ajar
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 4
Rule 4 : belajar -> bel-ajar
"""
if word == 'belajar':
return 'ajar'

View File

@ -0,0 +1,27 @@
import re
class DisambiguatorPrefixRule40a(object):
"""Disambiguate Prefix Rule 40a (CC infix rules)
Rule 40a : CinV -> CinV
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 40a (CC infix rules)
Rule 40a : CinV -> CinV
"""
matches = re.match(r'^([bcdfghjklmnpqrstvwxyz])(in[aiueo])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2) + matches.group(3)
class DisambiguatorPrefixRule40b(object):
"""Disambiguate Prefix Rule 40b (CC infix rules)
Rule 40b : CinV -> CV
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 40b (CC infix rules)
Rule 40b : CinV -> CV
"""
matches = re.match(r'^([bcdfghjklmnpqrstvwxyz])in([aiueo])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2) + matches.group(3)

View File

@ -0,0 +1,14 @@
import re
class DisambiguatorPrefixRule41(object):
"""Disambiguate Prefix Rule 41
Rule 41 : kuA -> ku-A
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 41
Rule 41 : kuA -> ku-A
"""
matches = re.match(r'^ku(.*)$', word)
if matches:
return matches.group(1)

View File

@ -0,0 +1,14 @@
import re
class DisambiguatorPrefixRule42(object):
"""Disambiguate Prefix Rule 42
Rule 42 : kauA -> kau-A
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 42
Rule 42 : kauA -> kau-A
"""
matches = re.match(r'^kau(.*)$', word)
if matches:
return matches.group(1)

View File

@ -0,0 +1,14 @@
import re
class DisambiguatorPrefixRule5(object):
"""Disambiguate Prefix Rule 5
Rule 5 : beC1erC2 -> be-C1erC2 where C1 != 'r'
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 5
Rule 5 : beC1erC2 -> be-C1erC2 where C1 != 'r'
"""
matches = re.match(r'be([bcdfghjklmnpqstvwxyz])(er[bcdfghjklmnpqrstvwxyz])(.*)$', word)
if matches:
return matches.group(1) + matches.group(2) + matches.group(3)

View File

@ -0,0 +1,27 @@
import re
class DisambiguatorPrefixRule6a(object):
"""Disambiguate Prefix Rule 6a
Rule 6a : terV -> ter-V
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 6a
Rule 6a : terV -> ter-V
"""
matches = re.match(r'^ter([aiueo].*)$', word)
if matches:
return matches.group(1)
class DisambiguatorPrefixRule6b(object):
"""Disambiguate Prefix Rule 6b
Rule 6b : terV -> te-rV
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 6b
Rule 6b : terV -> te-rV
"""
matches = re.match(r'^ter([aiueo].*)$', word)
if matches:
return 'r' + matches.group(1)

View File

@ -0,0 +1,16 @@
import re
class DisambiguatorPrefixRule7(object):
"""Disambiguate Prefix Rule 7
Rule 7 : terCerv -> ter-CerV where C != 'r'
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 7
Rule 7 : terCerv -> ter-CerV where C != 'r'
"""
matches = re.match(r'^ter([bcdfghjklmnpqrstvwxyz])er([aiueo].*)$', word)
if matches:
if matches.group(1) == 'r':
return
return matches.group(1) + 'er' + matches.group(2)

View File

@ -0,0 +1,16 @@
import re
class DisambiguatorPrefixRule8(object):
"""Disambiguate Prefix Rule 8
Rule 8 : terCP -> ter-CP where C != 'r' and P != 'er'
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 8
Rule 8 : terCP -> ter-CP where C != 'r' and P != 'er'
"""
matches = re.match(r'^ter([bcdfghjklmnpqrstvwxyz])(.*)$', word)
if matches:
if matches.group(1) == 'r' or re.match(r'^er(.*)$', matches.group(2)):
return
return matches.group(1) + matches.group(2)

View File

@ -0,0 +1,16 @@
import re
class DisambiguatorPrefixRule9(object):
"""Disambiguate Prefix Rule 9
Rule 9 : te-C1erC2 -> te-C1erC2 where C1 != 'r'
"""
def disambiguate(self, word):
"""Disambiguate Prefix Rule 9
Rule 9 : te-C1erC2 -> te-C1erC2 where C1 != 'r'
"""
matches = re.match(r'^te([bcdfghjklmnpqrstvwxyz])er([bcdfghjklmnpqrstvwxyz])(.*)$', word)
if matches:
if matches.group(1) == 'r':
return
return matches.group(1) + 'er' + matches.group(2) + matches.group(3)

Some files were not shown because too many files have changed in this diff Show More