Text Minning – atau dialih bahasakan menjadi penambangan teks yaitu proses ekstraksi informasi dan pengetahuan yang berguna dari sejumlah besar sumber data teks, seperti dokumen Word, PDF, kutipan teks, dll
Tujuan dari text minning yaitu untuk mendapatkan konten inti dari sebuah dokumen teks menjadi sebuah data kuantitatif secara cepat. Misalkan saja ketika kita membaca sebuah artikel/koran yang berisi teks yang panjang maka dengan text minning akan menghasilkan kesimpulannya berupa hightlight – text summarization nya. Saya rangkum dari beberapa sumber mengenai tujuan dari text minning yaitu (Milkha Harlian Ch. Referensi: Raymond J. Mooney. CS 391L: Machine Learning Text Categorization. Univerisity of Texas as Austin, 2006)
- Ekstraksi informasi (information extraction): Identifikasi frasa kunci dan keterkaitan di dalam teks dengan melihat urutan tertentu melalui pencocokan pola.
- Pelacakan topik (topic tracking): Penentuan dokumen lain yang menarik seorang pengguna berdasarkan profil dan dokumen yang dilihat pengguna tersebut.
- Perangkuman (summarization): Pembuatan rangkuman dokumen untuk mengefisiensikan proses membaca, misalkan pada aplikasi apple yaitu simply-news
- Kategorisasi (categorization): Penentuan tema utama suatu teks dan pengelompokan teks berdasarkan tema tersebut ke dalam kategori yang telah ditentukan.
- Penggugusan (clustering): Pengelompokan dokumen yang serupa tanpa penentuan kategori sebelumnya.
- Penautan konsep (concept linking): Penautan dokumen terkait dengan identifikasi konsep yang dimiliki bersama sehingga mambantu pengguna untuk menemukan informasi yang mungkin tidak akan ditemukan dengan hanya menggunakan metode pencarian tradisional.
- Penjawaban pertanyaan (question answering): Pemberian jawaban terbaik terhadap suatu pertanyaan dengan pencocokan pola berdasarkan pengetahuan
Sebelum melakukan proses text minning, hal yang diperlukan yaitu text processing untuk melakukan pembersihkan text dari symbol, tag, dan character huruf yang tidak relevan. Adapun text processing secara umum yang dilakukan yaitu
- Replace HTML dan URL
- Replace Emoticons and Emojis
- Replace Mentions & Hashtags
- Replace Slang Words
- Text Stripping
Untuk mempermudah text processing berupa cleaning, cukup menggunakan library textclean. Kita bisa menggunakan dataset berupa tweets sebagai contoh untuk melakukan text cleaning yaitu https://github.com/rizalespe/Dataset-Sentimen-Analisis-Bahasa-Indonesia/blob/master/dataset_tweet_sentiment_opini_film.csv. Tweet tersebut berupa tanggapan/komentar atau opini dari beberapa film Indonesia berisi 198 tweets.
Sebelum dimulai, kalian pastikan sudah install library tersebut menggunakan perintah
install.packages("textclean")
Kita akan bahas satu-persatu text cleaning menggunakan library textclean
#mengubah menjadi character serta membersihkan placeholder newline
Langkah dalam text processing yang paling yaitu mengubah nya menjadi character serta membersihkannya dari character newline. Perhatikan text awal berikut
library(textclean) library(dplyr) file = 'dataset_tweet_sentiment_opini_film.csv' tweets = read.csv(file) tweets = tweets$Text.Tweet head(tweets,5)
Hasilnya masih banyak character yang perlu dibuang seperti tanda mention, tanda tagar dan operator tanda baca lainya
[1] Jelek filmnya... apalagi si ernest gak mutu bgt actingnya... film sampah [2] Film king Arthur ini film paling jelek dari seluruh cerita King Arthur [3] @beexkuanlin Sepanjang film gwa berkata kasar terus pada bapaknya [4] Ane ga suka fast and furious..menurutku kok jelek ya tu film [5] @baekhyun36 kan gua ga tau film nya, lu bilang perang perangan/? Perang"an disebut ama rp yaoi jadi ambigu :v 198 Levels: #DANUR film horor Indonesia terlaris sepanjang masa dengan 2.690.000 penonton sejak tayang 30 Maret 2017. #ManojPunjabi #DanurMovie ...
Serta variable tweets masih dalam bentuk factor, kita olah dengan cara berikut
#mengubah jadi character tweets = lapply(tweets , function (x) as.character(x)) #menghilangkan newline tweets = gsub( "\n"," ",tweets) head(tweets,5)
#Menghilangkan tag HTML dan URL
Seringkali tweets yang ditulis oleh pengguna terdapat beberapa tag HTML dan alamat URL, hal tersebut perlu dihilangkan, kalian bisa temui tweets no 58, seperti berikut penerapan sebelum dan sesudah menghilangkan URL
tweets[58] tweets = tweets %>%replace_html() %>% replace_url() tweets[58]
Hasil
[1] "Netizen membatalkan nonton film \"Kartini\" gara-gara kelakuan @therealDiSastr. http://bit.ly/2o2iRPY" [1] "Netizen membatalkan nonton film \"Kartini\" gara-gara kelakuan @therealDiSastr. "
#menghilangkan Emoticons and Emojis
Untuk menghilangkan emoticons dan emojis yang ada tweets, kalian bisa temui tweets no 36
tweets[36] tweets = tweets %>% replace_emoji(.) %>% replace_emoticon(.) tweets[36]
hasil
[1] "adanya film critical eleven ini jadi merusak image Ale Anya di kepalaku :(" [1] "adanya film critical eleven ini jadi merusak image Ale Anya di kepalaku frown "
#menghilangkan Mentions & Hashtags
Untuk menghilangkan mention dan hashtag, misalkan pada no tweets 3 dan 10
tweets[3] tweets[10] tweets = tweets %>% replace_tag(tweets, pattern = "@([A-Za-z0-9_]+)",replacement="") %>% # remove mentions replace_hash(tweets, pattern = "#([A-Za-z0-9_]+)",replacement="") # remove hashtags tweets[3] tweets[10]
hasilnya
> tweets[3] [1] "@beexkuanlin Sepanjang film gwa berkata kasar terus pada bapaknya" > tweets[10] [1] "#TheMummy 2017 adalah film yang paling memgecewakan saya selama hidup. Yah padahal sy udh berekspektasi tinggi dan suka bgt mesir kuno." [1] " Sepanjang film gwa berkata kasar terus pada bapaknya" > tweets[10] [1] " 2017 adalah film yang paling memgecewakan saya selama hidup. Yah padahal sy udh berekspektasi tinggi dan suka bgt mesir kuno."
#Menghilangkan Slang Words
Maksud dari slang words adalah mengubah kata-kata gaul – pada kasus ini, menggunakan bahasa indonesia, untuk databasenya bisa kalian download di https://raw.githubusercontent.com/nasalsabila/kamus-alay/master/colloquial-indonesian-lexicon.csv
Misalkan kata gitu akan diubah menjadi begitu, lg akan diubah menjadi lagi
Misalkan pada tweets no 60
tweets[60] # import Indonesian lexicon spell = read.csv("colloquial-indonesian-lexicon.csv") # replace internet slang tweets = replace_internet_slang(tweets, slang = paste0("\\b", spell$slang, "\\b"), replacement = spell$formal, ignore.case = TRUE) tweets[60]
hasilnya
[1] "Itu film makin aneh ajaa ?" [1] "Itu film makin aneh saja ?"
#menghilangkan tanda baca yang tidak relevan atau Text Stripping
Misalkan isi tweetsnya menggunakan tanda baca berulang-ulang. Bisa ditemui pada tweets no 57 dan 81
tweets[57] tweets[81] tweets = strip(tweets) tweets[57] tweets[81]
hasilnya
> tweets[57] [1] "sesal di dada menonton ini film..." > tweets[81] [1] "film apa ini :) arah dan tujuannya enggak jelas.. menyesal download ! Sabar... Ini ujian ! — menonton Hangout Film" > tweets = strip(tweets) > tweets[57] [1] "sesal di dada menonton ini film" > tweets[81] [1] "film apa ini arah dan tujuannya enggak jelas menyesal download sabar ini ujian — menonton hangout film"
Kita lanjutkan mengenai tahapan dari text minning secara umum membutuhkan stemming dan tokenizing.
Tahap tokenizing adalah tahap pemotongan kalimat menjadi huruf, kita bisa menggunakan library tokenizer
Kalian bisa peroleh di https://repo.bppt.go.id/cran/bin/windows/contrib/3.6/tokenizers_0.2.1.zip
Tahap stemming adalah mencari root kata dasar, misalkan dalam bahasa indonesia, Contohnya kata dibuang akan diubah menjadi buang. Saya biasa menggunakan stemming library katadasaR, bisa kalian pelajari cara install disini
Secara bersama-sama library tokenizer dan katadasaR digunakan seperti berikut, perhatikan pada tweets no 145
tweets[145] stemming <- function(x){ paste(lapply(x,katadasar),collapse = " ")} tweets <- lapply(tokenize_words(tweets[]), stemming) tweets[145]
hasilnya
[1] Bahagia telah dipertemukan dengan film keren ini [[1]] [1] "bahagia telah temu dengan film keren ini"
Selanjutnya menghilangkan kata tidak relevan atau stop word, untuk database dalam bahasa indonesia, bisa kalian peroleh di
https://github.com/aliakbars/bilp/blob/master/stoplist
Kalian bisa download dan simpan dengan nama stoplist.csv, oiya untuk menggunakannya, kita butuh library stopword serta readr, Pastikan kalian sudah install library tersebut, misalkan pada tweets no 2
stopWordList <- read_csv("stoplist.csv", col_names = F) stopWordList <- sapply(stopWordList[,1], function(x) as.character(x)) tweets[2] tweets <- as.character(tweets) tweets <- tokenize_words(tweets, stopwords = stopWordList) tweets[2]
hasilnya
[[1]] [1] "film king arthur ini film paling jelek dari seluruh cerita king arthur" [[1]] [1] "film" "king" "arthur" "film" "jelek" "cerita" "king" "arthur"
kalimatnya sudah terpotong menjadi sebuah token serta dihapus kata-kata tidak perlu
Membuat wordcloud
Kita langsung buat saja wordcloud menggunakan data diatas, tapi jangan lupa kalian install library wordcloud dan tm
dokumen = VCorpus(VectorSource((tweets))) dtm <- TermDocumentMatrix(dokumen) em <- as.matrix(dtm) ve <- sort(rowSums(em),decreasing=TRUE) de <- data.frame(word = names(ve),freq=ve) wordcloud(words = de$word, freq = de$freq, min.freq = 1, max.words=50, random.order=FALSE, rot.per=0.35, colors=brewer.pal(8, "Dark2"))
hasilnya
Kode selengkapnya yaitu