기존 SQL 포토폴리오 데이터가 많이 정제되어있는데이터라 오늘 배운내용에는 활용하지 못하여서
공공데이터 포털 환경부 댓글 클롤링 데이터를 활용하였습니다
# 작업 디렉토리 설정
setwd("c:\\data") # 파일이 있는 디렉토리로 변경
# 텍스트 데이터 로드
txt <- readLines('환경부.txt', encoding = "UTF-8")
# 특수문자 제거 및 공백 처리
# 불필요한 텍스트를 제거합니다.
cleaned_txt <- iconv(txt, "UTF-8", "UTF-8", sub="")
#한글과 숫자, 공백을 제외한 모든 특수문자를 공백으로 대체합니다.
cleaned_txt <- gsub("[^[:alnum:][:space:]ㄱ-ㅎㅏ-ㅣ가-힣]", " ", cleaned_txt)
# 연속된 공백을 하나의 공백으로 변환합니다.
cleaned_txt <- gsub("\\s+", " ", cleaned_txt) # 연속된 공백 제거
# 명사 추출 함수
extract_nouns_simple <- function(doc) {
doc <- as.character(doc) #문자로 변환
words <- unlist(strsplit(doc, "\\s+")) # 공백을 기준으로 단어 분리
nouns <- Filter(function(x) {grepl("^[가-힣]+$", x) && nchar(x) >= 2}, words) # 한글로만 구성된 단어 추출 및 길이 2 이상 필터링
return(nouns)
}
# 명사 추출
nouns <- extract_nouns_simple(cleaned_txt)
# 추출된 명사 확인
print(head(nouns, 10)) # 상위 10개 단어 확인
# 단어 빈도수 계산
word_freq <- table(nouns)
word_freq <- as.data.frame(word_freq, stringsAsFactors = FALSE)
word_freq <- arrange(word_freq, desc(Freq)) #명사의 빈도수를 내림차순으로 정렬
# 상위 10개 단어 확인
print(head(word_freq, 10))
# 유효하지 않은 값 확인 및 제거
# 빈문자열을 포함하는 행을 제거합니다.
word_freq <- word_freq[word_freq$nouns != "", ]
# 단어 빈도수 데이터프레임 확인
print(head(word_freq, 10))
# 워드클라우드 생성 (하트 모양)
wordcloud2(data = word_freq, shape = "heart", color = brewer.pal(8, "Dark2"))