Text Mining dengan Program R

Pada postingan ini saya akan berbagi tentang bagaimana cara mengolah atau menganalisis data dalam bentuk teks (kata-kata, kalimat, paragraf) menjadi sebuah informasi yang dapat memberikan sebuah wawasan baru dengan cepat dan mudah. Dalam ilmu Data Mining di kenal dengan istilah Text Mining. Text mining atau text analytics adalah istilah yang mendeskripsikan sebuah teknologi yang mampu menganalisis data teks semi-terstruktur maupun tidak terstruktur, hal inilah yang membedakannya dengan data mining dimana data mining mengolah data yang sifatnya terstruktur (Han et al., 2012).

Text mining adalah sebuah penelitian baru yang menarik yang mencoba memecahkan masalah informasi yang overload, dengan menggunakan teknik dari data mining, machine learning, natural language processing (NLP), information retrieval (IR), dan knowledge management. Text mining melibatkan preprocessing koleksi dokumen (kategorisasi teks, ekstraksi informasi, ekstraksi istilah), penyimpanan representasi menengah, teknik untuk menganalisis representasi menengah ini (seperti analisis distribusi, pengelompokan, analisis tren, dan peraturan asosiasi), dan visualisasi hasilnya (Feldman, 2007).

Dalam melakukan text mining, teks dokumen yang digunakan harus dipersiapkan terlebih dahulu, setelah itu baru dapat digunakan untuk proses utama. Proses mempersiapkan teks dokumen atau dataset mentah disebut juga dengan proses text preprocessing. Text preprocessing berfungsi untuk mengubah data teks yang tidak terstruktur atau sembarang menjadi data yang terstruktur.

Teks yang dilakukan proses text mining pada umumnya memiliki beberapa karakteristik diantaranya adalah memiliki dimensi yang tinggi, terdapat noise pada data, dan terdapat struktur teks yang tidak baik. Cara yang digunakan dalam mempelajari struktur data teks adalah dengan terlebih dahulu menentukan fitur-fitur yang mewakili setiap kata untuk setiap fitur yang ada pada dokumen, sebelum menentukan fitur-fitur yang mewakili, diperlukan tahap pre-processing. Tujuan utama text preprocessing adalah untuk mendapatkan bentuk data siap olah untuk diproses oleh data mining dari data awal yang berupa data tekstual. Adapun tahap-tahap text preprocessing yang dilakukan adalah sebagai berikut:
  1. Case folding, merupakan proses pengubahan huruf dalam dokumen menjadi satu bentuk, misalnya huruf kapital menjadi huruf kecil dan sebaliknya.
  2. Tokenizing, merupakan proses pemisahan teks menjadi potongan kalimat dan kata yang disebut token.
  3. Filtering, merupakan proses membuang kata-kata serta tanda-tanda yang tidak bermakna secara signifikan, seperti hashtag (#), url, tanda baca tertentu (emoticon), dan lainnya.
  4. Stemming, merupakan proses pengubahan kata ke dalam bentuk kata dasar, sehingga berfungsi mengurangi jumlah indeks yang berbeda dari suatu dokumen.
Disini saya akan memberikan contoh dalam mengolah data teks ulasan sebuah hotel dalam bahasa Indonesia yang masih memiliki bentuk tidak terstruktur ke dalam bentuk yang lebih terstruktur dan melakukan ekstraksi informasi dari sejumlah ulasan dengan membuat sebuah wordcloud. Wordcloud merupakan kumpulan kata-kata yang paling sering dibicarakan dalam ulasan. 

Saya menggunakan software R Programming untuk melakukan analisis teks, sebelum masuk pada tahap pembuatan wordcloud, terlebih dahulu saya akan melakukan text preprocessing untuk cleaning data agar data siap di olah. Untuk melakukan analisis teks, dalam R digunakan beberapa packages diantaranya packages "tm", "RColorBrewer", "wordcloud" dan "stringr" . Untuk menginstall packages tersebut ke dalam program R, dapat dilakukan dengan cara menjalankan script berikut:

install.packages("tm")
install.packages("RColorBrewer")
install.packages("wordcloud")
install.packages("stringr")

Aktifkan packages dengan perintah "library"
library("tm")
library("RColorBrewer")
library("wordcloud")

library("stringr")

Kemudian, aktifkan folder kerja yang merupakan tempat penyimpanan file postingan (dalam bentuk .csv) dengan perintah "setwd" dan baca file ke dalam R menggunakan perintah "readLines" seperti berikut:

setwd("E://KULIAH")
docs<-readLines("dataulasan.csv")
docs

Sehingga akan tampil isi ulasan seperti berikut:




Data ulasan di atas masih berbentuk tidak terstruktur, dan masih banyak noise sehingga perlu dilakukan cleaning data. Untuk melakukan cleaning data terlebih dahulu data teks harus di ubah ke dalam bentuk Corpus dengan menjalankan script berikut:

docs <- Corpus(VectorSource(docs))

Kemudian, akan dilakukan pembersihan data, dengan mengganti tanda “/”, “@” and “|” dengan sebuah spasi menggunakan perintah:


toSpace <- content_transformer(function (x , pattern ) gsub(pattern, " ", x))
docs <- tm_map(docs, toSpace, "/")
docs <- tm_map(docs, toSpace, "@")
docs <- tm_map(docs, toSpace, "\\|")

Kemudian dilakukan proses case folding, yakni menyeragamkan huruf ke dalam bentuk huruf kecil menggunakan perintah


docs <- tm_map(docs, content_transformer(tolower))

Kemudian menghapus tanda baca (punctuation) dengan menggunakan perintah:


docs <- tm_map(docs, toSpace, "[[:punct:]]")

Menghapus angka dengan menggunakan perintah:


docs <- tm_map(docs, toSpace, "[[:digit:]]") 

Kemudian dilakukan proses filtering yakni membuang daftar kata-kata yang kurang penting untuk di analisis menggunakan stopwords. Stopword / stoplist adalah kata-kata yang tidak deskriptif yang dapat dibuang dalam pendekatan bag-of-words. Untuk menjalankan stopwords dapat dilakukan dengan menjalankan perintah berikut:


myStopwords = readLines("stopword_id.csv")
docs <- tm_map(docs, removeWords, myStopwords) 

Untuk menghapus daftar kata secara manual juga dapat dilakukan dengan cara berikut:
docs <- tm_map(docs, removeWords, c("you","also","hotel","ambarrukmo","royal"))

Menghapus spasi yang tidak berguna, yakni terdapat spasi yang berlebih pada selah antara dua kata, untuk menghapus spasi berlebih tersebut dapat digunakan perintah berikut:


docs <- tm_map(docs, stripWhitespace)

Menghapus URL web dengan menjalankan perintah:


removeURL <- function(x) gsub("http[[:alnum:]]*", " ", x)
docs <- tm_map(docs, removeURL)

Untuk memperbaiki kata-kata yang salah (spelling normalization), dapat dilakukan dengan cara manual menggunakan perintah:


docs <- tm_map(docs, gsub, pattern="Howver", replacement="However")
docs <- tm_map(docs, gsub, pattern="goood", replacement="good")

Setelah melalui tahap cleaning data, kemudian merubah data ke dalam bentuk Term Document Matrix, dan mengubah ke dalam bentuk data frame sehingga dapat dihitung frekuensi setiap kata. Adapun perintah yang digunakan adalah sebagai berikut:


dtm <- TermDocumentMatrix(docs)
m <- as.matrix(dtm)
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(word = names(v),freq=v)
head(d, 10)

Sehingga akan tampil jumlah frekuensi kata seperti berikut:



Setelah di peroleh frekuensi setiap kata, kemudian kata-kata tersebut dapat di ubah ke dalam bentuk wordcloud menggunakan perintah berikut:


dtm <- TermDocumentMatrix(docs)
set.seed(1234)
wordcloud(words = d$word, freq = d$freq, min.freq = 1,
          max.words=50, random.order=FALSE, rot.per=0.35, 

          colors=brewer.pal(8, "Dark2"))

Sehingga akan muncul tampilan wordcloud seperti gambar berikut:

Berdasarkan gambar wordcloud diatas, semakin besar kata pada tampilan wordcloud maka menunjukkan semakin besar pula frekuensi kata tersebut dalam dokumen ulasan.

Sekian pembahasan text mining, semoga bermanfaat

Have fun

Daftar Pustaka

Feldman,  R.,  &  Sanger,  J.2007.  The  Text   Mining  Handbook  Advanced 
        Approaches In Analyzing Unstructured  Data.  New  York :  Cambridge 
        University Press

Han, J. and Kamber, M. 2012. Data Mining:  Concepts and Techniques Third 
        Edition. Waltham, MA: Morgan Kaufmann.
Previous
Next Post »

2 comments

Write comments
markson
AUTHOR
December 2, 2019 at 8:08 AM delete

Purportedly, DA acts the hero of those organizations that have just arranged the information, and are anticipating derivation.Data Analytics Course

Reply
avatar
widuri
AUTHOR
April 7, 2020 at 9:45 AM delete

maaf mau tanya, untuk nyimpen hasil data yang sudah dibersihkan, codingannya gimana yaa? makasihh

Reply
avatar


:) :( hihi :-) :D =D :-d ;( ;-( @-) :P :o -_- (o) :p :-? (p) :-s (m) 8-) :-t :-b b-( :-# =p~ $-) (y) (f) x-) (k) (h) cheer lol rock angry @@ :ng pin poop :* :v 100

Weekly