Quanteda merupakan library R yang berfungsi untuk membersihkan dan menganalisa data teks. Library ini didesain untuk menyelesaikan tugas Natural Language Processing. Library quanteda mempunyai library tambahan seperti “quanteda.dictionaries”, “quanteda.textstats”, dan “quanteda.textplots”. Katadasar adalah library untuk stemming teks berbahasa Indonesia. Stemming sendiri merupakan proses untuk mengganti kata dengan imbuhan menjadi kata dasar. Semisalnya dari “mengambil” menjadi “ambil”. Library katadasaR menggunakan algoritma Nazief-Andriani dalam melakukan proses stemming.
library(quanteda)
## Warning in .recacheSubclasses(def@className, def, env): undefined subclass
## "packedMatrix" of class "replValueSp"; definition not updated
## Warning in .recacheSubclasses(def@className, def, env): undefined subclass
## "packedMatrix" of class "mMatrix"; definition not updated
## Package version: 3.2.1
## Unicode version: 13.0
## ICU version: 69.1
## Parallel computing: 4 of 4 threads used.
## See https://quanteda.io for tutorials and examples.
library(katadasaR)
Sebelum melakukan proses pembersihan, mari kita mulai dengan membuat data frame sederhana yang berisikan beberapa baris teks.
df <- data.frame(text = c("dia sangat mengagumkan dalam hal berhitung",
"sebaiknya kita pindah dari sini saja",
"yg kita ketahui hrs lbh dari itu"))
rmarkdown::paged_table(df)
Jika kita melihat baris pertama dan kedua, pemilihan kata yang digunakan sudah formal namun masih banyak kata imbuhan sehingga perlu dicari kata dasar dari kata-kata imbuhan tersebut. Selanjutnya pada baris ketiga ada beberapa kata yang disingkat maka kata-kata tersebut perlu dilakukan lematisasi, yaitu proses untuk mengganti ejaan yang bersifat non-formal menjadi formal.
Sebelum melakukan proses pembersihan, data frame perlu diubah menjadi korpus. Korpus sendiri merupakan struktur data yang berisi teks yang dikelompokan dalam suatu dokumen.
corpus <- df %>%
corpus(text_field = "text")
(corpus)
## Corpus consisting of 3 documents.
## text1 :
## "dia sangat mengagumkan dalam hal berhitung"
##
## text2 :
## "sebaiknya kita pindah dari sini saja"
##
## text3 :
## "yg kita ketahui hrs lbh dari itu"
Tokenisasi merupakan proses memecahkan setiap fitur dalam suatu baris kalimat.
tokens <- corpus %>%
tokens()
tokens
## Tokens consisting of 3 documents.
## text1 :
## [1] "dia" "sangat" "mengagumkan" "dalam" "hal"
## [6] "berhitung"
##
## text2 :
## [1] "sebaiknya" "kita" "pindah" "dari" "sini" "saja"
##
## text3 :
## [1] "yg" "kita" "ketahui" "hrs" "lbh" "dari" "itu"
Colloquial atau bahasa sehari-hari adalah bahasa yang menggunakan ejaan non-formal. Dalam proses ini saya akan menggunakan dataset yang dibuat dikembangkan Salsabila et al. (2018). Dataset ini berisi ejaan non-formal dan formal. Tautan dataset: https://github.com/nasalsabila/kamus-alay
# import data
spelling_lexicon <- read.csv(file = "colloquial-indonesian-lexicon.csv", header = T, stringsAsFactors = F)
# overview the colloquial data
rmarkdown::paged_table(head(spelling_lexicon))
# split data to slang words and formal words
slang <- spelling_lexicon$slang %>% as.character()
formal <- spelling_lexicon$formal %>% as.character()
Proses lemmatisasi dimulai.
tokens_cleaning <- tokens %>%
tokens_replace(pattern = slang, replacement = formal)
tokens_cleaning
## Tokens consisting of 3 documents.
## text1 :
## [1] "dia" "sangat" "mengagumkan" "dalam" "hal"
## [6] "berhitung"
##
## text2 :
## [1] "sebaiknya" "kita" "pindah" "dari" "sini" "saja"
##
## text3 :
## [1] "yang" "kita" "ketahui" "harus" "lebih" "dari" "itu"
Proses lematisasi berhasil. Lihat pada baris ketiga. Kata “yg” berubah menjadi “yang” dan pada kata “lbh” menjadi “lebih”.
Sebelum proses stemming dimulai, dilakukan pembuatan fungsi terlebih dahulu agar proses stemming bisa dilakukan pada tipe data struktur tokens.
stemming <- function(x){
paste(lapply(x,katadasar), collapse = " ")}
tokens_cleaning <- tokens(lapply(tokens(tokens_cleaning), stemming))
#use this if you want to continue working with tokens
#tokens_cleaning <- tokens(tokenize_fasterword((tokens_cleaning)))
tokens_cleaning
## Tokens consisting of 3 documents.
## text1 :
## [1] "dia sangat kagum dalam hal hitung"
##
## text2 :
## [1] "baik kita pindah dari sini saja"
##
## text3 :
## [1] "yang kita tahu harus lebih dari itu"
Proses stemming berhasil, beberapa kata dalam korpus berubah menjadi kata dasar dan sama sekali tidak ada kata imbuhan yang tersisa.
df <- tokens_cleaning %>%
tokenize_sentence() %>%
data.frame() %>%
t() %>%
as.data.frame()
rmarkdown::paged_table(df)
berhasil menjadi bentuk dataframe
write.csv(df, file = "textcleaning.csv", row.names = F)
Benoit, K., Watanabe, K., Wang, H., Nulty, P., Obeng, A., Müller, S., & Matsuo, A. (2018). quanteda: An R package for the quantitative analysis of textual data. Journal of Open Source Software, 3(30), 774. https://doi.org/10.21105/joss.00774
Salsabila, N. A., Winatmoko, Y. A., Septiandri, A. A., & Jamal, A. (2018). Colloquial Indonesian Lexicon. 2018 International Conference on Asian Language Processing (IALP), 226–229. https://doi.org/10.1109/IALP.2018.8629151
Setiabudi, N. A. (2015). katadasaR: Function for word stemming Bahasa Indonesia Setiabudi, Nur Andi.