2013-10-25 6 views
1

네이티브 R을 사용하여 문서 용어 행렬을 만들고 싶습니다 (tm과 같은 추가 플러그인 없음).네이티브를 사용하여 문서 용어 행렬을 만드는 방법 R

  Term Doc1 Doc2 Doc3 Doc4 Doc5 DF 
1   all 0 0 0 0 1 1 
2   did 0 1 0 1 0 2 
3  exam 0 2 1 1 1 4 
4  passed 0 0 0 0 1 1 
+3

'tm' 패키지에서 소스 코드를보고 다시 작성할 수 있습니다 ... 왜 쉽게 사용할 수있는 도구를 사용하고 싶지 않습니까? – Justin

+2

이미 거기에있는 함수의 소스 코드를 살펴 보겠습니다. – David

답변

1

여기 접근법 그러나 다시 왜 TM 패키지를 사용하지 :

Doc1: the test was to test the test 
Doc2: we did prepare the exam to test the exam 
Doc3: was the test the exam 
Doc4: the exam we did prepare was to test the test 
Doc5: we were successful so we all passed the exam 

내가 뭘 도달하고자하는 것은 다음과 같다 : 다음과 같이 데이터가 구성되어있다?

## Your data 
## dat <- structure(list(person = structure(1:5, .Label = c("Doc1", "Doc2", 
##  "Doc3", "Doc4", "Doc5"), class = "factor"), 
##  text = c("the test was to test the test", 
##  "we did prepare the exam to test the exam", "was the test the exam", 
##  "the exam we did prepare was to test the test", 
##  "we were successful so we all passed the exam" 
## )), .Names = c("doc", "text"), class = "data.frame", row.names = c(NA, 
##  -5L)) 

## Function to turn list of vects into sparse matrix 
mtabulate <- function(vects) { 
    lev <- sort(unique(unlist(vects))) 
    dat <- do.call(rbind, lapply(vects, function(x, lev){ 
     tabulate(factor(x, levels = lev, ordered = TRUE), 
     nbins = length(lev))}, lev = lev)) 
    colnames(dat) <- sort(lev) 
    data.frame(dat, check.names = FALSE) 
} 


out <- lapply(split(dat$text, dat$doc), function(x) { 
    unlist(strsplit(tolower(x), " ")) 
}) 

t(mtabulate(out)) 

##   Doc1 Doc2 Doc3 Doc4 Doc5 
## all   0 0 0 0 1 
## did   0 1 0 1 0 
## exam   0 2 1 1 1 
## passed  0 0 0 0 1 
## prepare  0 1 0 1 0 
## so   0 0 0 0 1 
## successful 0 0 0 0 1 
## test   3 1 1 2 0 
## the   2 2 2 2 1 
## to   1 1 0 1 0 
## was   1 0 1 1 0 
## we   0 1 0 1 2 
## were   0 0 0 0 1 
+0

DF 컬럼에'rowSums'를 사용하십시오. –

관련 문제