Baca Juga
π Prolog: Berawal dari Rasa Penasaran
Beberapa waktu lalu, saya mengunggah sebuah video di YouTube. Tidak lama setelah itu, notifikasi komentar pun mulai berdatangan, dari yang bernada dukungan hingga sindiran terselubung. Sebagai seseorang yang aktif mengamati opini publik, saya mulai bertanya-tanya:
“Sebenarnya komentar-komentar ini bernada positif, netral, atau malah negatif sih?”
Karena saya suka eksplorasi data, saya pun berinisiatif membuat sebuah tool kecil: dari scraping komentar YouTube secara otomatis, lalu menganalisis sentimennya dengan pendekatan yang modern dan canggih, bukan cuma tebak-tebakan kata, tapi benar-benar memahami konteks, bahkan satir sekalipun.
π― Tujuan Tutorial Ini
- Dalam artikel ini, saya akan membagikan cara:
- Membuat form HTML untuk input URL video YouTube,
- Mengambil komentar dari video tersebut (menggunakan YouTube Data API v3),
- Menyimpannya ke file .csv,
- Menganalisis sentimen komentar menggunakan IndoBERT,
- Menampilkan hasilnya dalam bentuk visual seperti Word Cloud dan Pie Chart.
Tutorial ini cocok untuk kamu yang:
- Ingin memahami persepsi audiens dari komentar YouTube,
- Mahasiswa atau peneliti sosial digital,
- Content creator yang ingin mendalami insight audiens,
- Atau sekadar iseng, tapi niat π
π ️ Bagian 1: Setup Scraper Komentar YouTube
π§ Tools yang Digunakan
- Python
- Flask (untuk form HTML input URL)
- Google API Client
- Pandas Google API Key
Langkah 1: Buat Proyek Google API dan Ambil API Key
- Buka Google Cloud Console.
- Buat project baru.
- Aktifkan YouTube Data API v3.
- Buat API Key di bagian "Credentials".
Simpan API key-nya baik-baik ya. Nanti kita akan gunakan di script.
π§π» Langkah 2: Buat File Python dengan Flask
Buat file app.py dan isi dengan kode berikut:
from flask import Flask, request, send_file, render_template_string from googleapiclient.discovery import build import pandas as pd import re app = Flask(__name__) API_KEY = 'MASUKKAN_API_KAMU' HTML_FORM = ''' <!DOCTYPE html> <html> <head> <title>YouTube Comment Scraper</title> </head> <body> <h2>Masukkan URL Video YouTube</h2> <form action="/scrape" method="post"> <input type="text" name="youtube_url" placeholder="https://www.youtube.com/watch?v=xxxxxxx" size="50" required> <br><br> <button type="submit">Ambil Komentar</button> </form> </body> </html> ''' def extract_video_id(url): match = re.search(r"(?:v=|\/)([0-9A-Za-z_-]{11})", url) return match.group(1) if match else None def get_comments(video_id): youtube = build('youtube', 'v3', developerKey=API_KEY) comments = [] next_page_token = None while True: request = youtube.commentThreads().list( part='snippet', videoId=video_id, maxResults=100, pageToken=next_page_token, textFormat='plainText' ) response = request.execute() for item in response['items']: comment = item['snippet']['topLevelComment']['snippet'] comments.append({ 'author': comment['authorDisplayName'], 'text': comment['textDisplay'], 'likeCount': comment['likeCount'], 'publishedAt': comment['publishedAt'] }) next_page_token = response.get('nextPageToken') if not next_page_token: break df = pd.DataFrame(comments) df.to_csv('comments.csv', index=False) return 'comments.csv' @app.route('/') def home(): return render_template_string(HTML_FORM) @app.route('/scrape', methods=['POST']) def scrape(): url = request.form['youtube_url'] video_id = extract_video_id(url) if not video_id: return "URL tidak valid." filename = get_comments(video_id) return send_file(filename, as_attachment=True) if __name__ == '__main__': app.run(debug=True)
Jalankan file ini, lalu buka http://localhost:5000 di browser. Kamu bisa langsung masukkan link video dan download file CSV berisi komentarnya!
π Bagian 2: Analisis Sentimen dengan IndoBERT di Jupyter Notebook
Sekarang kita masuk bagian serunya!
π¦ Instalasi Library
!pip install transformers torch pandas scikit-learn
π§ Load Model IndoBERT
from transformers import AutoTokenizer, AutoModelForSequenceClassification import torch tokenizer = AutoTokenizer.from_pretrained("mdhugol/indonesia-bert-sentiment-classification") model = AutoModelForSequenceClassification.from_pretrained("mdhugol/indonesia-bert-sentiment-classification")
π Fungsi Prediksi
def predict_sentiment(text): inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True) with torch.no_grad(): outputs = model(**inputs) probs = torch.nn.functional.softmax(outputs.logits, dim=-1) pred = torch.argmax(probs, dim=-1).item() label_map = {0: "Negatif", 1: "Netral", 2: "Positif"} return label_map[pred]
π₯ Load Komentar dan Prediksi
import pandas as pd df = pd.read_csv("comments.csv") df['sentimen'] = df['text'].astype(str).apply(predict_sentiment) df.head()
☁️ Bagian 3: Word Cloud & Visualisasi Sentimen π Word Cloud
from wordcloud import WordCloud import matplotlib.pyplot as plt all_text = " ".join(df['text'].astype(str)) wordcloud = WordCloud(width=800, height=400, background_color='white').generate(all_text) plt.figure(figsize=(10, 5)) plt.imshow(wordcloud, interpolation='bilinear') plt.axis("off") plt.title("Word Cloud Komentar YouTube") plt.show()
π₯§ Pie Chart Sentimen
df['sentimen'].value_counts().plot(kind='pie', autopct='%1.1f%%', figsize=(6, 6), title="Distribusi Sentimen") plt.ylabel('') plt.show()Dengan project sederhana ini, kamu sudah berhasil:
- Membuat web interface untuk mengambil komentar dari YouTube,
- Melakukan analisis sentimen yang powerful dengan model IndoBERT,
- Visualisasi hasilnya dengan Word Cloud dan Pie Chart.
Sekarang kamu tidak perlu lagi menebak-nebak isi hati netizen. Biarkan AI dalam Bahasa Indonesia yang menjawabnya untukmu. π
Tidak ada komentar:
Posting Komentar