Langsung ke konten utama

Natural Language Processing (NLP) Penerapan Stopwords Bahasa Indonesia dengan R: Topik Sepinya Jalur Pantura Akibat Adanya Tol Trans Jawa

Natural Language Processing : Stopwords Bahasa Indonesia dengan R Halo teman-teman, berjumpa lagi dengan blog sederhana ini. Pada pembahasan sebelumnya, kita telah bersama belajar penerapan stemming teks yang merupakan bagian dari Natural Language Processing (NLP) menggunakan R. Pada perjumpaan kali ini, kita akan melanjutkan perjuangan kita berbagi ilmu mengenai NLP, tepatnya adalah penerapan stopwords Bahasa Indonesia dengan R. Perlu diketahui bahwa di dalam NLP, untuk menambah keluasan dan mempertajam analisis teks, proses stemming teks saja belum cukup. Kita juga perlu membersihkan teks yang relatif atau mutlak tidak bermakna di dalam analisis teks. Biasanya teks yang dieliminasi dalam NLP merupakan kata penghubunga atau konjungsi, atau kata yang berupa ekspresi yang bercampur di dalam data teks, misalkan ekspresi tertawa "wkwk", ekspresi penolakan "gak, nggak, tidak, atau gk", bahasa asing (selain Indonesia), atau juga kata-kata yang tidak memenuhi kaidah ta

Web Scraping Kumpulan Quote dengan R

Web scraping dengan R

Jumpa lagi teman-teman di blog sederhana ini. Kita sebelumnya telah membahas hal-hal yang serius dan mungkin menegangkan. Kali ini kita akan break sejenak dengan meneruskan pembahasan mengenai web scraping. Kita akan membahas web scraping dulu sebelum web crawling. Semoga ke depan kita dapat mengulas web crawling.

Di era data besar atau diistilahkan Big Data, kita dihadapkan pada kumpulan data yang sebenarnya sangat dekat dengan keseharian kita. Ketika kita berangkat kerja, sekolah, atau kuliah, di sepanjang jalan kita pastinya menyaksikan sejumlah unit kendaraan yang berlalu-lintas. Kalau kita mau sedikit "kurang kerjaan" setiap menit coba kita hitung berapa jumlah kendaraan yang melintas setiap harinya. Dalam setahun, itu akan menjadi sebuah data yang berukuran besar, memiliki kecepatan yang tinggi, bahkan dinamis. Contoh lain,jumlah data posisi lintang dan bujur kita selama beraktivitas, baik di dalam rumah maupun di luar rumah selama 5 tahun. Setiap detik bahkan bisa jadi kita peroleh data yang begitu dinamis, bergerak cepat dan dalam ukuran yang besar bila kita juga menyatukan data posisi lintang bujur untuk seluruh penduduk di Indonesia misalkan.

Tidak kita sadari pula, berapa jumlah kata dan kalimat yang telah kita baca dari website ke website selama 5 tahun terakhir. Inilah wujud nyata dari Big Data yang akan kita coba ulas dalam konteks web scraping kali ini menggunakan R.

Web scraping sebenarnya merupakan salah satu aktivitas hacking yang telah dikenal dalam dunia cyber. Tujuan dari aktivitas ini adalah mendapatkan sejumlah atau sebagian informasi atau variabel tertentu yang belum terstruktur dari sebuah obyek berupa website, blog, atau media sosial menjadi sebuah data yang terstruktur dan siap dioleh lebih lanjut menjadi sebuah informasi bermanfaat atau memiliki insight.

Legalitas dari aktivitas web scraping ini sebenarnya masih debatable, karena web scraping bisa jadi bermakna positif bila kita melakukannya dalam rangka menguji keamanan data dalam website tertentu, atau dalam rangka memperoleh data-data yang bersifat public atau agregat. Sebaliknya pula, web scraping juga bisa dimaknai sebagai aktivitas yang negatif bila dalam pelaksanaannya bertujuan untuk melakukan hijacking yang intinya mengambil alih website untuk kemudian mengacak-acak isinya atau dalam rangka mencuri data pribadi kemudian melakukan perusakan terhadap website.

Secara umum, sebelum melakukan web scraping, ada baiknya kita melakukan pengecekan sekaligus "permisi" terhadap sebuah website, misalkan dengan menggunakan fungsi *robots.txt. Sebab, dengan melakukan akses url website ditambah dengan /robots.txt kita akan mampu melihat apakah sejumlah data atau obyek di dalam halaman sebuah website boleh kita scrape atau tidak.

Baik, kali ini kita akan mencoba melakukan web scraping dengan menggunakan salah satu package di R khusus untuk web scraping, yaitu rvest. Dengan rvest ini, R dapat mengekstrak sejumlah obyek berbahasa Hypertext Markup Language (HTML), XML, atau XHTML. Dengan mengekstraks sejumlah obyek itu, kita akan memperoleh sejumlah raw data untuk kemudian distrukturisasi menjadi sebuah data yang lebih tertata menggunakan package stringr.

Laman website yang akan kita scrape kali ini adalah quotes.toscrape.com dengan perwajahan sebagai berikut:

Situs quote.toscrape yang menjadi target web scraping

Kita akan melakukan web scraping di Chrome sehingga kita harus menyiapkan Addons dari Chrome yaitu SelectorGadget terlebih dahulu. Caranya adalah dengan mencari Addons SelectorGadget di google kemudian klik Add to Chrome sebagaimana tampilan berikut:

Tahap 1 instalasi Addons Chrome: SelectorGadget

Setelah itu kita klik Add extension untuk menambagkan fungsi (Addons) pada search engine Chrome kita ketika muncul box berikut:

Aktivasi Addons SelectorGadget

Untuk memastikan Addons SelectorGadget telah terpasang pada Chrome, kita dapat melihatnya dengan mengklik jendela Puzzle pada pojok kanan atas. Ketika telah muncul menu SelectorGadget, maka sudah dipastikan bahwa Addons tersebut telah terpasang.

Bukti Addons SelectorGadget telah aktif

Sebelum melakukan web scraping, kita klik terlebih dulu SelectorGadget dengan cara klik sekali menu tersebut sehingga muncul note, SelectorGadget Has access to this site seperti tampilan berikut:

Mengaktifkan SelectorGadget pada website

Setelah itu kita coba sorot beberapa obyek pada halaman website quotes.toscrape.com. Bila muncul semacam hover atau tanda-tanda kota warna kuning atau hijau, maka kita telah siap melakukan ekstraks terhadap obyek atau nodes yang terkandung di dalam website. Tampilannya sebagaimana gambar berikut:

Tanda bahwa SelectorGadget siap digunakan, muncul hover setiap cursor digerakkan pada obyek website

Untuk men-scrape teks quotes pada website tersebut, kita cukup menyorot obyek yang mengandung teks sedemikian rupa sehingga muncul warna kuning seperti stabilo. Kemudian pada kota di bagian bawah terdapat scripts ".text" inilah wujud kode ekstraksi atau kode scrape yang bisa kita terapkan menggunakan R.

Memperoleh code dari nodes teks quote

Sedangkan untuk melakukan scrape nama penulis atau pencetus dari quote kita cukup dengan menyorot dan klik bagian "by (nama author)" dan muncul kode nodes ".author" sebagaimana tampilan berikut:

Memperoleh code dari nodes author

Adapun code secara lengkap bagi teman-teman yang pengin praktikum web scraping dengan R adalah sebagai berikut:

#Install dan aktivasi package
install.packages("rvest")
install.packages("xml2")
install.packages("stringr")
library(rvest)
library(xml2)
library(stringr)
#Mendeklarasikan alamat atau URL website/situs
#Membaca code HTML website
url <- 'http://quotes.toscrape.com/'
laman <- read_html(url)
list(laman)
## [[1]]
## {html_document}
## <html lang="en">
## [1] <head>\n<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\n<meta charset="UTF-8">\n<title>Quote ...
## [2] <body>\n    <div class="container">\n        <div class="row header-box">\n            <div class="col-md-8">\n   ...
#Men-scrape quote
quote <- laman %>% html_nodes('.text')
quote
## {xml_nodeset (10)}
##  [1] <span class="text" itemprop="text">“The world as we have created it is a process of our thinking. It cannot be c ...
##  [2] <span class="text" itemprop="text">“It is our choices, Harry, that show what we truly are, far more than our abi ...
##  [3] <span class="text" itemprop="text">“There are only two ways to live your life. One is as though nothing is a mir ...
##  [4] <span class="text" itemprop="text">“The person, be it gentleman or lady, who has not pleasure in a good novel, m ...
##  [5] <span class="text" itemprop="text">“Imperfection is beauty, madness is genius and it's better to be absolutely r ...
##  [6] <span class="text" itemprop="text">“Try not to become a man of success. Rather become a man of value.”</span>
##  [7] <span class="text" itemprop="text">“It is better to be hated for what you are than to be loved for what you are  ...
##  [8] <span class="text" itemprop="text">“I have not failed. I've just found 10,000 ways that won't work.”</span>
##  [9] <span class="text" itemprop="text">“A woman is like a tea bag; you never know how strong it is until it's in hot ...
## [10] <span class="text" itemprop="text">“A day without sunshine is like, you know, night.”</span>
#Mengekstrak teksnya saja
quote <- laman %>% html_nodes('.text') %>% html_text()
quote
##  [1] "“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”"                
##  [2] "“It is our choices, Harry, that show what we truly are, far more than our abilities.”"                                              
##  [3] "“There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”"
##  [4] "“The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.”"                           
##  [5] "“Imperfection is beauty, madness is genius and it's better to be absolutely ridiculous than absolutely boring.”"                    
##  [6] "“Try not to become a man of success. Rather become a man of value.”"                                                                
##  [7] "“It is better to be hated for what you are than to be loved for what you are not.”"                                                 
##  [8] "“I have not failed. I've just found 10,000 ways that won't work.”"                                                                  
##  [9] "“A woman is like a tea bag; you never know how strong it is until it's in hot water.”"                                              
## [10] "“A day without sunshine is like, you know, night.”"
#Men-scrape penulis quote
author <- laman %>% html_nodes('.author')
author
## {xml_nodeset (10)}
##  [1] <small class="author" itemprop="author">Albert Einstein</small>
##  [2] <small class="author" itemprop="author">J.K. Rowling</small>
##  [3] <small class="author" itemprop="author">Albert Einstein</small>
##  [4] <small class="author" itemprop="author">Jane Austen</small>
##  [5] <small class="author" itemprop="author">Marilyn Monroe</small>
##  [6] <small class="author" itemprop="author">Albert Einstein</small>
##  [7] <small class="author" itemprop="author">André Gide</small>
##  [8] <small class="author" itemprop="author">Thomas A. Edison</small>
##  [9] <small class="author" itemprop="author">Eleanor Roosevelt</small>
## [10] <small class="author" itemprop="author">Steve Martin</small>
#Mengekstrak teks authornya saja
author <- laman %>% html_nodes('.author') %>% html_text()
author
##  [1] "Albert Einstein"   "J.K. Rowling"      "Albert Einstein"   "Jane Austen"       "Marilyn Monroe"   
##  [6] "Albert Einstein"   "André Gide"        "Thomas A. Edison"  "Eleanor Roosevelt" "Steve Martin"
#Membuat data frame
quoteku <- data.frame(author, quote)
kable(quoteku)
author quote
Albert Einstein “The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”
J.K. Rowling “It is our choices, Harry, that show what we truly are, far more than our abilities.”
Albert Einstein “There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”
Jane Austen “The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.”
Marilyn Monroe “Imperfection is beauty, madness is genius and it's better to be absolutely ridiculous than absolutely boring.”
Albert Einstein “Try not to become a man of success. Rather become a man of value.”
André Gide “It is better to be hated for what you are than to be loved for what you are not.”
Thomas A. Edison “I have not failed. I've just found 10,000 ways that won't work.”
Eleanor Roosevelt “A woman is like a tea bag; you never know how strong it is until it's in hot water.”
Steve Martin “A day without sunshine is like, you know, night.”

Untuk mempelajari teknik web scraping menggunakan R, kebetulan saya telah menyediakan sebuah buku khusus bagi teman-teman yang berminat memperdalam web scraping dengan R. Pemesanan buku dapat melalui tautan berikut atau sekadar tanya-tanya perihal buku-buku dengan menggunakan R bisa melalui kolom komentar yang tersedia di blog ini. Demikian sedikit sharing kita bagaimana melakukan web scraping dengan R. Selamat memahami dan mempraktikkan!

Komentar

Postingan populer dari blog ini

Pemodelan Autoregressive Integrated Moving Average (ARIMA Model) dengan R

ARIMA dengan R Jumpa lagi teman-teman, sebelumnya saya mohon maaf karena kemarin tidak sempat membuat unggahan terbaru di blog ini. Baik, sebelumnya kita telah mengulas tentang pemodelan Geographically Weigthed Regression (GWR) dengan R. Kali ini, kita akan melanjutkan belajar bersama mengenai pemodelan yang tak asing lagi dan populer hingga kini, yaitu pemodelan Autoregressive Integrated Moving Average (ARIMA). Kita akan membahas ARIMA secara langsung tanpa membahas AR dan MA secara tersendiri mengingat pada dasarnya ARIMA adalah model perpaduan antara model AR dengan order p , MA dengan order q dan aspek differencing dengan order d . Artinya, ketika kita mendengar istilah AR(1), maka sebenarnya itu adalah ARIMA(1, 0, 0), ketika kita mendengar ARI(1,1), maka aslinya itu ARIMA(1, 1, 0), atau bila mendengar MA(3), itu sebenarnya ARIMA(0, 0, 3) atau IMA(2,1) sebenarnya adalah ARIMA(0, 2, 1). Data runtun waktu atau time series merupakan salah satu jenis data yang hingga kini banyak digun

Machine Learning: Memahami Reinforcement Learning

Reinforcement Learning Halo teman-teman, pada pembahasan sebelumnya, kita telah berusaha memahami mengenai supervised learning dan unsupervised learning . Sebelum lanjut ke pemodelan statistik selanjutnya, ada baiknya kita membahas tentang satu lagi jenis algoritma machine learning yang akhir-akhir ini banyak digunakan dalam membentuk artificial intelligence (AI), yaitu algoritma reinforcement learning . Kita ke pengertian berdasarkan studi literatur daring ( online ) dulu teman-teman. Saya coba mengambil salah satu pengertian reinforcement learning, misalkan dari situsnya Algoritma, menyatakan bahwa reinforcement learning merupakan algoritma yang diterapkan untuk pembelajaran mesin ( machine learning ) sedemikian rupa sehingga dapat menentukan aksi yang tepat dan pada akhirnya sebuah program dapat bekerja secara otomatis memberikan hasil atau putusan yang benar. Lebih lanjut dalam situs algoritma mengangkat sebuah perumpamaan reinforcement learning dengan menggunakan proses penugasan

Machine Learning: Perbedaan Supervised Learning dan Unsupervised Learning

Perbedaan supervised learning dan unsupervised learning Halo teman-teman, kemarin kita telah mengawali bahasan mengenai salah satu anggota dari Machine Learning sekaligus merupakan contoh dari algoritma supervised learning , yaitu Naive Bayes Classifier (NBC). Akhir-akhir ini, dunia sains data dihebohkan dengan berbagai istilah statistik yang berkaitan erat dengan komputasi atau komputasi statistik, yaitu supervised learning dan unsupervised learning . Sebenarnya ada lagi istilah baru dan cukup makin sulit menyederhanakan definisinya, yaitu reinforcement learning , tapi khusus reinforcement learning nanti akan kita bahas tersendiri karena kita mulai bersinggungan dengan Artificial Intelligence atau kecerdasan buatan. Jujur, saya mengakui bahwa tidak semua dari kita memiliki latar belakang apalagi pakar teknologi informasi (IT). Sehingga, bila kita cermati bahasan-bahasan atau istilah komputasi statistik, sains data, atau data engineering , kita mungkin akan sejenak loading , bahkan s