Pra-pemrosesan teks adalah tahap penting dalam analisis teks dan pemahaman bahasa alami atau Natural language processing (NLP) .
Teknik ini memungkinkan kita untuk membersihkan, mengubah, dan mempersiapkan teks mentah sehingga lebih mudah untuk diekstraksi informasinya.
Salah satu library yang populer untuk pra pemrosesan teks adalah Spacy. Dalam tulisan ini akan dijelaskan apa itu SpaCy, mengapa itu penting, dan bagaimana menggunakan SpaCy untuk pra pemrosesan teks dalam berbagai bahasa, termasuk bahasa Indonesia dengan menggunakan pemrograman Python.
Apa itu SpaCy?
SpaCy adalah library pemrosesan bahasa alami yang dirancang untuk kecepatan dan efisiensi. Ini menyediakan berbagai alat memproses teks ke dalam bahasa alami, termasuk tokenisasi (pembagian teks menjadi kata-kata atau token), analisis morfologi, entitas bernama, pengurai tata bahasa, dan banyak lagi.
Mengapa Pra-Pemrosesan Teks Penting?
Pra pemrosesan teks sangat penting dalam analisis teks dan NLP karena teks mentah sering kali datang dalam format yang tidak terstruktur dan kotor.
Proses ini akan membantu membersihkan teks dari karakter khusus, tanda baca, dan mengubahnya
menjadi representasi yang lebih terstruktur, sehingga lebih mudah untuk di ekstraksi informasinya.
Penting diketahui, dalam konteks penggunaan Spacy dalam bahasa Indonesia, kita akan menggunakan spacy.blank(“id”) Hal ini berguna untuk melakukan:
-Tekonisasi,
-Menghapus tanda baca dan karakter khusus,
-Konversi ke huruf kecil,
-Penghapusan stopword
-Lematisasi
-Pengenalan Entitas Bernama(NER)
-POS tagging
-Menghitung frekuensi kata(Counting word Frequency).
Sebelum memulai langkah-langkah umum dalam pra pemrosesan teks dengan menggunakan SpaCy, pastikan untuk menginstal perpustakaan tersebut terlebih dahulu jika belum.
pip install spacy
1.Tokenisasi
Tokenisasi adalah proses membagi teks menjadi unit-unit kecil yang disebut token. Token bisa berupa kata, kalimat, atau karakter tergantung pada tingkat detail yang diinginkan.
Contoh
import spacy
# Load model bahasa Indonesia yang kosong
nlp = spacy.blank("id")
# Tambahkan komponen sentencizer ke dalam pipeline
nlp.add_pipe("sentencizer")
# Contoh teks yang akan di-tokenisasi
text = "Pengolahan teks adalah cabang penting dalam NLP. Ini melibatkan analisis teks menjadi unit-unit kecil."
# Memasukkan teks ke dalam prosesor spaCy
doc = nlp(text)
# Menampilkan token kata
for token in doc:
print("Token kata:", token.text)
for sent in doc.sents:
print("Token kalimat:", sent.text)
Hasil
Token kata: Pengolahan
Token kata: teks
Token kata: adalah
Token kata: cabang
Token kata: penting
Token kata: dalam
Token kata: NLP
Token kata: .
Token kata: Ini
Token kata: melibatkan
Token kata: analisis
Token kata: teks
Token kata: menjadi
Token kata: unit-unit
Token kata: kecil
Token kata: .
Token kalimat: Pengolahan teks adalah cabang penting dalam NLP.
Token kalimat: Ini melibatkan analisis teks menjadi unit-unit kecil.
2.Menghapus tanda baca dan karakter khusus
Tanda baca dan karakter khusus seperti tanda kutip, titik, dan koma sering tidak memberikan informasi penting dalam analisis teks. Oleh karena itu, langkah ini melibatkan penghapusan atau penggantian karakter ini.
Contoh
import spacy
# Load model bahasa Indonesia yang kosong
nlp = spacy.blank("id")
# Contoh teks yang akan diolah
text = "Ini adalah contoh kalimat, dengan beberapa tanda baca! Misalnya: tanda titik."
# Memasukkan teks ke dalam prosesor spaCy
doc = nlp(text)
# Menghapus tanda baca dan karakter khusus
cleaned_tokens = [token.text for token in doc if not token.is_punct]
# Menggabungkan kembali token menjadi kalimat tanpa tanda baca
cleaned_text = ' '.join(cleaned_tokens)
print("Teks setelah penghapusan tanda baca:", cleaned_text)
Hasil
Teks setelah penghapusan tanda baca: Ini adalah contoh kalimat dengan beberapa tanda baca Misalnya tanda titik
3.Konversi ke huruf kecil
Mengubah semua huruf dalam teks menjadi huruf kecil agar memastikan keseragaman dan mengurangi kompleksitas dalam analisis.
Contoh
import spacy
# Load model bahasa Indonesia yang kosong
nlp = spacy.blank("id")
# Contoh teks yang akan diolah
text = "Ini adalah Contoh KALIMAT dengan BERBAGAI Huruf."
# Memasukkan teks ke dalam prosesor spaCy
doc = nlp(text)
# Mengkonversi token menjadi huruf kecil
lowercase_tokens = [token.text.lower() for token in doc]
# Menggabungkan kembali token menjadi kalimat dengan huruf kecil
lowercase_text = ' '.join(lowercase_tokens)
print("Teks setelah konversi ke huruf kecil:", lowercase_text)
Hasil
Teks setelah konversi ke huruf kecil: ini adalah contoh kalimat dengan berbagai huruf .
4.Penghapusan Stopword
Penghapusan Stopword adalah kata umum seperti ini, dengan, atau, di, yang sering dihilangkan karena jarang memberikan informasi penting.
Contoh
import spacy
# Load model bahasa Indonesia yang kosong
nlp = spacy.blank("id")
# Contoh teks yang akan diolah
text = "Ini adalah contoh kalimat dengan beberapa kata stop di dalam bahasa Indonesia."
# Memasukkan teks ke dalam prosesor spaCy
doc = nlp(text)
# Mengambil kata-kata stop dalam bahasa Indonesia dari spaCy
stop_words = spacy.lang.id.stop_words.STOP_WORDS
# Menghapus kata-kata stop
cleaned_tokens = [token.text for token in doc if token.text.lower() not in stop_words]
# Menggabungkan kembali token menjadi kalimat tanpa kata-kata stop
cleaned_text = ' '.join(cleaned_tokens)
print("Teks setelah penghapusan kata stop:", cleaned_text)
Hasil
Teks setelah penghapusan kata stop: contoh kalimat stop bahasa Indonesia .
5.Lematisasi
Lematisasi adalah teknik yang lebih canggih daripada stemming karena mempertimbangkan makna kata dalam mengubahnya menjadi bentuk dasarnya.
Lematisasi memperhitungkan konteks kata dan struktur morfologis untuk menghasilkan bentuk daar yang masih memiliki arti. Di samping itu, lematisasi berusaha untuk menghasilkan kata-kata yang valid dan bermakna.
Contoh lematisasi, yakni:
Terbaik <- baik
Pemain <- main
Contoh
from spacy.lang.id import Indonesian
nlp = Indonesian()
nlp.add_pipe("lemmatizer", config={"mode": "lookup"})
nlp.initialize()
def process_sentence(text):
doc = nlp(text)
lemmatized_tokens = [token.lemma_ for token in doc if not token.is_stop]
return " ".join(lemmatized_tokens)
kalimat = "Lionel Messi pemain bola terbaik di dunia"
processed_kalimat = process_sentence(kalimat)
print("Teks setelah lematisasi:",processed_kalimat)
Hasil
Teks setelah lematisasi: Lionel Messi main bola baik dunia
6.Pengenalan Entitas Bernama(Named Entity Recognition)
Pengenalan Entitas Bernama (NER) adalah teknik yang mengidentifikasi kata-kata atau frasa-frasa dalam teks yang merujuk pada entitas tertentu, seperti nama orang, organisasi, lokasi geografis, tanggal, dan sebagainya.
Pemrosesan NER penting dalam pemrosesan teks karena dapat membantu mengenali entitas yang signifikan dan menghasilkan pemahaman yang lebih baik terhadap konteks.
Contoh
import spacy
import random
from spacy.training.example import Example
# Contoh dataset sederhana dalam format SpaCy
train_data = [
("Apple adalah perusahaan teknologi yang terkenal.", {"entities": [(0, 5, "ORG")]}),
("Mark Zuckerberg adalah pendiri Facebook.", {"entities": [(0, 14, "PERSON"), (30, 38, "ORG")]}),
("Elon Musk adalah CEO Tesla.", {"entities": [(0, 9, "PERSON"), (23, 27, "ORG")]}),
("Google adalah mesin pencari paling populer di dunia.", {"entities": [(0, 6, "ORG")]}),
("Jack Ma adalah pendiri Alibaba.", {"entities": [(0, 7, "PERSON"), (20, 28, "ORG")]}),
# Tambahkan contoh data lain di sini
]
nlp = spacy.blank("id")
# Tambahkan komponen entitas bernama ke dalam pipeline
ner = nlp.add_pipe("ner")
# Menambahkan label entitas yang ingin dideteksi
ner.add_label("PERSON")
ner.add_label("ORG")
# Memulai proses pelatihan
nlp.begin_training()
# Training model
for iteration in range(30):
random.shuffle(train_data)
losses = {}
for text, annotations in train_data:
example = Example.from_dict(nlp.make_doc(text), annotations)
nlp.update([example], drop=0.5, losses=losses)
# Contoh teks untuk pengujian
text_new = "Facebook adalah platform media sosial terbesar."
# Memproses teks baru menggunakan model yang telah dilatih
doc_new = nlp(text_new)
# Menampilkan entitas bernama yang terdeteksi dalam teks baru
print("Entitas Bernama (Teks Baru):", [(ent.text, ent.label_) for ent in doc_new.ents])
Hasil
Entitas Bernama (Teks Baru): [('Facebook', 'ORG')]
7.POS Tagging (Part-of-Speech Tagging)
POS tangging melibatkan pemberian tanda atau tag pada kata-kata dalam suatu kalimat untuk mengidentifikasi jenis kata tersebut, seperti kata benda (Noun), kata kerja (Verb), atau kata sifat.
Informasi POS tagging membantu dalam menganalisis struktrut kalimat dan hubungan antar kata.
Contoh
import spacy
# Load model bahasa Indonesia yang kosong
nlp = spacy.blank("id")
# Contoh sederhana data pelatihan dalam format CoNLL-U
train_data = """
1 Ini _ DET DT _ 2 det _ _
2 adalah _ VERB VB _ 0 root _ _
3 contoh _ NOUN NN _ 2 nsubj _ _
4 kalimat _ NOUN NN _ 3 obj _ _
5 untuk _ ADP IN _ 4 case _ _
6 pelatihan _ NOUN NN _ 4 nmod _ _
7 POS _ NOUN NN _ 6 amod _ _
8 dengan _ ADP IN _ 6 case _ _
9 spaCy _ NOUN NN _ 8 nmod _ _
"""
# Memproses data pelatihan menjadi format yang sesuai dengan spaCy
train_words = {}
for line in train_data.strip().split('\n'):
parts = line.split()
if len(parts) == 10:
word = parts[1]
pos = parts[3]
train_words[word] = pos
# Kalimat yang akan ditandai dengan POS tagger
kalimat = "Ini adalah contoh kalimat untuk pelatihan POS dengan spaCy"
# Memproses kalimat dengan POS tagger
doc = nlp(kalimat)
# Menampilkan hasil tagging dengan jenis kata (POS tag) dari data pelatihan
for token in doc:
pos_from_train_data = train_words.get(token.text, "_")
print(token.text, pos_from_train_data)
Hasil
Ini DET
adalah VERB
contoh NOUN
kalimat NOUN
untuk ADP
pelatihan NOUN
POS NOUN
dengan ADP
spaCy NOUN
8.Menghitung frekuensi kata(Counting word Frequency)
Menghitung frekuensi kata adalah proses menghitung berapa kali setiap kata muncul dalam sebuah teks atau koleksi teks. Dalam konteks NLP, ini untuk mengidentifikasi kata-kata yang paling umum muncul serta pola dan tren yang ada dalam teks.
Contoh
import spacy
from collections import Counter
# Load model bahasa Indonesia yang kosong
nlp = spacy.blank("id")
# Teks yang akan dihitung frekuensi katanya
text = """
Jadi, teruslah bekerja. Terus berusaha. Jangan pernah menyerah.
Jangan pernah menyerah.
Jatuh tujuh kali, bangun delapan kali.
Kemudahan adalah ancaman yang lebih besar untuk kemajuan daripada kesulitan.
Kemudahan adalah ancaman yang lebih besar untuk kemajuan daripada kesulitan.
Jadi, terus bergerak, terus berkembang, terus belajar.
Sampai jumpa di tempat kerja.
"""
# Memproses teks menggunakan model SpaCy
doc = nlp(text)
# Menghitung frekuensi kata
word_freq = Counter()
for token in doc:
if token.is_alpha: # Hanya mempertimbangkan token yang merupakan kata (tidak termasuk tanda baca)
word_freq[token.text.lower()] += 1
# Menampilkan hasil frekuensi kata
for word, freq in word_freq.items():
print(f"{word}: {freq}")
Hasil
jadi: 2
teruslah: 1
bekerja: 1
terus: 4
berusaha: 1
jangan: 2
pernah: 2
menyerah: 2
jatuh: 1
tujuh: 1
kali: 2
bangun: 1
delapan: 1
kemudahan: 2
adalah: 2
ancaman: 2
yang: 2
lebih: 2
besar: 2
untuk: 2
kemajuan: 2
daripada: 2
kesulitan: 2
bergerak: 1
berkembang: 1
belajar: 1
sampai: 1
jumpa: 1
di: 1
tempat: 1
kerja: 1
Agar informasi yang telah disajikan di atas menjadi lebih mudah dipahami, perlu untuk menggambarkannya dalam bentuk grafik menggunakan library pandas dan word clouds.
Sebelum memulai, pastikan terlebih dahulu menginstall kedua library tersebut, jika belum jalan perintah ini di terminal atau command prompt.
pip install pandas
pip install wordcloud
Mulai
# Mengimpor perpustakaan pandas dengan alias pd
import pandas as pd
# Membuat DataFrame dari hasil perhitungan frekuensi kata yang paling umum (top 20)
freq_df = pd.DataFrame.from_records(word_freq.most_common(20),
columns=['token', 'count'])
# Membuat plot batang dari DataFrame yang telah dibuat
freq_df.plot(kind='bar', x='token')
Hasil
# Mengimpor modul pyplot dari matplotlib dengan alias plt
from matplotlib import pyplot as plt
# Mengimpor kelas WordCloud dari modul wordcloud
from wordcloud import WordCloud
# Mendefinisikan fungsi wordcloud dengan parameter word_freq
def wordcloud(word_freq):
# Membuat objek WordCloud dengan pengaturan yang ditentukan
wc = WordCloud(width=1200, height=800,
background_color="white",
max_words=200)
# Membuat word cloud dari frekuensi kata yang diberikan
wc.generate_from_frequencies(word_freq)
# Membuat objek gambar dengan ukuran tertentu
fig = plt.figure(figsize=(6, 4))
# Menampilkan word cloud pada gambar dengan interpolasi bilinear
plt.imshow(wc, interpolation='bilinear')
# Menyembunyikan sumbu pada plot
plt.axis("off")
# Menyusun tata letak gambar agar rapi
plt.tight_layout(pad=0)
# Menampilkan gambar word cloud
plt.show()
# Memanggil fungsi wordcloud dengan parameter word_freq
wordcloud(word_freq)
Hasil
Pada kedua visualisasi grafik, kata “terus” sangat menonjol yang paling terlihat di sorot. Hal ini menginformasikan kepada kita bahwa kata tersebut memiliki peranan yang signifikan dalam teks.
Kesimpulan
Dalam dunia NLP, pra-pemrosesan teks adalah langkah krusial dalam mempersiapkan data untuk kepentingan analisis lebih lanjut.
Dalam konteks ini, menggunakan library spaCy dengan bahasa Indonesia sebagai fokus, kita dapat mengginisiasi nlp = spacy.blank(“id”). Ini penting agar dapat membentuk model bahasa yang dapat disesuaikan dengan kebutuhan analisis kita.
Pemahaman tentang pra-pemrosesan teks merupakan langkah mendasar yang memberi pondasi kuat untuk melakukan analisis teks lebih lanjut menggunakan alat-alat NLP modern seperti SpaCy.