-
R program(7)Cording/R program 2020. 12. 26. 18:12
library(tm)
library(stringr)
library(wordcloud)
library(SnowballC)
file <- read.csv("wos_english_120.csv") # CSV 파일 불러오기
abstract <- file$ABSTRACT # ABSTRACT 추출
corpus <- VCorpus(VectorSource(abstract)) # Corpus 추출 (VCorpus: 휘발성 말뭉치(Volatile Corpus))
corpus.pre <- tm_map(corpus, removeNumbers) # 숫자 모두 삭제
corpus.pre <- tm_map(corpus.pre, removePunctuation) # 특수 문자 제거
corpus.pre <- tm_map(corpus.pre, content_transformer(tolower)) # 대소문자의 소문자화 (Convert to lowercase)
corpus.pre <- tm_map(corpus.pre, removeWords, words = stopwords("SMART")) # 불용어(Stopwords) 제거 (SMART 목록)
corpus.pre <- tm_map(corpus.pre, stripWhitespace) # 공백 처리
corpus.pre <- tm_map(corpus.pre, stemDocument, language = "en") # 어간 추출 (Stemming)
### 감정어휘 사전을 활용한 텍스트 감정분석
install.packages("tidytext")
library(tidytext)
library(tidyr)
# AFINN 감정어휘 사전 호출
get_sentiments("afinn")
# 감정어휘 사전은 별도로 저장하여 사용도 가능함
sent.dic.AFINN <- data.frame(get_sentiments("afinn"))
summary(sent.dic.AFINN)
hist(sent.dic.AFINN$score, breaks = 20, xlim = c(-6, 6), col = 'blue', xlab = 'sentiment score in AFINN', main = '')
# 빙류의 opinion lexicon 사전 호출
get_sentiments("bing")
sent.dic.BING <- data.frame(get_sentiments("bing"))
# EmoLex 사전 호출
get_sentiments("nrc")
sent.dic.NRC <- data.frame(get_sentiments("nrc"))
table(sent.dic.NRC$sentiment)
sent.dic.NRC$word[sent.dic.NRC$sentiment == 'anger']
# 텍스트 데이터 호출
install.packages('dplyr')
library(dplyr)
sent.value = 119 # 데이터 프레임의 총 행 갯수
sent.txt <- c(rep(NA), sent.value)
for (i in 1:sent.value) {
sent.txt[i] <- as.character(corpus.pre[[i]][1])
}
# tidytext 형태의 데이터 구성
sent.txt.df <- data_frame(paper.id = 1:sent.value, doc = sent.txt)
sent.txt.df
# 문서-단어로 구성된 행렬 구성
# unnest_tokens(): 주어진 tidytext 오브젝트의 text 변수를 word로 구분
# %>%: 파이프라고 불리며 해당 작업을 부여
sent.txt.df.word <- sent.txt.df %>% unnest_tokens(word, doc)
sent.txt.df.word
sent.result.bing <- sent.txt.df.word %>% inner_join(get_sentiments("bing")) %>% count(word, paper.id, sentiment) %>% spread(sentiment, n, fill = 0)
sent.result.bing
m4# 문서별 긍정, 부정 단어 결합, 차이 값
sent.result.bing.posneg <- summarise(group_by(sent.result.bing, paper.id), pos.sum = sum(positive),
neg.sum = sum(negative), pos.sent = pos.sum - neg.sum)
sent.result.bing.posneg
# 문서 메타데이터(년도)와 결합
paper.id <- 1:sent.value
sent.result.bing.year <- data.frame(paper.id, file$YEAR)
sent.result.bing.df <- merge(sent.result.bing.posneg, sent.result.bing.year, all.x = T)
colnames(sent.result.bing.df) <- c('ID', 'POS', 'NEG', 'SCORE', 'YEAR')
sent.result.bing.df
# 결과 시각화 (년도별 긍정, 부정 점수)
library('ggplot2')
ggplot(data = sent.result.bing.df, aes(x = YEAR, y = SCORE)) +
geom_bar(stat = "identity") +
labs(x = 'Publication year', y = 'SCORE') +
scale_x_continuous(limits = c(2015, 2020))
for (i in 1:10){
print(i)
}
while(i <= 10){
print(i)
i <- i + 1
}
repeat{
print(1)
}
i <-1
repeat{
print(i)
i <- i + 1
if(i%%3==0){
break
}
}
i <- 1
while(T){
print(i)
i <- i + 1
if(i%%3==0){
break
}
}
'Cording > R program' 카테고리의 다른 글
Ongoing (0) 2023.12.25 R program(8) Data (0) 2021.01.11 R program(6) (0) 2020.12.24 R program(5) (0) 2020.12.23 R program(4) (0) 2020.12.22