데이터 준비

    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은 팩터로 잘 저장되어 있는 것을 알 수 있다.

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