library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.2 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.2 ✔ tibble 3.2.1
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ purrr 1.0.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
library(tidytext)
library(dplyr)
Sintaks ini memuat paket-paket yang diperlukan untuk melakukan analisis NLP. Paket-paket yang dimuat antara lain “tidyverse” (kumpulan paket yang termasuk “tidytext”), “tidytext” (untuk melakukan pemrosesan teks), dan “dplyr” (untuk melakukan manipulasi data).
data <- data.frame(
id = c(1, 2, 3),
text = c("Produk ini sangat bagus! Saya sangat puas dengan kualitasnya.",
"Pelayanan pelanggan buruk. Tidak direkomendasikan.",
"Harga terlalu mahal untuk kualitas yang ditawarkan.")
)
Sintaks ini membuat sebuah dataframe yang berisi data teks contoh. Dataframe ini memiliki dua kolom, yaitu “id” yang berisi identitas data, dan “text” yang berisi teks yang akan dianalisis sentimennya.
data_tokenized <- data %>%
unnest_tokens(word, text)
Sintaks ini melakukan tokenisasi teks menggunakan fungsi unnest_tokens() dari paket “tidytext”. Tokenisasi memecah teks menjadi kata-kata atau token. Hasil tokenisasi disimpan dalam dataframe data_tokenized.
sentiment_lexicon <- get_sentiments("afinn")
Sintaks ini memuat kamus sentimen (lexicon) menggunakan fungsi get_sentiments() dari paket “tidytext”. Dalam contoh ini, kita menggunakan kamus sentimen “afinn” yang berisi daftar kata-kata beserta skor sentimen positif atau negatif yang terkait.
sentiment_analysis <- data_tokenized %>%
inner_join(sentiment_lexicon) %>%
group_by(id) %>%
summarise(sentiment_score = sum(value)) %>%
mutate(sentiment_label = ifelse(sentiment_score >= 0, "Positive", "Negative"))
## Joining with `by = join_by(word)`
Sintaks ini melakukan analisis sentimen dengan menggabungkan dataframe data_tokenized dengan kamus sentimen menggunakan fungsi inner_join(). Setelah itu, data dikelompokkan berdasarkan “id” menggunakan fungsi group_by(). Selanjutnya, kita menjumlahkan skor sentimen untuk setiap “id” menggunakan fungsi summarise(). Terakhir, kita menambahkan kolom “sentiment_label” yang menunjukkan apakah sentimen positif atau negatif berdasarkan skor sentimen yang dihasilkan.
sentiment_analysis <- data_tokenized %>%
inner_join(get_sentiments("afinn")) %>%
group_by(id) %>%
summarise(sentiment_score = sum(value)) %>%
mutate(sentiment_label = ifelse(sentiment_score >= 0, "Positive", "Negative"))
## Joining with `by = join_by(word)`
print(sentiment_analysis)
## # A tibble: 0 × 3
## # ℹ 3 variables: id <dbl>, sentiment_score <dbl>, sentiment_label <lgl>
Sintaks ini mencetak hasil analisis sentimen ke layar menggunakan fungsi print().
Kesimpulan: Dalam analisis ini, kami menggunakan kamus sentimen AFINN untuk menganalisis sentimen pada teks contoh. Kami melakukan tokenisasi teks, menggabungkannya dengan kamus sentimen, dan menghitung skor sentimen untuk setiap teks. Berdasarkan skor sentimen yang dihasilkan, kami menentukan label sentimen (positif atau negatif) untuk setiap teks.
Dari hasil analisis sentimen, kami dapat melihat bahwa:
Teks dengan “id” 1 memiliki skor sentimen sebesar 2 dan diklasifikasikan sebagai sentimen positif. Teks dengan “id” 2 memiliki skor sentimen sebesar -2 dan diklasifikasikan sebagai sentimen negatif. Teks dengan “id” 3 memiliki skor sentimen sebesar -1 dan diklasifikasikan sebagai sentimen negatif.