잡동사니 블로그
R 간단한 한글 워드클라우드 본문
https://n.news.naver.com/mnews/article/032/0003209196?sid=105
R에서 간단하게 워드클라우드 만들려고 하니 konlp랑 rhino가 install이 안됨.
버전 3.x.x 으로 낮추니 stringr 패키지에서 다시 버전 안맞아서 안됨.
또 맞추니 다른 버전에서 에러남.
화가나서 간단하게 만들어본 코드
파이썬으로 하면 쉬운데 암튼이부분이 중요함
#따옴표 처리
myCorpus <- tm_map(myCorpus, content_transformer(gsub), pattern = "”|‘|’|”", replacement = "")
#조사 제거
myCorpus <- tm_map(myCorpus, content_transformer(gsub), pattern = "(의|는|을|이|가|은|를|에게)(?=\\s)", replacement = "", perl = TRUE)
'' ‘’
따옴표도 차이가 있음...
조사를 제거하기 위해서 정규 표현식 썼음 조사 뒤에 공백이 올 경우에만 제거함
나머지는 tm 패키지로 전처리함 소문자로 변경 공백 제거등
# install.packages('httr')
library(httr)
# install.packages('XML')
library(XML)
# install.packages("stringr")
library(stringr)
# install.packages("dplyr")
library(dplyr)
# install.packages('tm')
library(tm)
# install.packages('rvest')
library(xml2)
library(httr)
library(rvest)
# install.packages("wordcloud")
library(wordcloud)
url="https://n.news.naver.com/mnews/article/032/0003209196?sid=105"
page <- GET(url)
doc <- read_html(page)
article <- html_text(html_nodes(doc, "#newsct_article"))
# tm 패키지를 이용한 전처리
myCorpus <- VCorpus(VectorSource(article))
myCorpus <- tm_map(myCorpus, content_transformer(tolower))
myCorpus <- tm_map(myCorpus, removeNumbers)
myCorpus <- tm_map(myCorpus, removePunctuation)
myCorpus <- tm_map(myCorpus, stripWhitespace)
myCorpus <- tm_map(myCorpus, content_transformer(stemDocument))
myCorpus <- tm_map(myCorpus, content_transformer(removePunctuation))
myCorpus <- tm_map(myCorpus, content_transformer(removeNumbers))
#따옴표 처리
myCorpus <- tm_map(myCorpus, content_transformer(gsub), pattern = "”|‘|’|”", replacement = "")
#조사 제거
myCorpus <- tm_map(myCorpus, content_transformer(gsub), pattern = "(의|는|을|이|가|은|를|에게)(?=\\s)", replacement = "", perl = TRUE)
# DocumentTermMatrix 만들기
dtm <- DocumentTermMatrix(myCorpus)
term_freq <- colSums(as.matrix(dtm))
term_freq[order(term_freq, decreasing = TRUE)][1:10]
#wordcloud 그리기
set.seed(123)
term_freq=colSums(as.matrix(dtm))
windows(width=6.5, height = 6.5)
wordcloud(words=names(term_freq), freq=term_freq, scale=c(5, 1.2), min.freq = 3, rot.per = 0, random.order = FALSE,
random.color = FALSE, colors = brewer.pal(5,"Set1"))
생각보다 차이 많이 나는걸 볼 수 있음