더북(TheBook)

데이터 준비

crude 토픽의 문서와 acq 토픽의 문서는 각각 같은 이름의 코퍼스에 저장되어 있다. 따라서 이들을 하나로 합친 뒤 합쳐진 데이터에 대해 분류를 시도할 것이다.

아래 코드는 DocumentTermMatrix( )를 사용하여 crude, acq를 문서-단어 행렬로 만든 뒤 합친다. 그 다음 이를 행렬, 데이터 프레임으로 변환해나가면서 LABEL 컬럼에 crude, acq 레이블을 붙이면 모델링에 적합한 형태가 된다.

> data(crude)
> data(acq)
> to_dtm <- function(corpus, label) {
+   x <- tm_map(corpus, tolower)
+   x <- tm_map(corpus, removePunctuation)
+   return(DocumentTermMatrix(x))
+ }
> crude_acq <- c(to_dtm(crude), to_dtm(acq))
> crude_acq_df <- cbind(
+   as.data.frame(as.matrix(crude_acq)),
+   LABEL=c(rep("crude", 20), rep("acq", 50)))

위 코드에서 DocumentTermMatrix( )를 만들기 전에 tolower를 적용했으므로 LABEL이라는 컬럼 이름은 문서 내 존재하던 단어들과 중복될 염려가 없다.

적절한 데이터 타입이 잘 부여되었는지를 확인하기 위해 str( )로 crude_acq_df를 살펴보자.

> str(crude_acq_df)
'data.frame': 70 obs. of 2373 variables:
 $ 150                 : num  1 0 0 0 0 0 0 0 0 0 ...
 $ 1600                : num  1 0 0 0 0 0 0 0 0 0 ...
 $ and                 : num  1 9 0 1 2 7 11 3 9 6 ...
 $ barrel              : num  2 0 1 1 0 3 0 0 0 2 ...
 $ brings              : num  1 0 1 1 0 0 0 0 0 0 ...
 $ citing              : num  1 0 0 0 0 0 0 0 0 0 ...
 ...
> str(crude_acq_df$LABEL)
Factor w/ 2 levels "acq","crude": 2 2 2 2 2 2 2 2 2 2 ...
> str(crude_acq_df$LABEL[21:30])
Factor w/ 2 levels "acq","crude": 1 1 1 1 1 1 1 1 1 1

이 결과를 보면 각 단어에 단어 출현 횟수가 숫자로 저장되어 있고, 각 문서의 분류를 나타내는 LABEL은 팩터로 잘 저장되어 있는 것을 알 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.