###################################
## 추가 감성 분석
#################################
getwd()
setwd("D:/R언어/수업자료_2023/data04")
install.packages("rvest")
library(rvest)
iphonetext = readLines("아이폰댓글수집.txt")
iphonetext = repair_encoding(iphonetext) # 한글이 안깨지도록
iphonetext
KposDic = readLines("KposDic.txt")
KnegDic = readLines("KnegDic.txt")
KnegDic
KnegDic = repair_encoding(KnegDic)
KposDic = repair_encoding(KposDic)
length(KposDic) # 2
length(KnegDic) # 4
#긍정어/부정어 단어 추가
KposDic.final =c(KposDic, 'test')
KnegDic.final =c(KnegDic, '별로인듯','엉터리','불편해')
#마지막에 단어 추가
tail(KposDic.final)
tail(KnegDic.final)
#감성분석 알고리즘 살펴보기
#감성분석 실습 소스
install.packages("plyr")
install.packages("stringr")
library(plyr)
library(stringr) # str_split()함수 제공
install.packages("sos") #
library("sos")
findFn("laply")
#p36 감성분석을 위한 함수 정의
sentimental = function(sentences, KposDic, KnegDic){
scores = laply(sentences, function(sentence, KposDic, KnegDic) {
sentence = gsub('[[:punct:]]', '', sentence) # 문장부호 제거
sentence = gsub('[[:cntrl:]]', '', sentence) # 특수문자 제거
sentence = gsub('\\d+', '', sentence) # 숫자 제거
sentence = tolower(sentence) # 모두 소문자로 변경
word.list = str_split(sentence, '\\s+') # 공백 기준으로 단어 생성
words = unlist(word.list) # unlist() : list를 vector 객체로 구조변경
# words의 단어를 KposDic에서 matching
pos.matches = match(words, KposDic) # 긍정 사전
neg.matches = match(words, KnegDic) # 부정 사전
pos.matches = !is.na(pos.matches) # NA 제거, 위치(숫자)만 추출
neg.matches = !is.na(neg.matches)
score = sum(pos.matches) - sum(neg.matches) # 긍정-부정 싫어, 가수는 좋아 (1-2 = 부정)
return(score) # score는 긍정과 부정의 숫자를 비교해서 결과나옴
}, KposDic, KnegDic)
scores.df = data.frame(score=scores, text=sentences)
return(scores.df)
}
# p37 감성 분석 : 두번째 변수(review) 전체 레코드 대상 감성분석
result=sentimental(iphonetext, KposDic.final, KnegDic.final) ; result
names(result) # "score" "text"
dim(result)
result$text
result$score
#데이터 시각화 #p38 감성분석 결과 차트 보기
#score값을 대상으로 color 칼럼 추가
result$color[result$score >=1] = "blue"
result$color[result$score ==0] = "green"
result$color[result$score < 0] = "red"
plot(result$score, col=result$color) # 산포도 색상 적용
barplot(result$score, col=result$color, main ="감성분석 결과화면")
# 막대차트 # 단어의 긍정/부정 분석 # 감성분석 빈도수
table(result$color)
# score 칼럼 리코딩
result$remark[result$score >=1] = "긍정"
result$remark[result$score ==0] = "중립"
result$remark[result$score < 0] = "부정"
sentiment_result= table(result$remark)
sentiment_result
# p39 제목, 색상, 원크기
pie(sentiment_result, main="감성분석 결과",
col=c("blue","red","green"), radius=0.9)