Analisis Teks Sederhana
Setelah pertemuan ini, mahasiswa diharapkan mampu:
Mahasiswa direncanakan untuk mengenal tahapan text preprocessing:
Materi ini juga memperkenalkan representasi teks dalam bentuk numerik (bag-of-words).
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')
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']
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']
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), ...]
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()
WordCloud menampilkan kata-kata dengan ukuran proporsional terhadap frekuensinya. Kata yang lebih sering muncul ditampilkan lebih besar.
# 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")
# 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()
Praktik ini membuka wawasan mahasiswa terhadap penerapan data sains di bidang linguistik dan media sosial. Mahasiswa memahami bagaimana mengekstrak informasi bermakna dari data teks.