Social Media Series (Part 3/4) : Membuat Word Scoring

Oke mari melanjutkan social media series yang terpotong karena kesibukan membuat SKRIPSI, WISUDAAN, dan Mencari Kerja wkwk

Jadi di bagian ini adalah untuk membuat klasifikasi teks berdasarkan kata kata yang terkandung didalamnnya

Misalnya kata ‘Saya, sangat cinta indonesia’
Dimana kata ‘cinta’ merupakan skor positif yang berarti kata tersebut benilai (+1)

Lalu misalnya kata ‘Saya benci kepada orang itu’
dimana kata ‘benci’ merupakan kata negatif sehingga kata tersebut bernilai (-1)

Terus bagaimana dengan kata ‘saya tidak cinta’ ?? wkwk
ya, kata tersebut terdapat 2 kalimat, yang positif dan negatif sehingga kata tersebut bernilai netral atau nol(0)

So, lanjut saja ke codingnya wkwk
yang pertama mengambil data bersih yang sudah di cleaning pada part pertama

## ambil data yang sudah di cleaning di tahap pertama
data_clean <- read.csv('twitclean-10kv8.csv')
str(data_clean)

Kemudian setelah itu mendefinisikan / membentuk kamus dari kata positif dan kata negatif sudah disediakan pada link github.

## ambil data untuk word scoring 
positif <- scan("Sentiment Corpus(ID)/s-pos.txt",what="character",comment.char=";")
negatif <- scan("Sentiment Corpus(ID)/s-neg.txt",what="character",comment.char=";")

Setelah itu jika kita ingkin menabahkan kata yang kita definisikan sendiri bisa dilakukan menggunakan cara beikut

##jika ingin menambahkan kata yang di definisikan sendiri
kata.positif = c(positif,"cinta","bgs")
kata.negatif = c(negatif,"bangsat","busuk")

Selanjutnya adalah membuat fungsi untuk memberikan skor pada masing masing kalimat.

## fungsi untuk melnalankan penilaian atau pembobotan tehadap kata-kata 
score.sentiment = function(kalimat2, kata.positif, kata.negatif, .progress='none')
{
require(plyr)
require(stringr)
scores = laply(kalimat2, function(kalimat, kata.positif, kata.negatif) {
kalimat = gsub('[[:punct:]]', '', kalimat)
kalimat = gsub('[[:cntrl:]]', '', kalimat)
kalimat = gsub('\\d+', '', kalimat)
kalimat = tolower(kalimat)

list.kata = str_split(kalimat, '\\s+')
kata2 = unlist(list.kata)
positif.matches = match(kata2, kata.positif)
negatif.matches = match(kata2, kata.negatif)
positif.matches = !is.na(positif.matches)
negatif.matches = !is.na(negatif.matches)
score = sum(positif.matches) - (sum(negatif.matches))
return(score)
}, kata.positif, kata.negatif, .progress=.progress )
scores.df = data.frame(score=scores, text=kalimat2)
return(scores.df)
}

Lalu memanggil fungsi tersebut

#melakukan skoring text
hasil = score.sentiment(data_clean$text, kata.positif, kata.negatif)
head(hasil)
# melakukan labeling pada nilai yang kurang dari 0 sebagai negatif dan lebih dari = 0 adalah positif
hasil$klasifikasi<- ifelse(hasil$score<0, "Negatif","Positif")
hasil$klasifikasi
View(hasil)

sehingga hasilnya akan seperti berikut

Setelah itu mari menyimpan dataframe tersebut, sehingga bisa digunakan untuk proses selanjutnya

#Tukar Row
data <- hasil[c(3,1,2)]
View(data)
write.csv(data, file = "data ter labeli.csv")
#Memisahkan dan menyimpan twit positif dan negatif
data.pos <- hasil[hasil$score>0,]
View(data.pos)
write.csv(data.pos, file = "data-pos.csv")
#Memisahkan dan meyimpan twit positif dan negatif
data.neg <- hasil[hasil$score<0,]
View(data.neg)
write.csv(data.neg, file = "data-neg.csv")

dan selesai untuk word scoring~