Natural Language Processing (NLP): Membersihkan Teks Tweets Rencana Kenaikan Tiket Borobudur dengan R

Natural Language Processing (NLP) dengan R

Halo teman-teman, bertemu kembali dengan blog sederhana ini. Kita kemarin telah membahas awalan penggunaan Python dalam mengolah data. Kali ini, kita coba break sejenak dari Python untuk kembali meneruskan belajar kita mengenai R. Ke depan, kita kemungkinan akan sering berselang-seling membahas R dan Python mengingat memang kedua bahasa pemrograman ini sedang naik daun saat ini.

Baik, di R kita akan melanjutkan pembahasan mengenai salah satu cabang dari Data Science, yaitu Natural Language Processing atau yang biasa disingkat NLP. Apa itu NLP? Jadi kalau menurut beberapa referensi yang saya baca, NLP merupakan produk dari Artificial Intelligence (AI) yang digunakan dalam proses interaksi antara manusia dengan mesin. Mesin yang dimaksud dalam pembahasan ini bisa berbentuk komputer, robot, atau bentuk lainnya. Istilah Natural Language atau bahasa alamiah yang dimaksud dalam NLP merupakan bahasa yang biasa digunakan oleh manusia sehari-hari. Ragam bahasa alamiah tersebut juga ditentukan oleh aspek budaya dan negara. Dalam aspek budaya, mungkin bahasa alamiah yang digunakan adalah bahasa Jawa, Madura, Batak, Hindi, atau bahasa sejarah, misalkan bahasa Sansekerta, bahasa Jawa Kuno (Hanacaraka), dan bahasa Arab Pegon (Arab Gundul). Dalam aspek negara, bahasa alamiah yang mungkin adalah bahasa nasional, misalkan bahasa Indonesia, bahasa Inggris, bahasa Jerman, bahasa Belanda, bahasa Perancis, bahasa Jepang, atau lainnya sesuai negara dimana kita bertempat tinggal.

Di dalam Data Science, apalagi di eranya Big Data saat ini, Natural Language Processing (NLP) banyak digunakan. Karena, data yang kita pahami selama ini tidak hanya sebatas angka-angka, namun juga termasuk teks, kalimat, suara, bahkan video. Produk Artificial Intelligence (AI) juga terus berkembang seiring dengan banyaknya manfaat dari NLP ini. Sebagai contoh sederhana saja, pernahkah kita temui sebuah mainan yang mampu merekam suara kita kemudian dia tirukan kembali suara kita itu sambil menari? Mungkin kita juga kerap iseng-iseng mencari informasi registrasi sebuah program melalui platform-nya dengan bertanya pada chatbot. Atau, mungkin sebagian besar dari kita kemarin-kemarin berinteraksi melalui Telegram atau Whatsapps (WA) dengan menggunakan fasilitas chatbot. Yang paling sering kita temui, mungkin ketika bermain game kita kerap bercakap-cakap dengan avatar-avatar selama bermain game atau yang disebut NPC. Itulah beberapa produk nyata hasil perkembangan dari NLP.

Dalam kesempatan kali ini, selain memahami beberapa package yang biasa digunakan dalam NLP, kita juga mencoba menerapkannya menggunakan R. Adapun data yang akan kita olah dengan NLP adalah mengenai respon masyarakat dunia maya terhadap rencana pemerintah menaikkan harga tiket masuk Candi Borobudur. Data ini saya peroleh dengan cara crawling Twitter dan dari sebanyak 10.150 Tweets bahasa Indonesia, saya ekstraksi beberapa tweets yang fokus cuitan terkait rencana kenaikan harga tiket masuk Candi Borobudur.

Tentunya, teks dari tweets tersebut masih tercampur antara huruf, angka, simbol-simbol, termasuk dengan karakter mention, tautan atau URL, serta emoji. Memang di dalam NLP, masing-masing komponen teks bisa kita analisis seluruhnya, namun, kali ini kita batasi dulu hanya khusus NLP teks.

Data yang kita gunakan dalam praktik NLP dengan R bisa teman-teman unduh terlebih dahulu pada tautan berikut. Setelah datanya diunduh, kita dapat melakukan tahapan NLP terhadap data teks dengan mengikuti beberapa code berikut:

Bahasan mengenai import data bisa teman-teman lihat di sini.

#Aktivasi package dplyr untuk olah teks
library(dplyr)
#Mengubah kalimat menjadi tipe karakter 
tweets <- tiketcandi$teks %>% as.character()
head(tweets)
## [1] "Alasan menko luhut menaikkan tiket borobudur jadi 750rb : https://t.co/EMJrqgIqJx"                                                                                                                                                                                                                 
## [2] "@bergunarta Ada duit kan mas? Beli tiketnya, nonton, terus liat posisi stage sama tempat ibadah/candinya. Kenapa lu ga protes waktu jogja air show? Gue ikut skydive yg DZ/landingnya di halaman sekitar prambanan sm borobudur. Banyakin main mas ganteng, jgn traveling via google sm youtube :)"
## [3] "@kadrunmampos Inilah alasan mengapa tiket naik Candi Borobudur dinaikan...\r\n\r\nSampai sini, ngertikan...?\r\n\r\n<U+0001F923><U+0001F923><U+0001F923><U+0001F923>"                                                                                                                              
## [4] "DPR Khawatir Kenaikan Tiket Borobudur Kurangi Jumlah Wisatawan https://t.co/Sx8LXl1D8j"                                                                                                                                                                                                            
## [5] "@convomf yg gegara tiket candi borobudur naik mau bangun candi sendiri dinamain candi crush"                                                                                                                                                                                                       
## [6] "Seperti Borobudur, Tiket Komodo Rp 3,75 juta per Tahun Masih Wacana https://t.co/kDezi21tYf"
#Menghapus karakter \n dalam kalimat
tweets <- gsub( "\n"," ",tweets)
head(tweets)
## [1] "Alasan menko luhut menaikkan tiket borobudur jadi 750rb : https://t.co/EMJrqgIqJx"                                                                                                                                                                                                                 
## [2] "@bergunarta Ada duit kan mas? Beli tiketnya, nonton, terus liat posisi stage sama tempat ibadah/candinya. Kenapa lu ga protes waktu jogja air show? Gue ikut skydive yg DZ/landingnya di halaman sekitar prambanan sm borobudur. Banyakin main mas ganteng, jgn traveling via google sm youtube :)"
## [3] "@kadrunmampos Inilah alasan mengapa tiket naik Candi Borobudur dinaikan...\r \r Sampai sini, ngertikan...?\r \r <U+0001F923><U+0001F923><U+0001F923><U+0001F923>"                                                                                                                                  
## [4] "DPR Khawatir Kenaikan Tiket Borobudur Kurangi Jumlah Wisatawan https://t.co/Sx8LXl1D8j"                                                                                                                                                                                                            
## [5] "@convomf yg gegara tiket candi borobudur naik mau bangun candi sendiri dinamain candi crush"                                                                                                                                                                                                       
## [6] "Seperti Borobudur, Tiket Komodo Rp 3,75 juta per Tahun Masih Wacana https://t.co/kDezi21tYf"
#Menghapus karakter \r dalam kalimat
tweets <- gsub( "\r"," ",tweets)
head(tweets)
## [1] "Alasan menko luhut menaikkan tiket borobudur jadi 750rb : https://t.co/EMJrqgIqJx"                                                                                                                                                                                                                 
## [2] "@bergunarta Ada duit kan mas? Beli tiketnya, nonton, terus liat posisi stage sama tempat ibadah/candinya. Kenapa lu ga protes waktu jogja air show? Gue ikut skydive yg DZ/landingnya di halaman sekitar prambanan sm borobudur. Banyakin main mas ganteng, jgn traveling via google sm youtube :)"
## [3] "@kadrunmampos Inilah alasan mengapa tiket naik Candi Borobudur dinaikan...    Sampai sini, ngertikan...?    <U+0001F923><U+0001F923><U+0001F923><U+0001F923>"                                                                                                                                      
## [4] "DPR Khawatir Kenaikan Tiket Borobudur Kurangi Jumlah Wisatawan https://t.co/Sx8LXl1D8j"                                                                                                                                                                                                            
## [5] "@convomf yg gegara tiket candi borobudur naik mau bangun candi sendiri dinamain candi crush"                                                                                                                                                                                                       
## [6] "Seperti Borobudur, Tiket Komodo Rp 3,75 juta per Tahun Masih Wacana https://t.co/kDezi21tYf"
#Mengganti karakter titik dalam kalimat dengan blank
tweets <- gsub("[.]", "", tweets)
head(tweets)
## [1] "Alasan menko luhut menaikkan tiket borobudur jadi 750rb : https://tco/EMJrqgIqJx"                                                                                                                                                                                                                
## [2] "@bergunarta Ada duit kan mas? Beli tiketnya, nonton, terus liat posisi stage sama tempat ibadah/candinya Kenapa lu ga protes waktu jogja air show? Gue ikut skydive yg DZ/landingnya di halaman sekitar prambanan sm borobudur Banyakin main mas ganteng, jgn traveling via google sm youtube :)"
## [3] "@kadrunmampos Inilah alasan mengapa tiket naik Candi Borobudur dinaikan    Sampai sini, ngertikan?    <U+0001F923><U+0001F923><U+0001F923><U+0001F923>"                                                                                                                                          
## [4] "DPR Khawatir Kenaikan Tiket Borobudur Kurangi Jumlah Wisatawan https://tco/Sx8LXl1D8j"                                                                                                                                                                                                           
## [5] "@convomf yg gegara tiket candi borobudur naik mau bangun candi sendiri dinamain candi crush"                                                                                                                                                                                                     
## [6] "Seperti Borobudur, Tiket Komodo Rp 3,75 juta per Tahun Masih Wacana https://tco/kDezi21tYf"
#Mengganti alamat html dan URL dengan blank
tweets <- tweets %>%
  replace_html() %>%
  replace_url()
head(tweets)
## [1] "Alasan menko luhut menaikkan tiket borobudur jadi 750rb : "                                                                                                                                                                                                                                      
## [2] "@bergunarta Ada duit kan mas? Beli tiketnya, nonton, terus liat posisi stage sama tempat ibadah/candinya Kenapa lu ga protes waktu jogja air show? Gue ikut skydive yg DZ/landingnya di halaman sekitar prambanan sm borobudur Banyakin main mas ganteng, jgn traveling via google sm youtube :)"
## [3] "@kadrunmampos Inilah alasan mengapa tiket naik Candi Borobudur dinaikan    Sampai sini, ngertikan?    <U+0001F923><U+0001F923><U+0001F923><U+0001F923>"                                                                                                                                          
## [4] "DPR Khawatir Kenaikan Tiket Borobudur Kurangi Jumlah Wisatawan "                                                                                                                                                                                                                                 
## [5] "@convomf yg gegara tiket candi borobudur naik mau bangun candi sendiri dinamain candi crush"                                                                                                                                                                                                     
## [6] "Seperti Borobudur, Tiket Komodo Rp 3,75 juta per Tahun Masih Wacana "
#Mengganti karakter koma dalam kalimat dengan blank
tweets <- gsub("[,]", "", tweets)
head(tweets)
## [1] "Alasan menko luhut menaikkan tiket borobudur jadi 750rb : "                                                                                                                                                                                                                                   
## [2] "@bergunarta Ada duit kan mas? Beli tiketnya nonton terus liat posisi stage sama tempat ibadah/candinya Kenapa lu ga protes waktu jogja air show? Gue ikut skydive yg DZ/landingnya di halaman sekitar prambanan sm borobudur Banyakin main mas ganteng jgn traveling via google sm youtube :)"
## [3] "@kadrunmampos Inilah alasan mengapa tiket naik Candi Borobudur dinaikan    Sampai sini ngertikan?    <U+0001F923><U+0001F923><U+0001F923><U+0001F923>"                                                                                                                                        
## [4] "DPR Khawatir Kenaikan Tiket Borobudur Kurangi Jumlah Wisatawan "                                                                                                                                                                                                                              
## [5] "@convomf yg gegara tiket candi borobudur naik mau bangun candi sendiri dinamain candi crush"                                                                                                                                                                                                  
## [6] "Seperti Borobudur Tiket Komodo Rp 375 juta per Tahun Masih Wacana "
#Mengganti karakter : dalam kalimat dengan blank
tweets <- gsub("[:]", "", tweets)
head(tweets)
## [1] "Alasan menko luhut menaikkan tiket borobudur jadi 750rb  "                                                                                                                                                                                                                                   
## [2] "@bergunarta Ada duit kan mas? Beli tiketnya nonton terus liat posisi stage sama tempat ibadah/candinya Kenapa lu ga protes waktu jogja air show? Gue ikut skydive yg DZ/landingnya di halaman sekitar prambanan sm borobudur Banyakin main mas ganteng jgn traveling via google sm youtube )"
## [3] "@kadrunmampos Inilah alasan mengapa tiket naik Candi Borobudur dinaikan    Sampai sini ngertikan?    <U+0001F923><U+0001F923><U+0001F923><U+0001F923>"                                                                                                                                       
## [4] "DPR Khawatir Kenaikan Tiket Borobudur Kurangi Jumlah Wisatawan "                                                                                                                                                                                                                             
## [5] "@convomf yg gegara tiket candi borobudur naik mau bangun candi sendiri dinamain candi crush"                                                                                                                                                                                                 
## [6] "Seperti Borobudur Tiket Komodo Rp 375 juta per Tahun Masih Wacana "
#Mengganti karakter / dalam kalimat dengan blank
tweets <- gsub("/", "", tweets)
head(tweets)
## [1] "Alasan menko luhut menaikkan tiket borobudur jadi 750rb  "                                                                                                                                                                                                                                 
## [2] "@bergunarta Ada duit kan mas? Beli tiketnya nonton terus liat posisi stage sama tempat ibadahcandinya Kenapa lu ga protes waktu jogja air show? Gue ikut skydive yg DZlandingnya di halaman sekitar prambanan sm borobudur Banyakin main mas ganteng jgn traveling via google sm youtube )"
## [3] "@kadrunmampos Inilah alasan mengapa tiket naik Candi Borobudur dinaikan    Sampai sini ngertikan?    <U+0001F923><U+0001F923><U+0001F923><U+0001F923>"                                                                                                                                     
## [4] "DPR Khawatir Kenaikan Tiket Borobudur Kurangi Jumlah Wisatawan "                                                                                                                                                                                                                           
## [5] "@convomf yg gegara tiket candi borobudur naik mau bangun candi sendiri dinamain candi crush"                                                                                                                                                                                               
## [6] "Seperti Borobudur Tiket Komodo Rp 375 juta per Tahun Masih Wacana "
#Mengganti karakter ? dalam kalimat dengan blank
tweets <- gsub("[?]", "", tweets)
head(tweets)
## [1] "Alasan menko luhut menaikkan tiket borobudur jadi 750rb  "                                                                                                                                                                                                                               
## [2] "@bergunarta Ada duit kan mas Beli tiketnya nonton terus liat posisi stage sama tempat ibadahcandinya Kenapa lu ga protes waktu jogja air show Gue ikut skydive yg DZlandingnya di halaman sekitar prambanan sm borobudur Banyakin main mas ganteng jgn traveling via google sm youtube )"
## [3] "@kadrunmampos Inilah alasan mengapa tiket naik Candi Borobudur dinaikan    Sampai sini ngertikan    <U+0001F923><U+0001F923><U+0001F923><U+0001F923>"                                                                                                                                    
## [4] "DPR Khawatir Kenaikan Tiket Borobudur Kurangi Jumlah Wisatawan "                                                                                                                                                                                                                         
## [5] "@convomf yg gegara tiket candi borobudur naik mau bangun candi sendiri dinamain candi crush"                                                                                                                                                                                             
## [6] "Seperti Borobudur Tiket Komodo Rp 375 juta per Tahun Masih Wacana "
#Mengganti angka dalam kalimat dengan blank (bila perlu)
tweets <- gsub("[[:digit:]]", "", tweets)
head(tweets)
## [1] "Alasan menko luhut menaikkan tiket borobudur jadi rb  "                                                                                                                                                                                                                                  
## [2] "@bergunarta Ada duit kan mas Beli tiketnya nonton terus liat posisi stage sama tempat ibadahcandinya Kenapa lu ga protes waktu jogja air show Gue ikut skydive yg DZlandingnya di halaman sekitar prambanan sm borobudur Banyakin main mas ganteng jgn traveling via google sm youtube )"
## [3] "@kadrunmampos Inilah alasan mengapa tiket naik Candi Borobudur dinaikan    Sampai sini ngertikan    <U+0001F923><U+0001F923><U+0001F923><U+0001F923>"                                                                                                                                    
## [4] "DPR Khawatir Kenaikan Tiket Borobudur Kurangi Jumlah Wisatawan "                                                                                                                                                                                                                         
## [5] "@convomf yg gegara tiket candi borobudur naik mau bangun candi sendiri dinamain candi crush"                                                                                                                                                                                             
## [6] "Seperti Borobudur Tiket Komodo Rp  juta per Tahun Masih Wacana "
#Mengganti emoji dalam kalimat
tweets <- replace_html(replace_emoji(tweets))
head(tweets)
## [1] "Alasan menko luhut menaikkan tiket borobudur jadi rb "                                                                                                                                                                                                                                   
## [2] "@bergunarta Ada duit kan mas Beli tiketnya nonton terus liat posisi stage sama tempat ibadahcandinya Kenapa lu ga protes waktu jogja air show Gue ikut skydive yg DZlandingnya di halaman sekitar prambanan sm borobudur Banyakin main mas ganteng jgn traveling via google sm youtube )"
## [3] "@kadrunmampos Inilah alasan mengapa tiket naik Candi Borobudur dinaikan Sampai sini ngertikan                 "                                                                                                                                                                          
## [4] "DPR Khawatir Kenaikan Tiket Borobudur Kurangi Jumlah Wisatawan "                                                                                                                                                                                                                         
## [5] "@convomf yg gegara tiket candi borobudur naik mau bangun candi sendiri dinamain candi crush"                                                                                                                                                                                             
## [6] "Seperti Borobudur Tiket Komodo Rp juta per Tahun Masih Wacana "
#Mengganti Tag dalam kalimat
tweets <- replace_tag(tweets)
head(tweets)
## [1] "Alasan menko luhut menaikkan tiket borobudur jadi rb "                                                                                                                                                                                                                        
## [2] " Ada duit kan mas Beli tiketnya nonton terus liat posisi stage sama tempat ibadahcandinya Kenapa lu ga protes waktu jogja air show Gue ikut skydive yg DZlandingnya di halaman sekitar prambanan sm borobudur Banyakin main mas ganteng jgn traveling via google sm youtube )"
## [3] " Inilah alasan mengapa tiket naik Candi Borobudur dinaikan Sampai sini ngertikan                 "                                                                                                                                                                            
## [4] "DPR Khawatir Kenaikan Tiket Borobudur Kurangi Jumlah Wisatawan "                                                                                                                                                                                                              
## [5] " yg gegara tiket candi borobudur naik mau bangun candi sendiri dinamain candi crush"                                                                                                                                                                                          
## [6] "Seperti Borobudur Tiket Komodo Rp juta per Tahun Masih Wacana "
#Merapikan kalimat dengan strip()
#Penggunaan fungsi strip() juga bisa menghapus angka, titik, koma, ), @, #, ?, \n \r \t dan lainnya
#Membuat teks menjadi lower atau huruf kecil semua
#Fungsi strip() tidak bisa menghapus mention, URL link atau emoji serta karakter "\"
tweets <- strip(tweets)
head(tweets)
## [1] "alasan menko luhut menaikkan tiket borobudur jadi rb"                                                                                                                                                                                                                      
## [2] "ada duit kan mas beli tiketnya nonton terus liat posisi stage sama tempat ibadahcandinya kenapa lu ga protes waktu jogja air show gue ikut skydive yg dzlandingnya di halaman sekitar prambanan sm borobudur banyakin main mas ganteng jgn traveling via google sm youtube"
## [3] "inilah alasan mengapa tiket naik candi borobudur dinaikan sampai sini ngertikan"                                                                                                                                                                                           
## [4] "dpr khawatir kenaikan tiket borobudur kurangi jumlah wisatawan"                                                                                                                                                                                                            
## [5] "yg gegara tiket candi borobudur naik mau bangun candi sendiri dinamain candi crush"                                                                                                                                                                                        
## [6] "seperti borobudur tiket komodo rp juta per tahun masih wacana"
#Menghapus kalimat terduplikat
tweets_remodup <- tweets %>% 
  as.data.frame() %>% 
  distinct()
head(tweets_remodup$.)
## [1] "alasan menko luhut menaikkan tiket borobudur jadi rb"                                                                                                                                                                                                                      
## [2] "ada duit kan mas beli tiketnya nonton terus liat posisi stage sama tempat ibadahcandinya kenapa lu ga protes waktu jogja air show gue ikut skydive yg dzlandingnya di halaman sekitar prambanan sm borobudur banyakin main mas ganteng jgn traveling via google sm youtube"
## [3] "inilah alasan mengapa tiket naik candi borobudur dinaikan sampai sini ngertikan"                                                                                                                                                                                           
## [4] "dpr khawatir kenaikan tiket borobudur kurangi jumlah wisatawan"                                                                                                                                                                                                            
## [5] "yg gegara tiket candi borobudur naik mau bangun candi sendiri dinamain candi crush"                                                                                                                                                                                        
## [6] "seperti borobudur tiket komodo rp juta per tahun masih wacana"
#Jumlah Baris sebelum membuang kalimat terduplikat
length(tweets)
## [1] 53
#Jumlah Baris setelah membuang kalimat terduplikat
nrow(tweets_remodup)
## [1] 38

Demikian sedikit berbagi kita mengenai bagaimana cara melakukan Natural Language Processing dengan R. Terus simak unggahan terbaru blog ini, selamat memahami dan mempraktikkan!

Add Comments


EmoticonEmoticon