1. 기본 package 설정
# install.packages("tidyverse")
# install.packages("tidytext")
useNIADic() # 단어사전
library(KoNLP)
library(tidyverse)
library(tidytext)
2. 데이터 가져오기
tm_tb <- read_csv('Article content analysis.csv',
col_names = TRUE,
na = ".")
tm_tb
✔️여러 페이지의 데이터를 가져오는 방법으로 내보내기한 데이터를 사용한다.
3. 문서 전처리 (정규표현식 이용)
tm_tb <- tm_tb %>%
mutate(본문 = gsub("[[:cntrl:]]", "", 본문)) %>% # 엔터 등 제거
mutate(본문 = gsub("[[:punct:]]", " ", 본문)) %>% # 구두점 등 제거
mutate(본문 = gsub("[[:digit:]]", "", 본문)) # 숫자 제거
tm_tb$본문[2]
✔️ 정규표현식
✔️ mutate(본문 = gsub("", "", 본문))
✔️ 무엇을 출력할지는 내용을 보면서 생각해 봐야 한다.
✔️ [:cntrl:]: 제어문자 [\x00-\x1F\x7F]
✔️ [:punct:]: 구두점 [][!"#$%&'()*+,./:;<=>?@\^_`{|}~-]
✔️ [:digit:]: 숫자 [0-9]
3-1. 형태소 분석
word_tb <- tm_tb %>%
select(no, 본문) %>%
unnest_tokens(input = 본문,
output = morp,
token = SimplePos09) %>% # 한글 형태소로 분리
mutate(word = str_remove(morp, "/.*$")) %>% # 형태소 정보 제거
filter(str_length(word) >= 2)
word_tb
✔️ token: 어떤 방법으로 token처리를 할 것인가?
✔️ A tibble: 10,585 × 3
3-2. 명사추출
word_n_tb <- word_tb %>%
filter(str_detect(morp, "/n"))# 명사 추출
word_n_tb
✔️ A tibble: 7,873 × 3
3-3 동사, 형용사 추출
word_p_tb <- word_tb %>%
filter(str_detect(morp, "/p")) %>% # 동사, 형용사 추출
mutate(word = str_replace(morp, "/.*$", "다")) # 형태소 정보 제거
word_p_tb
✔️ A tibble: 817 × 3
3-4. 통합
word_t_tb <- bind_rows(word_n_tb, word_p_tb)
word_t_tb
4. 단어 정리
4-1. 단어 바꾸기
word_t_tb <- word_t_tb %>%
mutate(word = gsub("ai", "인공지능", word)) %>%
mutate(word = gsub("바드는", "바드", word)) %>%
mutate(word = gsub("챗지피티", "chatgpt", word)) %>%
mutate(word = gsub("지피티", "chatgpt", word)) %>%
mutate(word = gsub("챗gpt를", "chatgpt", word)) %>%
mutate(word = gsub("챗gpt", "chatgpt", word))
word_t_tb
✔️ 같은 단어를 한단어로 변경
4-2. 단어 삭제
st_word <- tibble(word=c("대하다", "통하다", "따르다", "위하다", "지나다", "에서", "보이다", "때문", "아니다"))
word_t_tb <- word_t_tb %>%
anti_join(st_word, by="word")
word_t_tb