Rstudio(8) 텍스트 마이닝(KoNLP) 및 워드클라우드

hyukstory 혁스토리·2020년 8월 22일
0

Rstudio

목록 보기
10/16

< 8 > 텍스트 마이닝(KoNLP) 및 워드클라우드

일반적인 텍스트 마이닝 작업 순서

문장 - 단어(KoNLP) - 키워드(extractNoun) - 필터링(gsub / stringr) - 집계(table) - 시각화

워드 클라우드

워드 클라우드를 위해선 명사 추출이 선행되어야 함

8-1) wordcloud

install.packages("wordcloud")
library(wordcloud)

library(RColorBrewer)
display.brewer.all()  # 워드클라우드에 쓸 색상 리스트

palette <- brewer.pal(9,"Set1") # Set1에서 9가지 색을 쓴다는 뜻

wordcloud(name(데이터),  
          freq = 데이터,  
          scale = c(a,b),    # 가장 빈도가 큰 단어와 가장 빈도가 작은 단어 폰트 사이의 크기 차이
          rot.per = ,        # 글씨 방향의 비율 (0 : 가로만/ 1: 세로만/ 0.x : 비율)
          min.freq = ,       # 출력될 단어들의 최소 빈도
          max.words =,       # 출력될 단어들의 최대 빈도(inf : 제한 없음)
          random.order = ,   # True면 랜덤, False면 빈도수가 큰 단어를 중앙에 배치하고 작은 순 
          random.color = ,   # 글자 색 임의로 지정
          colors = palette,  # 글자 색
          family = "baedal") # 글씨체 

8-2) wordcloud2

install.packages("wordcloud2")
# 위에 안될때  devtools::install_github("lchiffon/wordcloud2")
library(wordcloud2)

wordcloud2( 테이블 형태의 데이터 )

Q. 워드클라우드 연습

step1. 필요패키지 깔기

install.packages("wordcloud")
library(wordcloud)

step2. 작업할 파일 불러오기

alert_1 <-readLines("c:/TEMP/Rstudy/data/oracle_alert_testdb.log")
alert_1

step3. 데이터 전처리 (필터링)

## - ORA-nnnn 형태의 오라클 오류만 뽑아내기
alert_2 <- grep("^ORA-", alert_1, value = T)
alert_2 <- substr(alert_2, 1, 8)
alert_2

step4. 집계

errorCount <- table(alert_2)
head(sort(errorCount, decreasing = T), 10)

step5. 시각화 (wordcloud)

- 색상 선택
library(RColorBrewer)
display.brewer.all()  # 워드클라우드에 쓸 색상 리스트

palette <- brewer.pal(9,"Set1") # Set1에서 9가지 색을 쓴다는 뜻
- 시각화
install.packages("wordcloud")
library(wordcloud)
wordcloud(names(errorCount),  
          freq = errorCount,  
          scale = c(4,0.5),   # 폰트 크기 차이
          rot.per = 0,        # 글씨 방향의 비율 (0 : 가로만/ 1: 세로만/ 0.x : 비율)
          min.freq = 5,       # 나타내는 최소 언급 값
          random.color = T,   # 글자 색 임의로 지정
          colors = palette,   # 글자 색
          family = "baedal")  # 글씨체 



wordcloud2(table(data4))

8-3) 한글 분석 : KoNLP

step1. JAVA 확인

Sys.setenv(JAVA_HOME="C:\\Program Files\\Java\\jre1.8.0_261") # JAVA 환경 설정정
Sys.getenv("JAVA_HOME") # JAVA 환경 설정 확인

step2. KoNLP 및 필요 패키지 설치

install.packages("KoNLP") # KoNLP 패키지 설치
install.packages("Sejong")
install.packages("hash")
install.packages("rJava")
install.packages("tau")
install.packages("RSQLite")
install.packages("devtools")

library(KoNLP)

Step3. 데이터 불러오기

data1 <- readLines("c:/TEMP/Rstudy/data/좋아하는과일2.txt")
data1

step4. 데이터 전처리

## - 중복된 값 제거
data1 <-  unique(data1)
data1


## - 특수문자 제거
install.packages("stringr")
library(stringr)
data1 <- str_replace_all(data1, "[^[:alpha:][:blank:]]","")
data1

step5. 단어 단위로 분리

data2 <- extractNoun(data1) # list 형태로 바뀜
data2

step6. 한 줄 안에서 중복되는 단어 제거

data2 <- sapply(data2, unique)
data2 

step7. 띄어 쓰기가 안되어 있는 긴 문장(단어)을 제거

## - Filter() 함수에는 데이터가 벡터어야 한다
## - 그래서 unlist() 함수로 list -> vector 전환
data3 <- unlist(data2) ; data3

data4 <- Filter(function(x) {
  nchar(x) <= 10 & nchar(x) > 1}, data3)
data4

step8. 불용어 제거

- 방법 1 : R에서 바로 없애기
data4 <- gsub("\\^", "", data4)
data4 <- gsub("ㅎ", "", data4)
data4 <- gsub("ㅋ", "", data4)
data4 <- gsub("좋아합니다", "", data4)
data4 <- gsub("최고", "", data4)

data4 <- Filter(function(x) {
  nchar(x) <= 10 & nchar(x) > 1}, data4) # 공백 제거거
data4
- 방법 2 : 메모장에 불용어 따로 적어서 반복문 통해 없애기
txt <- readLines("c:/TEMP/Rstudy/data/과일gsub.txt") 
cnt_txt <- length(txt)
cnt_txt

for( i in 1:cnt_txt) {
  data4 <-gsub((txt[i]),"",data4)      
} 
data4 

step9. 추출된 키워드를 임시로 확인하기 위해 집계

wordcount <- table(data4)
sort(wordcount, decreasing = T)

step10.워드클라우드로 시각화

install.packages("wordcloud")
library(wordcloud) 

palete <- brewer.pal(9,"Set3")  
wordcloud(names(wordcount),
          freq=wordcount,
          scale=c(5,1),
          rot.per=0.25,
          min.freq=1, 
          random.order=F,
          random.color=T,
          colors=palete)
profile
문돌이의 고군분투 개발 공부

0개의 댓글