R 형태소 분석기를 활용하여 단어의 빈도수를 확인하는 방법을 알아보도록 하겠습니다. 단어를 추출하고 명사로 분류하여 문장, 글에서 해당 명사가 어떤 비중을 차지하는지 빈도수를 계산해보겠습니다.
목차
Toggle1. R 형태소 분석
- 형태소 분석 패키지 설치하기
install.packages("multilinguer")
library(multilinguer)
install_jdk()
install.packages(c("stringr", "hash", "tau", "Sejong", "RSQLite", "devtools"),
type = "binary")
install.packages("remotes")
remotes::install_github("haven-jeon/KoNLP",
upgrade = "never",
INSTALL_opts = c("--no-multiarch"))
library(KoNLP)
useNIADic() #형태소 사전 설정하기
- 명사 추출하기 – extractNoun()
library(dplyr)
text <- tibble(
value = c("대한민국은 민주공화국이다.",
"대한민국의 주권은 국민에게 있고, 모든 권력은 국민으로부터 나온다."))
text
extractNoun(text$value)
- unesst_tokens()를 이용해 명사 추출하기
library(tidytext)
text %>%
unnest_tokens(input = value, # 분석 대상
output = word, # 출력 변수명
token = extractNoun) # 토큰화 함수
- 연설문에서 명사 추출하기
raw_moon <- readLines("speech_moon.txt", encoding = "UTF-8")
# 기본적인 전처리
library(stringr)
moon <- raw_moon %>%
str_replace_all("[^가-힣]", " ") %>% # 한글만 남기기
str_squish() %>% # 중복 공백 제거
as_tibble() # tibble로 변환
# 명사 기준 토큰화
word_noun <- moon %>%
unnest_tokens(input = value,
output = word,
token = extractNoun)
word_noun
2. 명사 빈도 분석하기
- 단어 빈도 구하기
# 상위 20개 단어 추출
top20 <- word_noun %>%
head(20)
# 막대 그래프 만들기
library(ggplot2)
ggplot(top20, aes(x = reorder(word, n), y = n)) +
geom_col() +
coord_flip() +
geom_text(aes(label = n), hjust = -0.3) +
labs(x = NULL) +
theme(text = element_text(family = "nanumgothic"))
- 워드 클라우드 만들기
library(showtext)
font_add_google(name = "Black Han Sans", family = "blackhansans")
showtext_auto()
library(ggwordcloud)
ggplot(word_noun, aes(label = word, size = n, col = n)) +
geom_text_wordcloud(seed = 1234, family = "blackhansans") +
scale_radius(limits = c(3, NA),
range = c(3, 15)) +
scale_color_gradient(low = "#66aaf2", high = "#004EA1") +
theme_minimal()
3. 특정 단어가 사용된 문장 살펴보기
- 문장 기준으로 토큰화하기
sentences_moon <- raw_moon %>%
str_squish() %>%
as_tibble() %>%
unnest_tokens(input = value,
output = sentence,
token = "sentences")
sentences_moon
- 특정 단어가 사용된 문장 확인하기
str_detect("치킨은 맛있다", "치킨")
str_detect("치킨은 맛있다", "피자")
- 특정 단어가 사용된 문장 추출하기
sentences_moon %>%
filter(str_detect(sentence, "국민"))
- tibble 구조는 텍스트가 길면 Console 창 크기에 맞춰 일부만 출력됨. 모든 내용을 출력하려면 코드에 %>% data.frame()를 추가해 데이터 프레임으로 변환하면 됨. 왼쪽 정렬로 출력하려면 %>% print.data.frame(right=F)를 추가함.
기본적인 단어 빈도분석에 대해 궁금하신 분은 여기 링크를 참고바랍니다.
<참고> Do It! 쉽게 배우는 R 텍스트 마이닝
“이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.”