Panduan Praktis Text Preprocessing dalam NLP

Sumber: Unsplash
Salah satu area dalam AI yang sering dieksplor dan masih serta akan terus menjadi tren adalah pemrosesan teks atau sering disebut juga sebagai Natural Language Processing (NLP). Sebelum teks dapat digunakan untuk pelatihan model NLP, diperlukan proses yang disebut dengan text preprocessing. Ini adalah tahap awal yang sangat penting karena data teks mentah sering kali tidak rapi dan penuh dengan elemen-elemen yang bisa mengganggu proses analisis, seperti tanda baca berlebihan, kata tidak penting, kesalahan ejaan, dan lain-lain. Jika model dilatih dengan data yang “kotor”, maka hasilnya pun bisa menjadi tidak akurat, bias, atau tidak bisa digeneralisasi dengan baik.
Mengapa tahap preprocessing begitu penting? Karena model NLP tidak membaca teks seperti manusia. Komputer atau model hanya mengenali angka. Jadi setiap karakter, kata, atau kalimat dalam teks perlu diubah menjadi bentuk numerik yang representatif. Tapi sebelum ke tahap representasi numerik seperti word embeddings, teks harus dibersihkan terlebih dahulu.
Text preprocessing sangat krusial dalam berbagai aplikasi NLP seperti sentiment analysis, chatbot, text / document classification, hingga infomation retrieval. Tanpa tahap ini, model bisa bingung membedakan makna kata karena perbedaan penulisan atau struktur kalimat yang terlalu kompleks. Selain itu, teks yang tidak diproses dengan baik bisa membuat ukuran data membengkak dan memperlambat proses pelatihan.
Berikut adalah beberapa langkah umum dalam text preprocessing, beserta contoh dan potongan kode relevan menggunakan Python dan library populer seperti nltk, re, dan Sastrawi:
1. Case Folding (Lowercasing)
Mengubah seluruh huruf menjadi huruf kecil untuk menyamakan bentuk kata. Jika tidak dilakukan case folding, kata “Saya” dan “saya” bisa saja dianggap berbeda oleh model atau komputer.
Contoh:
"Saya Suka Makan Nasi" → "saya suka makan nasi" text = "Saya Suka Makan Nasi" lowered = text.lower() print(lowered) # Output: "saya suka makan nasi"
2. Removing Punctuation
Menghapus tanda baca karena biasanya tidak penting dalam analisis makna. Tanda baca bisa saja dianggap sebagai sebuah token, bayangkan ada banyak tanda baca yang akhirnya membuat dataset menjadi besar padahal hal tersebut tidak benar-benar diperlukan.
Contoh:
"Halo, apa kabar?" → "Halo apa kabar" import re text = "Halo, apa kabar?" cleaned = re.sub(r'[^\w\s]', '', text) print(cleaned) # Output: "Halo apa kabar"
3. Removing Stopwords
Menghapus kata-kata umum yang tidak memberikan informasi penting. Kata-kata yang dimaksud adalah kata-kata yang jika berdiri sendiri maka dia tidak memberikan makna yang signifikan. Contoh: “yang”, “di”, “dan”, “dari”, dan sebagainya.
Contoh:
"Dia sedang membaca buku di perpustakaan" → "membaca buku perpustakaan" from nltk.corpus import stopwords from nltk.tokenize import word_tokenize stop_words = set(stopwords.words('indonesian')) words = word_tokenize("Dia sedang membaca buku di perpustakaan") filtered = [word for word in words if word.lower() not in stop_words] print(filtered) # Output: ['membaca', 'buku', 'perpustakaan']
4. Tokenization
Memecah teks menjadi unit-unit kecil, biasanya berupa kata. Secara umum, model NLP memproses teks berdasarkan token. Umumnya token ini berupa kata per kata. Namun, tidak menutup kemungkinan terdapat model atau task yang membuat token dari gabungan kata (frasa).
Contoh:
"Saya suka NLP" → ["saya", "suka", "nlp"] from nltk.tokenize import word_tokenize text = "Saya suka NLP" tokens = word_tokenize(text) print(tokens) # Outtput: ["saya", "suka", "nlp"]
5. Stemming atau Lemmatization
Mengubah kata ke bentuk dasarnya. Jika kita tidak mengubah kata-kata ke dalam bentuk dasarnya, maka akan terdapat banyak sekali varian kata yang dianggap berbeda oleh model, padahal mereka berasal dari bentuk yang sama. Misalnya pada kata “Berlari” dan “Berlarian” akan diproses menjadi kata “Lari”.
Dalam Bahasa Indonesia, kita bisa menggunakan pustaka Sastrawi.
Contoh stemming:
"berlari", "berlari-lari", "lari-larian" → "lari" from Sastrawi.Stemmer.StemmerFactory import StemmerFactory factory = StemmerFactory() stemmer = factory.create_stemmer() text = "berlari-lari lari-larian" stemmed = stemmer.stem(text) print(stemmed) # Output: "lari lari"
6. Normalisasi
Mengatasi kata-kata tidak baku atau slang yang umum di media sosial. Hal ini penting agar dapat model dapat memahami maksud sebenarnya dari setiap kosa kata yang tidak umum tersebut, daripada menjadikannya sebagai sebuah token yang baru.
Contoh:
"bgt" → "banget", "gk" → "tidak" kamus_alay = {"bgt": "banget", "gk": "tidak"} text = "gue gk suka bgt sama film ini" normalized = ' '.join([kamus_alay.get(word, word) for word in text.split()]) print(normalized) # Output: "gue tidak suka banget sama film ini"
7. Spelling Correction
Memperbaiki kata yang salah eja. Pada data teks, seringkali terdapat data yang secara bahasa tidak terstruktur atau banyak salah ketik / typo. Kondisi ini akan mengganggu pengetahuan model. Oleh karena itu, penting juga untuk memperbaiki kesalahan ketik pada data teks.
Contoh:
"sya" → "saya" from spellchecker import SpellChecker spell = SpellChecker(language='id') word = "sya" corrected = spell.correction(word) print(corrected) # Output: "saya"
Setiap langkah tidak selalu diperlukan dalam semua proyek NLP, tergantung pada konteks dan kebutuhan model. Misalnya, dalam analisis formal seperti dokumen hukum, kita mungkin tidak perlu normalisasi kata tidak baku, tapi dalam analisis media sosial, hal ini sangat penting.
Penulis: Muhammad Alfhi Saputra, S.Kom., M.Kom., – FDP Scholar
Referensi Tambahan:
Documentation NLTK: https://www.nltk.org
Dokumentasi Sastrawi: https://github.com/sastrawi/sastrawi
https://www.analyticsvidhya.com/blog/2021/06/text-preprocessing-in-nlp-with-python-codes/