Text Preprocessing dan text minning

By | October 23, 2021
4,453 Views

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)

  1. Ekstraksi informasi (information extraction): Identifikasi frasa kunci dan keterkaitan di dalam teks dengan melihat urutan tertentu melalui pencocokan pola.
  2. Pelacakan topik (topic tracking): Penentuan dokumen lain yang menarik seorang pengguna berdasarkan profil dan dokumen yang dilihat pengguna tersebut.
  3. Perangkuman (summarization): Pembuatan rangkuman dokumen untuk mengefisiensikan proses membaca, misalkan pada aplikasi apple yaitu simply-news
  4. Kategorisasi (categorization): Penentuan tema utama suatu teks dan pengelompokan teks berdasarkan tema tersebut ke dalam kategori yang telah ditentukan.
  5. Penggugusan (clustering): Pengelompokan dokumen yang serupa tanpa penentuan kategori sebelumnya.
  6. 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.
  7. 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

  1. Replace HTML dan URL
  2. Replace Emoticons and Emojis
  3. Replace Mentions & Hashtags
  4. Replace Slang Words
  5. Text Stripping
See also  Merge file CSV dengan Cepat

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

See also  Belajar Statistik

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.

See also  Korelasi linear Pearson dan Fungsi Autokorelasi (ACF) - PACF

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

Existing Users Log In




Enter Captcha Here :