빈도 높은 단어를 비교하면
어떤 텍스트든 일반적인 단어 빈도 높아 텍스트 차이 잘 드러나지 않음
ex) 연설문: "우리" , "사회" , "경제" , "일자리"
텍스트의 차이를 알아보려면
특정 텍스트에는 많이 사용되었지만 다른 텍스트에는 적게 사용된 단어를 살펴봐야함
Long form 데이터 살펴보기
df_long <- frequency %>% group_by(president) %>% slice_max(n,n=10)
%>% filter(word %in% c("국민", "우리", "정치", "행복"))
frequency : president가 "moon"인 행과 "park"인 행이 세로로 길게 나열
Long form을 Wide form으로 변형하기
library(tidyr)
df_wide <- df_long %>% pivot_wider(names_from = president, values_from = n)
wide form: 가로로 넓은 형태의 데이터, 범주별로 단어 빈도 비교하기 편함, 변수간 연산하기 편함
tidyr::pivot_wider() : long form을 wide form으로 변환
names_from : 변수명으로 만들 값이 들어 있는 변수
values_from : 변수에 채워넣을 값이 들어 있는 변수
NA를 0으로 바꾸기
df_wide <- df_long %>% pivot_wider(names_from = president, values_from = n, values_fill = list(n=0))
frequency_wide <- frequency %>% pivot_wider(names_from = president, values_from = n, values_fill = list(n = 0))
frequency_wide
어떤 단어가 둘 중 한 범주에만 있으면 NA, 오즈비 계산하기 위해 0으로 변환해야 함
단어의 비중을 나타낸 변수 추가하기
frequency_wide <- frequency_wide %>% mutate(ratio_moon = ((moon)/(sum(moon))),
ratio_park = ((park)/(sum(park))))
frequency_wide
단어의 비중을 나타낸 변수 추가하기
frequency_wide <- frequency_wide %>%
mutate(ratio_moon = ((moon + 1)/(sum(moon + 1))), # moon에서 단어의 비중
ratio_park = ((park + 1)/(sum(park + 1)))) # park에서 단어의 비중
frequency_wide
각 단어가 두 연설문에서 차지하는 비중을 나타낸 변수, 연설문별로 '각 단어의 빈도'를 '모든 단어 빈도의 합'으로 나눔
오즈비 변수 추가하기
frequency_wide <- frequency_wide %>% mutate(odds_ratio = ratio_moon/ratio_park)
frequency_wide
top10 <- frequency_wide %>%
filter(rank(odds_ratio) <= 10 | rank(-odds_ratio) <= 10)
top10 %>%
arrange(-odds_ratio)
한 텍스트의 단어 비중을 다른 텍스트의 단어 비중으로 나눔
비중이 큰 연설문을 나타낸 변수 추가하기
top10 <- top10 %>% mutate(president = ifelse(odds_ratio >1, "moon", "park"), n = ifelse(odds_ratio >1, moon, park))
top10
막대그래프 만들기
ggplot(top10, aes(x = reorder_within(word, n, president),
y = n,
fill = president)) +
geom_col() +
coord_flip() +
facet_wrap(~ president, scales = "free_y") +
scale_x_reordered()
그래프별로 축 설정하기
ggplot(top10, aes(x = reorder_within(word, n, president),
y = n,
fill = president)) +
geom_col() +
coord_flip() +
facet_wrap(~ president, scales = "free") +
scale_x_reordered() +
labs(x = NULL) + # x축 삭제
theme(text = element_text(family = "nanumgothic")) # 폰트
x축 크기가 그래프마다 다르므로 해석 조심
막대 길이 같아도 단어 빈도 다름
두 텍스트 단어 빈도 비교 X
각 텍스트에서 상대적으로 중요한 단어가 무엇인지 중심으로 해석
주요 단어가 사용된 문장 살펴보기
speeches_sentence <- bind_speeches %>%
as_tibble() %>%
unnest_tokens(input = value,
output = sentence,
token = "sentences")
speeches_sentence
주요 단어가 사용된 문장 추출하기 - str_detect()
speeches_sentence %>%
filter(president == "moon" & str_detect(sentence, "복지국가"))
중요도가 비슷한 단어 살펴보기
frequency_wide %>%
arrange(abs(1 - odds_ratio)) %>%
head(10)
odds_ratio가 1에 가까운 단어 추출, 대부분 보편적인 의미를 지니는 단어
중요도가 비슷하면서 빈도가 높은 단어: 두 텍스트에서 모두 강조한 단어
frequency_wide %>%
filter(moon >= 5 & park >= 5) %>%
arrange(abs(1 - odds_ratio)) %>%
head(10)
중요도가 비슷하면서 빈도가 높은 단어: 두 텍스트에서 모두 강조한 단어
'R > 텍스트마이닝' 카테고리의 다른 글
[텍스트마이닝] 의미망 분석 문제풀이 (1) | 2022.11.22 |
---|---|
[텍스트마이닝] 단어 빈도 비교하기 (0) | 2022.11.21 |
[텍스트마이닝] 형태소 분석 관련 연습문제 (0) | 2022.11.18 |
[텍스트마이닝] 단어 빈도 분석 관련 연습문제 (0) | 2022.11.18 |
[텍스트마이닝] 텍스트 마이닝 관련 실습 (0) | 2022.11.16 |