티스토리 뷰
Software/Data Analytics
[R 프로그래밍 언어] KoNLP + WordCloud 한글 비정형데이터 분석(Kakaotalk)
Arc Lab. 2016. 12. 16. 02:49[업데이트 2016.12.28 00:47]
카카오톡에 대한 대화를 분석해보았습니다. PC카톡에서 채팅방 > 매뉴 > 대화 내용 > 대화 내보내기를 통해 txt 파일을 받은 후 분석을 진행했습니다.
일단 채팅방 사람들 이름을 명사로 등록하여 이름을 구분하도록 하였고, 그 외에 불필요한 단어들을 삭제했습니다.(날짜 등)
# Install wordcloud package and related packages.
#install.packages('KoNLP') # For Korean
#install.packages('SnowballC')
#install.packages('wordcloud')
#install.packages('RColorBrewer')
#install.packages('plyr')
#install.packages('stringr')
#install.packages('ggplot2')
library(KoNLP)
library(SnowballC)
library(RColorBrewer)
library(wordcloud)
library(plyr)
library(stringr)
library(ggplot2)
# Use Korean dictionary.
useSejongDic()
# Register nouns
mergeUserDic(data.frame("홍길동", "ncn"))
mergeUserDic(data.frame("김철수", "ncn"))
mergeUserDic(data.frame("박영희", "ncn"))
# Read text data from text file.
parsed <- readLines("KakaoTalk_20161216_0049_20_276_group.txt", encoding="UTF-8")
# Apply extract Noun.
parsed <- sapply(parsed,extractNoun,USE.NAMES = F)
# Unlist and apply filter. Allow only above 2 lengths.
parsed <- unlist(parsed)
parsed <- Filter(function(x) {nchar(x) >= 2}, parsed)
# Replace specific strings
parsed <- str_replace_all(parsed,"[^[:alpha:]]","")
parsed <- str_replace_all(parsed,"[A-Za-z0-9]","")
parsed <- gsub("음성메세지", "", parsed)
parsed <- gsub("이모티콘", "", parsed)
parsed <- gsub("월요일", "", parsed)
parsed <- gsub("전도사", "", parsed)
parsed <- gsub("화요일", "", parsed)
parsed <- gsub("수요일", "", parsed)
parsed <- gsub("목요일", "", parsed)
parsed <- gsub("금요일", "", parsed)
parsed <- gsub("토요일", "", parsed)
parsed <- gsub("일요일", "", parsed)
parsed <- gsub("날짜", "", parsed)
parsed <- gsub("저장한", "", parsed)
parsed <- gsub("동영상", "", parsed)
parsed <- gsub("사진", "", parsed)
parsed <- gsub("오전", "", parsed)
parsed <- gsub("오후", "", parsed)
parsed <- gsub("누나", "", parsed)
parsed <- gsub("님", "", parsed)
parsed <- gsub("년", "", parsed)
parsed <- gsub("월", "", parsed)
parsed <- gsub("일", "", parsed)
parsed <- gsub("ㅋ", "", parsed)
parsed <- gsub("ㅎ", "", parsed)
parsed <- gsub("ㅇ", "", parsed)
parsed <- gsub("ㅠ", "", parsed)
parsed <- gsub("ㅜ", "", parsed)
parsed <- gsub("아멘", " 아멘", parsed)
# Write parsed string as unlist and read table from the temporary file.
write(unlist(parsed), "kr_cloud_kakao.txt")
text_table <- read.table("kr_cloud_kakao.txt")
# Create table data with word count
word_Count <- table(text_table)
# Create data.frame from table data.
terms <- data.frame(word_Count)
# Change column name.
names(terms) <- c("word", "freq")
# Sort the matrix data according to rowsums as desc order.
terms <- arrange(terms, desc(freq))
# Extract N items from head top N.
#topN <- head(terms, 200)
# Set a random seed.
set.seed(1)
# Display a wordcloud.
#windowsFonts(myfont=windowsFont("맑은 고딕"))
wordcloud(words=terms$word, freq=terms$freq, min.freq = 0.32, max.words = 400, random.order = FALSE, rot.per = 0.25,colors=brewer.pal(8, "Dark2"), family="AppleGothic")
#wordcloud(words=terms$word, freq=terms$freq, min.freq = 0.32, max.words = 400, random.order = FALSE, rot.per = 0.25,colors=brewer.pal(8, "Dark2"), family="myfont")
# Display a bar chart
#terms2 <- arrange(terms, desc(freq))
#top10 <- head(terms2, 50)
#ggplot(data=top10, aes(x=reorder(word,freq), y=freq, group=1, fill=word)) + geom_bar(stat="identity", aes(fill=word), position=position_dodge(), colour="black") + theme(legend.position="right", legend.direction="vertical") + coord_flip() + geom_text(data=top10, aes(label=top10$freq), position=position_identity(), vjust=0.5, hjust=-0.2)
<GitHub>
https://github.com/asyncbridge/analytics/blob/master/R/Kakao_Talk.R
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Worry
- project
- Game Engine
- some time ago
- SSM
- #ApacheSpark
- Library
- OST
- sentence test
- #ELK Stack
- Ragdoll
- Badge
- Memorize
- Mask R-CNN
- ILoop Engine
- Meow
- #ApacheZeppelin
- Physical Simulation
- 2D Game
- #REST API
- ate
- #TensorFlow
- 도커
- belief
- GOD
- docker
- aws #cloudfront
- English
- Sea Bottom
- Jekyll and Hyde
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
글 보관함