Author : tmlab / Date : 2016. 10. 17. 19:42 / Category : Text Mining/R
excel file I/O
string 처리 및 text mining 패키지
library(readxl)
blog <- read_excel("after_POS.xlsx")
str(blog)
## Classes 'tbl_df', 'tbl' and 'data.frame': 206 obs. of 5 variables:
## $ : chr "1" "2" "3" "4" ...
## $ a***** : chr "ㅁ**" "ㅋ**" "녹***" "맥****" ...
## $ date : chr "2015.04.18 05:18" "2015.04.18 07:26" "2015.04.18 10:55" "2015.04.18 11:10" ...
## $ desc : chr "첫부분만 읽고서는 그저 그러뉴변명하려는 줄 알고 짜증부터 났네요. 방청품질이 미국과 동일하다고 두괄식으로 결론부터 쓰시는게 좋을"| __truncated__ "이제까지 내수 수출 차별한건 사실이고 방청말고 내부사양에 다른 장난질을 쳤을 가능성이 있다는 것도 인정 하신다는 말씀이죠? 참 대"| __truncated__ " 이분 최소한 난독증...진실한 소통의 시작..응원합니다 " " 맞는 부분 있습니다.. 내수외 북미용이 다릅니다. 씨트프레임도 달라요..ㅋㅋ 제조해 봐서... ㅋㅋ " ...
## $ article_POS: chr "첫/MDT;부분/NNG;만/JX;읽/VV;고서/ECD;는/JX;그저/MAG;그/VV;러/ECD;뉴/NNG;변명/NNG;하/XSV;려는/ETD;줄/NNB;알/VV;고/ECE;짜증/NNG;"| __truncated__ "이제/NNG;까지/JX;내수/NNG;수출/NNG;차별/NNG;하/XSV;ㄴ/ETD;것/NNB;은/JKS;사실/NNG;이/VCP;고/ECE;방청/NNG;말/VV;고/ECE;내부/NNG;"| __truncated__ "이분/NNG;최소/NNG;하/XSV;ㄴ/ETD;난독/NNG;증/NNG;.../SE;진실/NNG;하/XSV;ㄴ/ETD;소통/NNG;의/JKG;시작/NNG;../SW;응원/NNG;하/XSV;ㅂ"| __truncated__ "맞/VV;는/ETD;부분/NNG;있/VV;습니다/EFN;../SW;내수/NNG;외/NNB;북미/NNG;용/XSN;이/JKS;다르/VV;ㅂ니다/EFN;./SF;씨트/UN;프레임/NNG;"| __truncated__ ...
library(tm)
## Loading required package: NLP
library(stringr)
ko.words = function(doc){
d = str_split(doc, ';')[[1]] ## 띄어쓰기(' ')를 기준으로 한 문장을 여러 단어로 나눔
extracted = tolower(str_match(d, '([가-힣a-zA-Z]+)/[NVO]'))
keyword = extracted[,2]
keyword[!is.na(keyword)]
}
options(mc.cores=1)
cps = Corpus(VectorSource(blog$article_POS))
tdm <- TermDocumentMatrix(cps, control=list(tokenize = ko.words,
removePunctuation=T,
removeNumbers=T,
wordLengths=c(2, Inf)))
tdm.matrix = as.matrix(tdm)
word.count = rowSums(tdm.matrix)
word.order = order(word.count, decreasing = T)
freq.word = tdm.matrix[word.order[1:50],]
rownames(tdm.matrix)[word.order[1:50]]
## [1] "부식" "현대" "아니" "내수" "수출" "차량"
## [7] "강판" "미국" "만들" "지금" "현지" "지도"
## [13] "지역" "대하" "한국" "그러" "자동차" "그렇"
## [19] "국내" "다르" "생각" "사람" "소비자" "고객"
## [25] "회사" "방청" "안전" "국민" "때문" "차이"
## [31] "나라" "기업" "대한민국" "문제" "변명" "오해"
## [37] "정도" "품질" "현기" "기아" "모르" "외제"
## [43] "우리나라" "이것" "이상" "가격" "기차" "소나타"
## [49] "차별" "생기"
co.matrix = freq.word %*% t(freq.word)
#시각화
library(qgraph)
qg<-qgraph(co.matrix,
labels=rownames(co.matrix),
diag=F,
layout='spring',
edge.color='black',
vsize=log(diag(co.matrix))*1.5)
plot(qg)
dtm = as.DocumentTermMatrix(tdm)
freq=sort(colSums(as.matrix(dtm)), decreasing=TRUE)
wf=data.frame(word=names(freq), freq=freq)
#ggplot
library(ggplot2)
##
## Attaching package: 'ggplot2'
## The following object is masked from 'package:NLP':
##
## annotate
library(wordcloud)
## Loading required package: RColorBrewer
p=ggplot(subset(wf, freq>50), aes(word, freq))
p=p+geom_bar(stat="identity")
p=p+theme(axis.text.x=element_text(angle=45, hjust=1))
p
wordcloud(names(freq), freq, min.freq=10, color=brewer.pal(6, "Dark2"))