ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.