Dalam pemrosesan bahasa alami (NLP), informasi yang akan ditambang berisi data yang strukturnya "acak" atau tidak terstruktur. Oleh karena itu, perlu dilakukan perubahan bentuk menjadi data terstruktur untuk keperluan lebih lanjut (analisis sentimen, pemodelan topik, dll.)
Data teks perlu dibersihkan dan dikodekan ke nilai numerik sebelum diberikan ke model pembelajaran mesin, proses pembersihan dan pengodean ini disebut sebagai pemrosesan awal teks
Foto oleh Edho Pratama pada Persiapan Unsplash. Perpustakaan yang dibutuhkan
Salah satu kelebihan python adalah mendukung banyak pustaka sumber terbuka. Ada banyak library python yang bisa digunakan untuk mengerjakan dan mengimplementasikan masalah di NLP
Perangkat Bahasa Alami (NLTK)
Natural Language Toolkit atau singkatnya NLTK, adalah pustaka python untuk bekerja dengan pemodelan teks. NLTK menyediakan alat yang baik untuk menyiapkan teks sebelum digunakan dalam pembelajaran mesin atau algoritma pembelajaran mendalam. Cara termudah untuk menginstal NLTK adalah dengan menggunakan "pip" pada baris perintah/terminal
pip install nltkLangkah pertama yang perlu Anda lakukan setelah menginstal NLTK adalah mengunduh paket NLTK
import nltknltk.download()_
NLTK
Anda dapat membaca dokumentasi lengkap dari NLTK di sini
Python Sastra (Bahasa Indonesia Stemming)
Sastrawi Python adalah perpanjangan dari proyek PHP Sastrawi. Sastrawi Python adalah library sederhana yang dapat mengubah sufiks bahasa Indonesia menjadi bentuk dasarnya. Sastrawi juga dapat diinstal melalui "pip"
pip install SastrawiPenggunaan Sastrawi Python sangat sederhana seperti baris kode di bawah ini
# import StemmerFactory classfrom Sastrawi.Stemmer.StemmerFactory import StemmerFactory# create stemmer
factory = StemmerFactory()
stemmer = factory.create_stemmer()# stemming process
sentence = 'Perekonomian Indonesia sedang dalam pertumbuhan yang membanggakan'output = stemmer.stem(sentence)print(output)
# ekonomi indonesia sedang dalam tumbuh yang banggaprint(stemmer.stem('Mereka meniru-nirukannya'))
# mereka tiru
Anda dapat membaca dokumentasi lengkap dari Sastrawi Python di sini
1. Kasus lipat
Case folding adalah salah satu bentuk text preprocessing yang paling sederhana dan efektif meskipun sering diabaikan. Tujuan dari case folding adalah untuk mengubah semua huruf dalam dokumen menjadi huruf kecil. Hanya huruf 'a' hingga 'z' yang diterima. Karakter selain huruf dihilangkan dan diperlakukan sebagai pembatas. Pada tahap ini kami tidak menggunakan pustaka eksternal apa pun, kami dapat memanfaatkan modul yang tersedia di python
Ada beberapa metode yang bisa digunakan dalam tahap case folding, bisa menggunakan sebagian atau menggunakan semuanya, tergantung dari tugas yang dihadapi.
Ubah teks menjadi huruf kecil
Salah satu contoh penting penggunaan huruf kecil adalah untuk mesin pencari. Bayangkan Anda sedang mencari dokumen yang berisi "indonesia" tetapi tidak ada hasil yang muncul karena "indonesia" diindeks sebagai "INDONESIA". Siapa yang harus kita salahkan? . I. perancang yang mengatur antarmuka pengguna atau pengembang yang mengatur sistem dalam indeks pencarian?
Contoh di bawah ini menunjukkan bagaimana python mengubah teks menjadi huruf kecil
kalimat = "Berikut ini adalah 5 negara dengan pendidikan terbaik di dunia adalah Korea Selatan, Jepang, Singapura, Hong Kong, dan Finlandia."lower_case = kalimat.lower()print(lower_case)# output
# berikut ini adalah 5 negara dengan pendidikan terbaik di dunia adalah korea selatan, jepang, singapura, hong kong, dan finlandia._
Hapus angka
Hapus nomor jika tidak relevan dengan apa yang akan Anda analisis, misalnya seperti nomor rumah, nomor telepon, dll. Ekspresi reguler (regex) dapat digunakan untuk menghapus karakter numerik. Python memiliki modulpip install Sastrawi_0 untuk melakukan hal-hal yang berhubungan dengan regex
Contoh di bawah ini menunjukkan bagaimana python menghapus angka dalam sebuah kalimat
import re # impor modul regular expressionkalimat = "Berikut ini adalah 5 negara dengan pendidikan terbaik di dunia adalah Korea Selatan, Jepang, Singapura, Hong Kong, dan Finlandia."hasil = re.sub(r"\d+", "", kalimat)
print(hasil)# ouput
# Berikut ini adalah negara dengan pendidikan terbaik di dunia adalah Korea Selatan, Jepang, Singapura, Hong Kong, dan Finlandia._
Hapus tanda baca
Sama halnya dengan angka, tanda baca dalam kalimat tidak memiliki pengaruh pada text preprocessing. Menghapus tanda baca seperti [!”#$%&’()*+,-./:;?@[\]^_`{|}~] dapat dilakukan di pyhton seperti dibawah ini :
kalimat = "Ini &adalah [contoh] kalimat? {dengan} tanda. baca?!!"hasil = kalimat.translate(str.maketrans("","",string.punctuation))
print(hasil)# output
# Ini adalah contoh kalimat dengan tanda baca
Hapus spasi putih (karakter kosong)
Untuk menghapus spasi di awal dan akhir, Anda dapat menggunakan fungsi pip install Sastrawi1 dengan python. Lihatlah kode di bawah ini
kalimat = " \t ini kalimat contoh\t "hasil = kalimat.strip()
print(hasil)# output
# ini kalimat contoh_2. Tokenisasi
Tokenizing adalah proses memisahkan teks menjadi potongan-potongan yang disebut token untuk analisis selanjutnya. Kata, angka, simbol, tanda baca, dan entitas penting lainnya dapat dianggap sebagai token. Dalam NLP, token diartikan sebagai "kata-kata" meskipun tokenisasi juga dapat dilakukan pada paragraf dan kalimat
Fungsi pip install Sastrawi_2 di python dapat digunakan untuk memisahkan teks. Lihatlah contoh di bawah ini
kalimat = "rumah idaman adalah rumah yang bersih"pisah = kalimat.split()
print(pisah)# output
# ['rumah', 'idaman', 'adalah', 'rumah', 'yang', 'bersih']
Sayangnya, level tokenisasi tidak sesederhana itu. Dari keluaran kode di atas, kita akan mengolah kata "home" dan "home" sebagai 2 entitas yang berbeda. Masalah ini tentunya akan mempengaruhi hasil analisis teks itu sendiri
Untuk mengatasi masalah ini kita bisa menggunakan modul dari NLTK yang sudah diinstal sebelumnya
Tokenisasi kata-kata
Sebuah kalimat atau data dapat dipecah menjadi kata-kata dengan kelas pip install Sastrawi3 pada modul NLTK
# impor word_tokenize dari modul nltkfrom nltk.tokenize import word_tokenize
kalimat = "Andi kerap melakukan transaksi rutin secara daring atau online."
tokens = nltk.tokenize.word_tokenize(kalimat)
print(tokens)# ouput
# ['Andi', 'kerap', 'melakukan', 'transaksi', 'rutin', 'secara', 'daring', 'atau', 'online', '.']
Dari keluaran kode diatas terdapat tampilan tanda baca (. ) dan koma (,) serta tanda "Andi" yang masih menggunakan huruf kapital di awal kata. Hal ini nantinya dapat mengganggu proses perhitungan pada penerapan algoritma tersebut. Jadi, sebaiknya teks sudah melewati tahap case folding sebelum diberi token agar menghasilkan hasil yang lebih konsisten
Kita dapat menambahkan fungsi case folding untuk menghilangkan tanda baca dan mengubah teks menjadi huruf kecil
import nltknltk.download()_0
Kita juga bisa mendapatkan informasi frekuensi kemunculan setiap token dengan kelas pip install Sastrawi4 yang sudah tersedia di modul NLTK
import nltknltk.download()_1
Untuk memvisualisasikannya secara grafis, kita perlu menginstal library Matplotlib
import nltknltk.download()_2
Grafik frekuensi kemunculan kata dalam dokumen
Tokenisasi kalimat
Prinsip yang sama dapat diterapkan pada kalimat terpisah dalam paragraf. Anda dapat menggunakan kelas pip install Sastrawi_5 pada modul NLTK. Saya telah menambahkan kalimat ke contoh di bawah ini
import nltknltk.download()_33. Penyaringan (Penghapusan Stopword)
Filtering adalah tingkatan pengambilan kata-kata penting dari hasil token dengan menggunakan algoritma stoplist (membuang kata-kata yang kurang penting) atau wordlist (menjaga kata-kata penting)
Stopwords adalah kata-kata umum yang biasanya muncul dalam jumlah banyak dan dianggap tidak memiliki arti. Contoh kata henti dalam bahasa Indonesia adalah "yang", "dan", "di", "dari", dll. Makna di balik penggunaan stopwords adalah dengan menghilangkan kata-kata yang memiliki informasi rendah dari sebuah teks, kita dapat fokus pada kata-kata penting saja.
Contoh penggunaan filter dapat ditemukan dalam konteks mesin pencari. Jika kueri penelusuran Anda adalah "apa arti manajemen?" . Ini dapat dilakukan dengan mencegah kata-kata dari daftar stopword dianalisis
Memfilter dengan NLTK
import nltknltk.download()_4
Menyaring dengan literatur
Selain stemming, library Sastrawi juga mendukung proses filtering. Kita dapat menggunakan pip install Sastrawi_6 dari modul literatur
Untuk melihat daftar stopword yang sudah didefinisikan di library Sastrawi, Anda dapat menggunakan kode berikut
import nltknltk.download()_5
Kode di atas akan menampilkan stopword yang tersedia di library Sastrawi. Proses penyaringan pada Sastrawi dapat dilihat pada baris kode di bawah ini
import nltknltk.download()_6
Kita dapat menambah atau mengurangi kata pada daftar stopword sesuai dengan kebutuhan analisis. Pada dasarnya daftar stopword yang ada di perpustakaan Sastrawi tersimpan dalam daftar yang Anda lihat. Jadi sebenarnya kita hanya perlu merubah register yang ada di list. Tapi itu bisa menjadi masalah jika dalam suatu kasus kita diharuskan menambahkan stopword secara dinamis
Perpustakaan Sastrawi dapat mengatasi masalah tersebut, perhatikan kode di bawah ini
import nltknltk.download()_7
Menurut Jim Geovedi dalam artikelnya menjelaskan bahwa penyesuaian daftar stopword perlu dilakukan setiap kali proyek analisis pertama kali dilakukan. Memang bukan sesuatu yang melelahkan, namun jika tidak dilakukan maka akan mengakibatkan salah interpretasi data
Stemming adalah proses menghilangkan infleksi suatu kata ke bentuk dasarnya, tetapi bentuk dasarnya tidak berarti sama dengan kata dasarnya. Misalnya, kata "dengarkan", "dengarkan", "dengarkan" akan diubah menjadi kata "dengarkan"
Idenya adalah ketika Anda mencari dokumen "cara membuka lemari", Anda juga ingin melihat dokumen yang menyebutkan "cara membuka lemari" atau "cara membuka lemari" meskipun kedengarannya buruk. Tentu Anda ingin mencocokkan semua variasi kata untuk memunculkan dokumen yang paling relevan
Stemming dengan NLTK (Bahasa Inggris)
Ada banyak algoritma yang digunakan untuk stemming. Salah satu algoritma tertua dan terpopuler adalah algoritma Porter. Algoritme ini tersedia dalam modul NLTK melalui classpip install Sastrawi7
import nltknltk.download()_8
Selain Porter, NLTK juga mendukung algoritma Lancester, WordNet Lemmatizer, dan SnowBall. Sayangnya proses stemming Bahasa Indonesia pada modul NLTK belum didukung
Stemming Bahasa Indonesia menggunakan Sastrawi Python
Proses stemming antara satu bahasa dengan bahasa lain tentu saja berbeda. Misalnya pada teks bahasa Inggris, proses yang diperlukan hanyalah proses menghilangkan akhiran. Sedangkan dalam teks bahasa Indonesia, semua imbuhan, baik sufiks maupun awalan, juga dihilangkan
Untuk melakukan stemming bahasa Indonesia kita bisa menggunakan library Sastrawi Python yang sudah kita siapkan di awal. Perpustakaan Sastrawi menerapkan Algoritma Nazief dan Adriani dalam melakukan stemming Bahasa Indonesia
import nltknltk.download()_9
Apakah kita memerlukan semua tahapan preprocessing teks?
Tidak ada aturan pasti yang membahas setiap tahap preprocessing teks. Tentunya untuk memastikan hasil yang lebih baik dan konsisten semua tahapan harus dilakukan. Untuk memberikan gambaran minimal apa yang harus dilakukan, saya telah menjelaskan tahapan yang harus dilakukan, harus dilakukan, dan tergantung tugasnya. Perlu diingat, less is more, Anda ingin menjaga pendekatan seindah mungkin. Semakin banyak fitur atau tahapan yang Anda tambahkan, semakin banyak lapisan yang harus Anda kupas
- Harus dilakukan pelipatan casing penutup (dapat bergantung pada tugas dalam beberapa kasus)
- Yang terbaik adalah memasukkan normalisasi sederhana — misalnya, membakukan kata-kata yang serupa
- Bergantung pada tugasnya termasuk normalisasi tingkat lanjut — misalnya mengatasi kata-kata yang tidak biasa, penghapusan stopword, dan stemming
Jadi, untuk mengatasi tugas apapun setidaknya Anda harus melakukan case folding. Selanjutnya, beberapa normalisasi dasar dapat ditambahkan untuk mendapatkan hasil yang lebih konsisten dan secara bertahap menambahkan tahapan lain sesuai keinginan
PenutupanPada artikel ini kita telah mempelajari langkah-langkah dasar dan praktis dalam preprocessing teks bersama dengan pustaka yang digunakan dalam python. Lebih lanjut, hasil text preprocessing dapat digunakan untuk analisis NLP yang lebih rumit, misalnya terjemahan mesin. Tidak semua kasus memerlukan tingkat pemrosesan awal yang sama. Dalam beberapa kasus, Anda dapat menggunakan salah satu tahapan preprocessing yang paling sederhana, yaitu pelipatan case. Namun semua level akan dibutuhkan saat Anda memiliki dataset dengan level noise yang sangat tinggi
Masih ada teknik-teknik yang dapat dilakukan dalam text preprocessing, namun sesuai dengan pendahuluan di atas, artikel ini hanya mengulas langkah-langkah dasar dan praktis dalam text preprocessing.
Semoga berhasil dan bersenang-senang dengan NLP. )
Anda dapat menemukan baris kode di atas di github saya. https. //github. com/ksnugroho/basic-text-preprocessing