59doit

토픽 모델링 #4 토픽 이름 짓기 본문

텍스트마이닝

토픽 모델링 #4 토픽 이름 짓기

yul_S2 2022. 12. 21. 09:44
반응형

 토픽 이름 짓기 

(1) 토픽별 주요 문서 살펴보고 토픽 이름 짓기

#1 원문을 읽기 편하게 전처리하기, gamma가 높은 순으로 정렬하기

comment_topic <- news_comment_topic %>%
  mutate(reply = str_squish(replace_html(reply))) %>%
  arrange(- gamma)

comment_topic %>%
  select(gamma, reply)

# # A tibble: 5,927 x 2
# gamma reply                                                             
# <dbl> <chr>                                                             
#   1 0.317 도서관서 여자화장실서 나오는 남자사서보고 카메라있는지없는지 확인~
#   2 0.302 도서관서 여자화장실서 나오는 남자사서보고 카메라있는지없는지 확인~
#   3 0.258 자유매국당+조중동+떡검개검+아베+개독+자유당 틀딱 댓글러들 ====&gt~
#   4 0.25  봉준호 송강호가 블랙리스트라니 자한당 저것들은 .. 김대중 대통령 ~ 
#   5 0.235 정치판은 기생충을 정치적으로 이용하지마라 특히 서울대 문서위조학~ 
#   6 0.228 기생충 한국에서 개봉할때 좌파 감독의 엿같은 영화라고 평점테러하던~
#   7 0.225 봉준호 감독과 송강호 배우는 이명박그네 정권 시절 문화계 블랙리스~ 
#   8 0.221 박근혜 새누리 시절에 블랙리스트였던 감독과 배우들이 이런 대단한 ~ 
#   9 0.219 나는 보수우파 진형이지만 아카데미는 아카데미로 보자. 좌파나 우파~ 
#   10 0.219 이명박과 박근혜 정부시절 봉준호는 좌파라고 블랙리스트에 오르는 등~
#   # ... with 5,917 more rows

html 특수 문자 제거

gamma가 높은 주요 문서가 먼저 출력되도록 정렬

 

 

 

#2 주요 단어가 사용된 문서 살펴보기

#2-1 토픽 1 내용 살펴보기

comment_topic %>%
  filter(topic == 1 & str_detect(reply, "작품")) %>%
  head(50) %>%
  pull(reply)


comment_topic %>%
  filter(topic == 1 & str_detect(reply, "진심")) %>%
  head(50) %>%
  pull(reply)


comment_topic %>%
  filter(topic == 1 & str_detect(reply, "정치")) %>%
  head(5) %>%
  pull(reply)

 

 

#3 토픽 이름 목록 만들기

name_topic <- tibble(topic = 1:8,
                     name = c("1. 작품상 수상 축하, 정치적 댓글 비판",
                              "2. 수상 축하, 시상식 감상",
                              "3. 조국 가족, 정치적 해석",
                              "4. 새 역사 쓴 세계적인 영화",
                              "5. 자랑스럽고 감사한 마음",
                              "6. 놀라운 4관왕 수상",
                              "7. 문화계 블랙리스트, 보수 정당 비판",
                              "8. 한국의 세계적 위상"))

댓글 내용을 토대로 토픽 번호와 이름으로 구성된 '토픽 이름 목록' 만들기

 

 

 

#4 토픽 이름과 주요 단어 시각화하기

#4-1 토픽 이름 결합하기

top_term_topic_name <- top_term_topic %>%
  left_join(name_topic, name_topic, by = "topic")
top_term_topic_name



top_term_topic
name_topic

# > top_term_topic
# # A tibble: 83 x 3
# # Groups:   topic [8]
#   topic term        beta
#   <int> <chr>      <dbl>
# 1     1 역사     0.0356 
# 2     1 감독상   0.0331 
# 3     1 스카     0.0287 
# 4     1 미국     0.0157 
# 5     1 인정     0.0157 
# 6     1 각본상   0.0120 
# 7     1 우리나라 0.0117 
# 8     1 감격     0.0109 
# 9     1 영화제   0.0102 
# 10     1 정도     0.00839
# # ... with 73 more rows
# # i Use `print(n = ...)` to see more rows


# > name_topic
# # A tibble: 8 x 2
#     topic name                                 
#    <int> <chr>                                
# 1     1 1. 작품상 수상 축하, 정치적 댓글 비판
# 2     2 2. 수상 축하, 시상식 감상            
# 3     3 3. 조국 가족, 정치적 해석            
# 4     4 4. 새 역사 쓴 세계적인 영화          
# 5     5 5. 자랑스럽고 감사한 마음            
# 6     6 6. 놀라운 4관왕 수상                 
# 7     7 7. 문화계 블랙리스트, 보수 정당 비판 
# 8     8 8. 한국의 세계적 위상 

 

#4-2 막대 그래프 만들기

ggplot(top_term_topic_name,
       aes(x = reorder_within(term, beta, name),
           y = beta,
           fill = factor(topic))) +
  geom_col(show.legend = F) +
  facet_wrap(~ name, scales = "free", ncol = 2) +
  coord_flip() +
  scale_x_reordered() +
  labs(title = "영화 기생충 아카데미상 수상 기사 댓글 토픽",
       subtitle = "토픽별 주요 단어 Top 10",
       x = NULL, y = NULL) +
  theme_minimal() +
  theme(text = element_text(family = "nanumgothic"),
        title = element_text(size = 12),
        axis.text.x = element_blank(),
        axis.ticks.x = element_blank())




 

 

 

반응형
Comments