시작하기무료로 시작하기

감정 내면 탐구

이번 연습 문제에서는 긍정·부정 언어에만 국한하지 않고, 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)
코드 편집 및 실행