안녕하세요 구도입니다.
오늘도 지난 시간에 이어 텍스트마이닝 실습을 진행해보는 시간을 갖도록 하겠습니다.
프로그램 실행하셔서 직접 실습해보시며 이해하시는 것이 가장 효과적이랍니다.
*프로그램은 '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)
오늘도 글 읽어주셔서 감사합니다.