안녕하세요 구도입니다.


오늘도 지난 시간에 이어 텍스트마이닝 실습을 진행해보는 시간을 갖도록 하겠습니다.


프로그램 실행하셔서 직접 실습해보시며 이해하시는 것이 가장 효과적이랍니다.


*프로그램은 'R x64 3.5.1' 을 사용하였습니다*



#데이터 정의

library(tm)


sentences1<-c("These are 4 sentences.",

 "So they are text data.",

 "They are not structured but unstructured.",

 "We will study pre-processing in text mining with them.") # 네 개의 문장을 벡터 형태로 읽어 들여 이들을 sentences1에 저장

sentences1


sentCorpus<-Corpus(VectorSource(sentences1))   # 문자열로 만들어진 벡터 자료 sentences1 을 sentCorpus라는 corpus로 저장

sentCorpus                                     # sentCorpus를 치면 sentCorpus의 메타정보만 주고 corpus의 내용을 볼 수 없음



inspect(sentCorpus)  # 전처리 결과 확인을 위한 함수.inspect() 함수를 사용해도 내용은 볼 수 없다. 



lapply(sentCorpus,as.character) # v0.6-2에서 corpus의 내용을 보기 위해서는 corpus를 as.character() 함수를 이용하여 문자형으로 바꿔주어야 함

                                # lapply() 함수는 어떤 함수를 적용시킨 결과를 리스트 형태로 나타내줌

                                # sentCorpus 에 as.character() 함수가 적용되어 각 문서가 리스트 형태로 출력된 것을 확인할 수 있음



library(SnowballC)



sentCorpus<-tm_map(sentCorpus,stemDocument)

inspect(sentCorpus)

lapply(sentCorpus,as.character)



paste(c("east", "west", "south", "north"), collapse=" ")


split=strsplit("abcde", "c")



sentCorpus <- tm_map(sentCorpus, gsub, pattern="studi", replacement="study")

inspect(sentCorpus)



#termDocumentmatrix 생성

sentences1<-c("These are 4 sentences.",

 "So they are text data.",

 "They are not structured but unstructured.",

 "We will study pre-processing in text mining with them.")

sentences1


sentCorpus<-Corpus(VectorSource(sentences1))   

sentCorpus                                     


inspect(sentCorpus) 



lapply(sentCorpus,as.character) 


sentTdm<-TermDocumentMatrix(sentCorpus,control=list(minWordLength=1))

sentTdm


inspect(sentTdm)


m <- as.matrix(sentTdm)  ##TermDocumentMatrix() 함수의 결과는 sentTdm을 보통의 행렬 형태로 바꾸기 위해

                           as.matrix() 함수가 필요

m



inspect(sentTdm[1:3,2:3])  ## 행렬의 일부 보기. 1~3번째 단어와 2~3번째 문서를 확인할 수 있다.


inspect(sentTdm[c("data","text"),]) ##특정 관심 단어들의 단어-문서 행렬도 확인 가능. “data”와“text”를 포함한 단어-문서 행렬을 확인



findFreqTerms(sentTdm,lowfreq=2)  ##빈도가 어느 정도 이상인 단어들만을 고르려 할 경우 사용하는 함수. 빈도가 2이상인 단어 고르기


findAssocs(sentTdm, "text", corlimit=0.5)


freq<-rowSums(as.matrix(sentTdm))

barplot(freq)


barplot(freq, las=2)



par(mfrow=c(1,2))

barplot(freq, las=2)

pie(freq)


findAssocs(sentTdm,'text',0.5)



library(wordcloud)

par(bg="black")

set.seed(1)  ## word cloud가 돌릴 때마다 같은 결과가 나올 수 있도록 set.seed() 를 지정함

Freq<-sort(freq,decreasing=T)

wordcloud(words=names(Freq),freq=Freq,

random.order=F,colors=brewer.pal(12,"Set3"),min.freq=1)




#crude예제 풀어보기

library(tm)

data(crude)  ## 로이터Reuter 뉴스 기사 중 원유와 관련된 기사 20개가 저장된 데이터

summary(crude)   ##코퍼스의 요약 정보를 보여줌

inspect(crude[1])



sentCorpus<-Corpus(VectorSource(crude))   # 문자열로 만들어진 벡터 자료 sentences1 을 sentCorpus라는 corpus로 저장

sentCorpus                                     # sentCorpus를 치면 sentCorpus의 메타정보만 주고 corpus의 내용을 볼 수 없음



inspect(sentCorpus)


crudeCorpus<-tm_map(crude,content_transformer(tolower))

crudeCorpus<-tm_map(crudeCorpus,stripWhitespace)

crudeCorpus<-tm_map(crudeCorpus,removePunctuation)

crudeCorpus<-tm_map(crudeCorpus,removeNumbers)

crudeStopwords<-c(stopwords('english'),"reuter","will","also","said","one","last")

crudeCorpus<-tm_map(crudeCorpus,removeWords,crudeStopwords)

crudeCorpusCopy<-crudeCorpus

crudeCorpus<-tm_map(crudeCorpus,stemDocument)

crudeTdm<-TermDocumentMatrix(crudeCorpus,control=list(minWordLength=1))

crudeTdm


inspect(crudeTdm)


crudeMat<-as.matrix(crudeTdm)

crudeFreq<-sort(rowSums(crudeMat),decreasing=T)

d <- data.frame(word = names(crudeFreq),freq=crudeFreq)##crude에 대한 2차원 배열을 생성하고, 이것에 대한 데이터 d를 생성



library(wordcloud)

par(bg="black")

set.seed(1)

wordcloud(words=names(crudeFreq),freq=crudeFreq,random.order=F,colors=brewer.pal(12,"Set3"),min.freq=5)


오늘도 글 읽어주셔서 감사합니다.

+ Recent posts