Kamis, 10 Mei 2018

Apa itu Sentimen Analisis


Sentimen analysis atau disebut juga opinion mining biasanya diterapkan  pada ulasan, tanggapan survei, media online dan sosial. Tujuannya adalah untuk menilai sikap atau reaksi pembaca, pembicara, pemakai aplikasi terhadap suatu produk atau berita atau dokumen. Intinya untuk menilai reaksi pelanggan apakah itu baik, buruk, atau netral.

Pengklasifikasian Sentiment Analysis
-          Machine Learning
Pendekatan ini memakai teknik machine learning dan berbagai fitur untuk membuat pengklasifikasi yang dapat mengidentifikasi teks yang mengekspresikan suatu sentimen. Metode deep learning sekarang sedang populer karena cocok untuk mempelajari data
-          Lexicon-based
Metode ini menggunakan berbagai macam kata yang dianotasikan oleh skor untuk menentukan penilaian secara umum dari konten yang diberikan. Aset terbaik dari teknik ini adalah teknik ini tidak membutuhkan data untuk latihan, sementara kelemahannya adalah banyak kata dan ekspresi yang tidak dimasukkan dalam sentimen lexicon
-          Hybrid
Gabungan dari machine learning dan lexicon-base. Walaupun jarang digunakan metode ini biasanya menghasilkan hasil yang lebih menjanjikan dibandingkan kedua metode diatas.
            
Untuk contoh kasus kita akan mencoba program untuk mengumpulkan kata-kata yang sering digunakan pada komentar facebook yang berbau SARA tapi belum diklasifikasikan apakah kalimat yang dibentuk termasuk positif atau negatif. Caranya:

Pertama kita perlu mempersiapkan beberapa hal:
o   R dan Rstudio
Kita bisa mendownload R dan R studio di https://cran.r-project.org/bin/windows/base/ dan https://www.rstudio.com/products/rstudio/download/
o   Akun facebook developer
Kita dapat membuat akun facebook developer di https://developers.facebook.com/
o   Token Akses dari Penjelajah API Graf
Kita bisa mendapatkan token akses dari API Graph Explorer dengan cara pada  https://developers.facebook.com/ pilih Alat & Dukungan, pilih Penjelajah API Graf kemudian akan muncul tampilan seperti ini



Pilih dapatkan token dan izinnya dipilih semua dan pilih dapatkan token akses




Kemudian kita perlu simpan token akses yang dihasilkan (*Token Akses ini hanya berlaku sampai 2 jam, lebih dari itu perlu membuatnya lagi.)


Kemudian kita jalankan Rstudio dan ketikkan
install.packages("devtools")
install.packages("plyr")
install.packages("stringr")
install.packages("ggplot2")# Install
install.packages("tm")  # for text mining
install.packages("SnowballC") # for text stemming
install.packages("wordcloud") # word-cloud generator
install.packages("RColorBrewer") # color palettes
Perintah ini berguna untuk menginstall packages yang kita butuhkan untuk sentiment analysis nanti.
          Ketikkan
library("tm")
library("SnowballC")
library("wordcloud")
library("RColorBrewer")
library(plyr)
library(stringr)
library(ggplot2)
library(devtools)
Perintah ini berguna memakai package yang tadi sudah didownload.
        Masukkan perintah ini
            install_github("pablobarbera/Rfacebook/Rfacebook")
            library(Rfacebook)
         Perintah ini berguna untuk menginstall package berdasarkan link github dan memakai package tersebut.

Untuk memakai API Facebook kita perlu memasukkan token akses yang tadi sudah kita persiapkan dengan perintah
            fb_auth = 'token akses' 
     Pada twitter kita bisa mengambil post orang dengan bebas, tapi pada facebook sekarang sudah tidak bisa, maka kita perlu mencari halaman pada facebook untuk dilihat postingannya dengan perintah
            fb_page <- getPage(page="TirtoID", token=fb_auth, n = 150,  feed = FALSE,
                   reactions = TRUE,  verbose = TRUE, api = "v2.9")
     Setelah itu kita perlu melihat hasil yang didapatkan dengan perintah
            View(fb_page)              

  
Setelah melihat hasilnya, kita perlu memilih postingan mana yang akan diambil komentarnya dan mengubahnya menjadi dataframe serta melihat hasilnya kembali. Perintahnya
       fb_post <- getPost(post = '1515768312081946_2037957289863043', n=139, token=fb_auth,api = "v2.9")
fb_post_df <- as.data.frame(fb_post[2])
View(fb_post_df)


Setelah itu komen yang kita dapatkan masih belum bersih dari tanda baca, kita perlu membersihkannya dan melihat hasilnya lagi dengan perintah
comments_data <- sapply(fb_post_df$comments.message,function(row) iconv(row, "latin1", "ASCII", sub=""))
comments_data <- gsub("@\\w+", "", comments_data)
comments_data <- gsub("#\\w+", '', comments_data)
comments_data <- gsub("RT\\w+", "", comments_data)
comments_data <- gsub("http.*", "", comments_data)
comments_data <- gsub("RT", "", comments_data)
comments_data <- sub("([.-])|[[:punct:]]", "\\1", comments_data)
comments_data <- sub("(['])|[[:punct:]]", "\\1", comments_data)
View(comments_data)



Kemudian data yang sudah bersih tadi dapat kita analisis dan buat gambar. Caranya kita perlu masukkan data yang sudah bersih tadi ke corpus, periksa isi dokumen tersebut dan mengubah teks dalam data tersebut menjadi huruf kecil, menghapus angka, dan yang lainnya dengan perintah.
         docs <- Corpus(VectorSource(comments_data))
         inspect(docs)
         # Convert the text to lower case
         docs <- tm_map(docs, content_transformer(tolower))
         # Remove numbers
         docs <- tm_map(docs, removeNumbers)
         # Remove english common stopwords
         docs <- tm_map(docs, removeWords, stopwords("english"))
         # Remove your own stop word
         # specify your stopwords as a character vector
         docs <- tm_map(docs, removeWords, c("blabla1", "blabla2"))
         # Remove punctuations
         docs <- tm_map(docs, removePunctuation)
         # Eliminate extra white spaces
         docs <- tm_map(docs, stripWhitespace)
 
     Kemudian kita menganalisa kata-kata yang sering muncul pada data tersebut dengan perintah
        dtm <- TermDocumentMatrix(docs)
        m <- as.matrix(dtm)
        v <- sort(rowSums(m),decreasing=TRUE)
        d <- data.frame(word = names(v),freq=v)
        head(d, 10)



Kita dapat membuat word cloud dari data yang sudah dianalisa tersebut dengan perintah
         set.seed(1234)
         wordcloud(words = d$word, freq = d$freq, min.freq = 1,
         max.words=200, random.order=FALSE, rot.per=0.35,
         colors=brewer.pal(8, "Dark2"))



Wordcloud diatas hanya untuk mengumpulkan kata-kata yang sering digunakan yang mana, belum mengelompokkan apakah kalimat pada kolom komentar yang menggunakan kata-kata diatas tergolong positif atau negatif.