R에서 rJava 사용하기 위한 설치 진행
동시출현 단어에 대한 분석이 필요하여, 검색을 해보았다. R언에에서 간단하게 함수 호출로 처리가 가능하다는 것을 확인하였다.
R 설치 하기
How To Install R on Ubuntu 18.04 를 참조해서 R을 설치 했다 명령어를 따라만 해도 쉽게 설치가 된다.
# 서버 키값 추가
$> sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9
# repository 추가
$> sudo add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu bionic-cran35/'
$> sudo apt update
# R 설치
$> sudo apt install r-base
# R Command 접근
$> sudo -i R
필요 모듈 설치
네이버 블로그로 동시출현단어 분석 (co-occurence network anlysis)에서 힌트를 얻어서 R을 한번 진행하려고 하였는데, KoNLP 모듈의 설치에서 rJava를 설치하라는 문구를 만나며 맨붕에 빠지게 되었다.
JAVA 설치
처음 실패를 계기로 구글링을 하여 다음의 해결책을 찾게 되었다. 준비해야 할 것이 몇개 있는데 큰 예로 JDK 10, 11로는 실패 하였다.
그래서 JDK 8을 기반으로 진행하였다. JDK8 설치는 How to Install Oracle Java JDK 8 / 10 in Ubuntu 18.04 를 참고하여 처리 하였다.
# repostiroy 추가
$> sudo add-apt-repository ppa:webupd8team/java
# java8 설치
$> sudo apt-get install oracle-java8-installer
# java8을 기본으로 사용하도록 설정
$> sudo apt-get install oracle-java8-set-default
rJava 설치
설치를 하려고 하면 많은 오류를 확인 할수 있다.
Compiling rJava macOS, java8를 참고하여 설치를 하면된다.
#java config 재설정
$> sudo R CMD javareconf
# R Command 진입
$> sudo R
# rJava 설치 (특정 위치에서 - jdk8과 궁합이 맞는 패키지인듯)
R> install.packages("https://cran.r-project.org/src/contrib/Archive/rJava/rJava_0.9-9.tar.gz")
R에서 필요한 모듈 추가
이후 다른 패키지를 설치하기 위해서 다음 모듈을 설치해 두는 것이 좋다.
$> sudo apt-get install libcurl4-openssl-dev libssl-dev libxml2-dev
이후 필요한 패키지를 설치하면 문제 없이 설치 된다.
동시 출현 단어 분석 매트릭스
.R 스크립트를 인자와 함께 실행를 참고 하여 R 실행 파일을 만들고 실행을 하면 원하는 결과를 확인 가능하다.
#! /usr/bin/env Rscript
library(rvest)
library(KoNLP)
library(stringr)
library(tm)
library(qgraph)
library(dplyr)
library(networkD3)
useNIADic()
keyword <- "텍스트+분석"
url <- paste0("https://search.naver.com/search.naver?where=post&sm=tab_pge&query=", keyword, "&st=sim&date_option=0&date_from=&date_to=&dup_remove=1&post_blogurl=&post_blogurl_without=&srchby=all&nso=&ie=utf8&start=")
searching <- c()
for(page in seq(1, 100, by=10)) {
page_url <- paste0(url, page)
result <- read_html(page_url) %>%
html_nodes(css='.sh_blog_passage') %>%
html_text()
# result <- iconv(result, "UTF-8", "CP949") # 윈도우의 경우, R 작업환경에 맞춰 CP949로 변경할 필요가 있습니다.
searching <- c(searching, result)
Sys.sleep(runif(1, 0, 1))
}
ko_words <- function(doc) {
d <- as.character(doc)
pos <- unlist(SimplePos22(d))
extracted <- str_match(pos, '([가-힣]+)/[NP][A-Z]')
keyword <- extracted[, 2]
keyword[!is.na(keyword)]
}
texts <- searching %>%
str_replace_all(pattern="\r", replacement="") %>%
str_replace_all(pattern="\n", replacement=" ") %>%
str_replace_all(pattern="[[:punct:]]", replacement=" ") %>%
str_replace_all(pattern="[ㄱ-ㅎㅏ-ㅣ]+", replacement="") %>%
str_replace_all(pattern="/", replacement=" ") %>%
str_trim(side="both")
texts <- texts[texts != ""]
pos <- Map(ko_words, texts)
corpus <- Corpus(VectorSource(pos))
stopWord <- c("텍스트", "분석")
tdm <- TermDocumentMatrix(corpus, control=list(
removePunctuation=TRUE, stopwords=stopWord,
removeNumbers=TRUE, wordLengths=c(4, 10), weighting=weightBin))
tdm.matrix <- as.matrix(tdm)
word.count <- rowSums(tdm.matrix)
word.order <- order(word.count, decreasing=TRUE)
freq.words <- tdm.matrix[word.order[1:30], ]
co.matrix <- freq.words %*% t(freq.words)
print(co.matrix)
결과는 다음과 같이 표기 된다.
Terms
Terms 데이터 c텍스트 분석하 통하 방법 마이닝 위하 기법 과정 가지 전처리
데이터 26 4 5 5 6 1 3 3 3 2 3
c텍스트 4 13 2 2 3 2 2 0 2 2 1
분석하 5 2 11 2 3 1 2 1 0 1 0
통하 5 2 2 11 2 1 1 2 0 0 0
방법 6 3 3 2 10 1 0 2 1 1 1
마이닝 1 2 1 1 1 10 1 1 1 0 0
위하 3 2 2 1 0 1 9 1 1 0 1
기법 3 0 1 2 2 1 1 7 0 0 1
과정 3 2 0 0 1 1 1 0 7 0 3
가지 2 2 1 0 1 0 0 0 0 6 0
전처리 3 1 0 0 1 0 1 1 3 0 6
활용 3 1 1 2 2 2 0 2 1 1 0
대하 1 0 1 1 0 0 0 1 0 2 0
아니 4 0 0 1 0 0 0 1 0 0 0
요소 1 1 2 0 1 2 1 2 0 0 1
내용 1 0 0 2 1 1 0 2 0 0 0
수집 3 1 0 0 0 1 1 0 1 0 1
의미 0 2 0 2 0 0 0 1 1 0 1
철학 0 1 0 0 0 0 0 0 1 1 0
텍스 1 2 0 0 1 0 0 0 1 1 1
단어 0 0 0 0 0 1 0 0 0 0 1
형태소 1 1 1 0 0 0 2 0 0 0 0
형태 0 0 0 1 1 0 0 0 0 0 0
단위 1 1 0 0 0 1 1 1 1 0 1
연구 1 0 0 0 1 3 0 1 1 0 0
결과 1 1 0 0 0 1 0 0 0 0 0
사람 2 1 1 0 1 0 0 0 0 1 0
주제 1 1 0 2 0 0 0 0 0 1 0
작업 0 0 1 0 1 0 1 0 1 0 1
c데이터 2 0 0 0 0 0 0 0 1 0 0
Terms
Terms 활용 대하 아니 요소 내용 수집 의미 철학 텍스 단어 형태소 형태 단위
데이터 3 1 4 1 1 3 0 0 1 0 1 0 1
c텍스트 1 0 0 1 0 1 2 1 2 0 1 0 1
분석하 1 1 0 2 0 0 0 0 0 0 1 0 0
통하 2 1 1 0 2 0 2 0 0 0 0 1 0
방법 2 0 0 1 1 0 0 0 1 0 0 1 0
마이닝 2 0 0 2 1 1 0 0 0 1 0 0 1
위하 0 0 0 1 0 1 0 0 0 0 2 0 1
기법 2 1 1 2 2 0 1 0 0 0 0 0 1
과정 1 0 0 0 0 1 1 1 1 0 0 0 1
가지 1 2 0 0 0 0 0 1 1 0 0 0 0
전처리 0 0 0 1 0 1 1 0 1 1 0 0 1
활용 6 1 1 0 2 2 0 0 0 0 0 0 0
대하 1 6 1 1 1 0 0 1 0 0 0 0 0
아니 1 1 6 0 1 0 0 0 0 0 0 0 0
요소 0 1 0 5 0 0 0 0 0 0 0 0 1
내용 2 1 1 0 5 1 0 0 0 0 0 1 0
수집 2 0 0 0 1 5 0 0 0 0 0 0 0
의미 0 0 0 0 0 0 5 0 0 0 0 0 1
철학 0 1 0 0 0 0 0 5 1 0 0 0 0
텍스 0 0 0 0 0 0 0 1 4 1 0 0 0
단어 0 0 0 0 0 0 0 0 1 4 1 0 0
형태소 0 0 0 0 0 0 0 0 0 1 4 1 1
형태 0 0 0 0 1 0 0 0 0 0 1 4 0
단위 0 0 0 1 0 0 1 0 0 0 1 0 4
연구 1 0 0 1 0 0 0 0 0 0 0 0 1
결과 1 0 0 0 1 2 0 0 0 0 0 0 0
사람 0 1 0 0 0 0 0 0 0 0 0 0 0
주제 0 1 0 0 0 0 1 0 0 0 0 0 0
작업 0 0 0 1 0 0 1 0 0 0 0 0 1
c데이터 0 0 0 0 0 1 0 0 0 0 0 0 0
Terms
Terms 연구 결과 사람 주제 작업 c데이터
데이터 1 1 2 1 0 2
c텍스트 0 1 1 1 0 0
분석하 0 0 1 0 1 0
통하 0 0 0 2 0 0
방법 1 0 1 0 1 0
마이닝 3 1 0 0 0 0
위하 0 0 0 0 1 0
기법 1 0 0 0 0 0
과정 1 0 0 0 1 1
가지 0 0 1 1 0 0
전처리 0 0 0 0 1 0
활용 1 1 0 0 0 0
대하 0 0 1 1 0 0
아니 0 0 0 0 0 0
요소 1 0 0 0 1 0
내용 0 1 0 0 0 0
수집 0 2 0 0 0 1
의미 0 0 0 1 1 0
철학 0 0 0 0 0 0
텍스 0 0 0 0 0 0
단어 0 0 0 0 0 0
형태소 0 0 0 0 0 0
형태 0 0 0 0 0 0
단위 1 0 0 0 1 0
연구 4 0 0 0 0 0
결과 0 4 0 0 0 1
사람 0 0 4 1 0 0
주제 0 0 1 4 0 0
작업 0 0 0 0 4 0
c데이터 0 1 0 0 0 4