경기도 인공지능 개발 과정/R

R 자연어 처리

agingcurve 2022. 4. 25. 10:13
반응형

자연어 처리 설치

 

사전환경 만들기

오라클(https://www.oracle.com/index.html) 로그인 후 

JAVA SE 설치

설치해준다.

 

설치 후

환경변수 셋팅을 위해

C:\Program Files\Java\jdk1.8.0_251\bin를 복사한후

에 들어간다.

 

7시방향의 윈도우 오른쪽 클릭-> 시스템-> 고급 시스템 설정 -> 환경변수 -> 시스템 변수 Path 변수-> 편집-> 새로만들기 -> C:\Program Files\Java\jdk1.8.0_251\bin 붙여넣기

 

이후 cmd 들어가서

java

javac

를 검색후 잘 작동하는지 확인

 

R 실행 후

 

# 1. R 설치하기(가급적 관리자 권한으로 설치)
# cran.r-project.org/bin/windows/base/?

# 2. rtools40 설치하기(c:/Rtools에 설치)
https://cran.r-project.org/bin/windows/Rtools/index.html

# 3. java, rJava 설치하기
install.packages("multilinguer")
library(multilinguer)
install_jdk()

# 4. 의존성 패키지 설치하기
install.packages(c("hash", "tau", "Sejong", "RSQLite", "devtools", "bit", "rex", "lazyeval", "htmlwidgets", "crosstalk", "promises", "later", "sessioninfo", "xopen", "bit64", "blob", "DBI", "memoise", "plogr", "covr", "DT", "rcmdcheck", "rversions"), type = "binary")

# 5. github 버전 설치하기
install.packages("remotes")

# 6. KoNLP 설치하기(64bit에서만 동작)
remotes::install_github('haven-jeon/KoNLP', upgrade = "never", INSTALL_opts=c("--no-multiarch"))

txt <- readLines("hiphop.txt")

txt

head(txt)

 

library(stringr)
# 특수문자 제거
# \는 W까지 써줘야 함
txt <- str_replace_all(txt,"\\W", " ")

 

## 가장 많이 사용된 단어 알아보기
extractNoun("대한민국의 영토는 한반도와 그 부속도서로 한다")

 

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


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

## 자주 사용된 단어 빈도표 만들기
# 데이터 프레임으로 변환
df_word <- as.data.frame(wordcount, stringsAsFactors = FALSE)

df_word

library(dplyr)

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

# 두 글자 이상 단어 추출
df_word <- filter(df_word, nchar(word)>=2)

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

top_20

 

# 워드클라우드 표현

# 패키지 설치

install.packages("wordcloud")

# 패키지 로드
library(wordcloud)
library(RColorBrewer)


pal <- brewer.pal(8,"Dark2") # Dark2 색상 목록에서 8개 색상 추출

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) # 색깔 목록

 


# 색깔변경
pal <- brewer.pal(8,"Blues")[5:9] # Dark2 색상 목록에서 8개 색상 추출

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) # 색깔 목록

국정원 계정 트윗 데이터 활용하여 텍스트 분석

# 변수명 변경
twitter <- rename(twitter,
                  no = 번호,
                  id = 계정이름,
                  date = 작성일,
                  tw = 내용)

# 특수문자 제거
twitter$tw <- str_replace_all(twitter$tw, "\\W", " ")

head(twitter$tw)

# 트윗에서 명사추출
nouns <- extractNoun(twitter$tw)

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

# 데이터 프레임으로 변환
df_word <- as.data.frame(wordcount, stringsAsFactors = F)
# 변수명 수정
df_word <- rename(df_word,
                  word = Var1,
                  freq = Freq)
df_word

# 두 글자 이상 단어만 추출
df_word <- filter(df_word, nchar(word) >= 2)
# 상위 20 개 추출
top20 <- df_word %>%
  arrange(desc(freq)) %>%
  head(20)



library(ggplot2)
order <- arrange(top20, freq)$word # 빈도 순서 변수 생성
ggplot(data = top20, aes(x = word, y = freq)) +
  ylim(0, 2500) +
  geom_col() +
  coord_flip() +
  scale_x_discrete(limit = order) + # 빈도 순서 변수 기준 막대 정렬
  geom_text(aes(label = freq), hjust = -0.3)

pal <- brewer.pal(8,"Dark2") # 색상 목록 생성
set.seed(1234) # 난수 고정
wordcloud(words = df_word$word, # 단어
          freq = df_word$freq, # 빈도
          min.freq = 10, # 최소 단어 빈도
          max.words = 200, # 표현 단어 수
          random.order = F, # 고빈도 단어 중앙 배치
          rot.per = .1, # 회전 단어 비율
          scale = c(6, 0.2), # 단어 크기 범위
          colors = pal) # 색상 목록

# 색상변경

pal <- brewer.pal(9,"Blues")[5:9] # 색상 목록 생성
set.seed(1234) # 난수 고정
wordcloud(words = df_word$word, # 단어
          freq = df_word$freq, # 빈도
          min.freq = 10, # 최소 단어 빈도
          max.words = 200, # 표현 단어 수
          random.order = F, # 고빈도 단어 중앙 배치
          rot.per = .1, # 회전 단어 비율
          scale = c(6, 0.2), # 단어 크기 범위
          colors = pal)

 

 

'경기도 인공지능 개발 과정 > R' 카테고리의 다른 글

R 지도시각화  (0) 2022.04.25
R 비정형 데이터 분석  (0) 2022.04.25
R 야구 데이터 분석  (0) 2022.04.19
R 서울시 역세권 아파트 가격 분석  (0) 2022.04.19
R ggplot2  (0) 2022.04.17