감정 내면 탐구
이번 연습 문제에서는 긍정·부정 언어에만 국한하지 않고, Plutchik의 감정 바퀴에 있는 8가지 감정 각각을 기준으로 텍스트를 분류하여 시각화를 구성합니다. 단순히 긍정·부정으로 나누는 것보다 특정 감정에 매핑함으로써 단어 사용 방식을 더 명확하게 파악할 수 있습니다.
tidytext 주관성 어휘 사전(subjectivity lexicon)인 "nrc"를 사용하여 텍스트와 inner_join()을 수행합니다. "nrc" 어휘 사전에는 8가지 감정 외에 긍정(positive)과 부정(negative) 범주도 포함되어 있습니다. 따라서 inner_join() 이후 긍정·부정 단어를 제거해야 합니다. 이를 위해 부정 연산자 !와 grepl()을 함께 사용할 수 있습니다.
"Global Regular Expression Print Logical" 함수인 grepl()은 각 행에서 문자열 패턴이 발견되면 TRUE, 그렇지 않으면 FALSE를 반환합니다. 이번 연습 문제에서는 아래와 같이 | 연산자를 사용해 positive 또는 negative를 검색합니다. 이 세로 막대 기호는 키보드에서 보통 Enter 키 위에 위치합니다. ! 부정 연산자가 grepl() 앞에 오면 TRUE와 FALSE가 바뀌어, "positive|negative"에 해당하는 항목이 유지되는 것이 아니라 제거됩니다.
Object <- tibble %>%
filter(!grepl("positive|negative", column_name))
다음으로 식별된 단어에 count()를 적용하고, pivot_wider()를 사용하여 데이터 프레임을 정리합니다.
comparison.cloud()는 입력 데이터에 행 이름(row names)이 필요합니다. 따라서 row.names 인수를 지정하여 data.frame()을 호출해 기본 R data.frame으로 변환해야 합니다.
이 연습은 강의의 일부입니다
R을 활용한 감성 분석
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
moby_tidy <- moby %>%
# Inner join to nrc lexicon
___(___, by = c("term" = "word")) %>%
# Drop positive or negative
___(!___("___", sentiment)) %>%
# Count by sentiment and term
___(___, ___) %>%
# Pivot sentiment, using n for values
___(names_from = ___, values_from = ___, values_fill = ___) %>%
# Convert to data.frame, making term the row names
data.frame(row.names = "___")
# Examine
head(moby_tidy)