본문 바로가기
프로그래밍 언어/R

R 9. 텍스트 마이닝

by Jinger 2024. 2. 2.

서론

    문자로 된 데이터에서 가치 있는 정보를 얻어 내는 텍스트 마이닝에 대해 알아보자.


텍스트 마이닝

    문자로 된 데이터에서 가치 있는 정보를 얻어 내는 분석 기법을 '텍스트 마이닝(Text mining)'이라고 한다. 텍스트 마이닝을 할 때 가장 먼저 하는 작업은 문장을 구성하는 어절들이 어떤 품사로 되어 있는지 파악하는 '형태소 분석(Morphology Analysis)'이다. 형태소 분석으로 어절들의 품사를 파악한 후 명사, 동사, 형용사 등 의미를 지닌 품사의 단어들을 추출해 각 단어가 얼마나 많이 등장했는지 확인한다. 텍스트 마이닝을 이용해 SNS나 웹 사이트에 올라온 글을 분석하면 사람들이 어떤 이야기를 나누고 있는지 파악할 수 있다.

힙합 음악 가사

    'KoNLP(Korean Natural Language Processing)' 패키지를 이용하면 한글 텍스트의 형태소를 분석할 수 있다. 그러나 이 패키지를 이용하기 위해 다른 패키지를 함께 설치해야만 한다. 이처럼 패키지가 의존하고 있는 패키지를 '의존성 패키지'라고 한다.

# KoNLP 이전 설치
install.packages("multilinguer")
library(multilinguer)
install_jdk()

install.packages(c("stringr", "hash", "tau", "Sejong", "RSQLite", "devtools"), type = "binary")

# KoNLP 설치
install.packages("remotes")
remotes::install_github("haven-jeon/KoNLP", upgrade = "never", INSTALL_opts = c("--no-multiarch"))
library(KoNLP)

# 형태소 사전 설정
useNIADic()

# 데이터 준비하기
txt <- readLines("hiphop.txt")
head(txt)

# 특수 문자 제거하기
install.packages("stringr")
library(stringr)

txt <- str_replace_all(txt, "\\W", " ")

    텍스트 파일에 있는 힙합 가사에 어떤 단어가 많이 사용됐는지 알아보자. 'KoNLP'의 "extractNoun()'을 이용하면 문장에서 명사를 추출할 수 있다. 한 글자로 된 단어는 의미가 없는 경우가 많기 때문에 "nchar()"을 이용해 두 글자 이상으로 된 단어만 추출한다.

    워드 클라우드(Word cloud)는 단어의 빈도를 구름 모양으로 표현한 그래프이다. 워드 클라우드를 만들면 단어의 빈도에 따라 글자의 크기와 색깔이 다르게 표현되기 때문에 어떤 단어가 얼마나 많이 사용됐는지 한눈에 파악할 수 있다.

# 가사에서 명사 추출
nouns <- extractNoun(txt)

# 추출한 명사 list를 문자열 벡터로 변환, 단어별 빈도표 생성
wordcount <- table(unlist(nouns))

# 데이터 프레임으로 변환
df_word <- as.data.frame(wordcount, stringsAsFactors = F)

# 변수명 수정
df_word <- rename(df_word, word = Var1, freq = Freq)

# 자주 사요오딘 단어 빈도표 만들기
df_word <- filter(df_word, nchar(word) >= 2)

top20 <- df_word %>% arrange(desc(freq)) %>% head(20)

# 위드 클라우드 패키지 준비
install.packages("wordcloud")
library(wordcloud)
library(RColorBrewer)	# 내장 패키지
library(dplyr)

# 단어 색상 목록 만들기
pal <- brewer.pal(8, "Dark2")

# 난수 고정
set.seed(1234)	# 모양 동일하게 고정

# 워드 클라우드 만들기
wordcloud(words = df_word$word,			# 단어
	freq = df_word$freq,			# 빈도
    	min.freq = 2,				# 최소 단어 빈도
    	max.words = 200,			# 표현 단어 수
    	random.order = F,			# 고빈도 단어 중앙 배치
    	rot.per = .1,				# 회전 단어 비율
    	scale = c(4, 0.3),			# 단어 크기 범위
    	colors = pal)				# 색상 목록


주섬주섬

  • txt파일의 한글이 깨진다면, R studio의 인코딩을 확인하고 txt파일도 같은 인코딩으로 설정해주면 된다. "UTF-8"을 추천한다.

참고

 

GitHub - youngwoos/Doit_R: <Do it! 쉽게 배우는 R 데이터 분석> 저장소

<Do it! 쉽게 배우는 R 데이터 분석> 저장소. Contribute to youngwoos/Doit_R development by creating an account on GitHub.

github.com

 

GitHub - haven-jeon/KoNLP: R package for Korean NLP

R package for Korean NLP. Contribute to haven-jeon/KoNLP development by creating an account on GitHub.

github.com

 

국정원 의심 계정 트윗 분석

요즘 인터넷이 국정원의 정치개입의혹 때문에 떠들썩 합니다. 외국에 살기에 주로 인터넷을 통해 국내 상황을 접하는 데 트위터에서 보면 인터넷상에서만 정보가 오가지 공중파 방송이나 조중

wsyang.com

 

반응형

'프로그래밍 언어 > R' 카테고리의 다른 글

R 11. 인터랙티브 그래프  (0) 2024.02.02
R 10. 지도 시각화  (0) 2024.02.02
R 8. 데이터 분석하기  (0) 2024.02.01
R 7. 그래프 만들기  (1) 2024.01.31
R 6. 데이터 정제하기  (0) 2024.01.30

댓글