๐Ÿ“˜ Pertemuan 13

Analisis Teks Sederhana

Tujuan Pembelajaran

Setelah pertemuan ini, mahasiswa diharapkan mampu:

  • Memahami dasar analisis teks (Text Mining)
  • Memproses teks sederhana menggunakan Python
  • Menemukan pola atau sentimen dalam teks
  • Menerapkan teknik analisis teks pada data nyata

Rencana Pembelajaran

Konsep Utama

Mahasiswa direncanakan untuk mengenal tahapan text preprocessing:

  • Tokenizing - memecah teks menjadi kata-kata
  • Case Folding - mengubah semua huruf menjadi huruf kecil
  • Stopword Removal - menghapus kata-kata umum yang tidak bermakna

Materi ini juga memperkenalkan representasi teks dalam bentuk numerik (bag-of-words).

Text Preprocessing

Langkah-langkah Preprocessing:
1. Import Library
import pandas as pd
import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from sklearn.feature_extraction.text import CountVectorizer

# Download resource NLTK (hanya sekali)
nltk.download('punkt')
nltk.download('stopwords')
2. Tokenizing
teks = "Data sains adalah bidang yang menarik dan sangat berguna"
tokens = word_tokenize(teks.lower())
print(tokens)
# Output: ['data', 'sains', 'adalah', 'bidang', 'yang', 'menarik', 'dan', 'sangat', 'berguna']
3. Stopword Removal
stop_words = set(stopwords.words('indonesian'))
filtered_tokens = [word for word in tokens if word not in stop_words]
print(filtered_tokens)
# Output: ['data', 'sains', 'bidang', 'menarik', 'berguna']

Word Frequency Analysis

Menghitung Frekuensi Kata:
from collections import Counter

# Dataset sederhana
teks_list = [
    "data sains sangat menarik",
    "python untuk data sains",
    "analisis data dengan python",
    "machine learning dan data sains"
]

# Gabungkan dan tokenize
all_words = []
for teks in teks_list:
    tokens = word_tokenize(teks.lower())
    filtered = [w for w in tokens if w not in stop_words]
    all_words.extend(filtered)

# Hitung frekuensi
word_freq = Counter(all_words)
print(word_freq.most_common(5))
# Output: [('data', 3), ('sains', 3), ('python', 2), ...]
Insight: Frekuensi kata membantu mengidentifikasi topik utama dalam kumpulan dokumen.

WordCloud Visualization

Membuat WordCloud:
from wordcloud import WordCloud
import matplotlib.pyplot as plt

# Gabungkan semua teks
text = " ".join(teks_list)

# Buat wordcloud
wordcloud = WordCloud(width=800, height=400, 
                      background_color='white',
                      colormap='viridis').generate(text)

# Visualisasi
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.title('WordCloud dari Dataset Teks', fontsize=16)
plt.show()
๐Ÿ’ก Penjelasan:

WordCloud menampilkan kata-kata dengan ukuran proporsional terhadap frekuensinya. Kata yang lebih sering muncul ditampilkan lebih besar.

Analisis Sentimen Sederhana

Klasifikasi Sentimen Berbasis Kata Kunci:
# Daftar kata positif dan negatif
kata_positif = ['bagus', 'hebat', 'senang', 'mantap', 'suka', 'menarik']
kata_negatif = ['buruk', 'jelek', 'kecewa', 'gagal', 'tidak suka']

def analisis_sentimen(teks):
    tokens = word_tokenize(teks.lower())
    
    skor_positif = sum([1 for token in tokens if token in kata_positif])
    skor_negatif = sum([1 for token in tokens if token in kata_negatif])
    
    if skor_positif > skor_negatif:
        return "Positif"
    elif skor_negatif > skor_positif:
        return "Negatif"
    else:
        return "Netral"

# Contoh penggunaan
tweets = [
    "Aplikasi ini bagus sekali, saya sangat suka!",
    "Pelayanan buruk dan mengecewakan",
    "Harga cukup sesuai dengan kualitas"
]

for tweet in tweets:
    sentimen = analisis_sentimen(tweet)
    print(f"Tweet: {tweet}")
    print(f"Sentimen: {sentimen}\n")
Catatan: Ini adalah metode sederhana berbasis kamus kata. Untuk analisis sentimen yang lebih akurat, gunakan machine learning dengan dataset berlabel.

Realisasi / Praktik

Studi Kasus: Analisis Tweet Publik
# Dataset tweet sederhana
tweets_data = {
    'tweet': [
        'Data sains sangat menarik untuk dipelajari',
        'Python adalah bahasa yang bagus untuk data science',
        'Saya kecewa dengan hasil analisis ini',
        'Machine learning sangat hebat dan powerful',
        'Tutorial ini membingungkan dan tidak jelas'
    ]
}

df = pd.DataFrame(tweets_data)

# Preprocessing dan analisis
df['tokens'] = df['tweet'].apply(lambda x: word_tokenize(x.lower()))
df['filtered'] = df['tokens'].apply(
    lambda x: [w for w in x if w not in stop_words]
)
df['sentimen'] = df['tweet'].apply(analisis_sentimen)

print(df[['tweet', 'sentimen']])

# Visualisasi distribusi sentimen
import seaborn as sns

sns.countplot(data=df, x='sentimen', palette='Set2')
plt.title('Distribusi Sentimen Tweet')
plt.show()
๐ŸŽฏ Hasil Pembelajaran:

Praktik ini membuka wawasan mahasiswa terhadap penerapan data sains di bidang linguistik dan media sosial. Mahasiswa memahami bagaimana mengekstrak informasi bermakna dari data teks.

Tugas Mandiri

Latihan Praktik
  1. Kumpulkan minimal 20 kalimat atau tweet dalam bahasa Indonesia
  2. Lakukan preprocessing (tokenizing, case folding, stopword removal)
  3. Hitung frekuensi kata dan buat WordCloud
  4. Klasifikasikan sentimen tiap teks (positif/negatif/netral)
  5. Visualisasikan distribusi sentimen dengan grafik
  6. Tuliskan kesimpulan dari hasil analisis teks
๐Ÿ’ก Tips:
  • Gunakan dataset tweet dari media sosial atau berita online
  • Perkaya daftar kata positif dan negatif untuk hasil lebih baik
  • Eksplorasi library TextBlob untuk analisis sentimen lebih lanjut