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
네이티브 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
여기 접근법 그러나 다시 왜 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
DF 컬럼에'rowSums'를 사용하십시오. –
'tm' 패키지에서 소스 코드를보고 다시 작성할 수 있습니다 ... 왜 쉽게 사용할 수있는 도구를 사용하고 싶지 않습니까? – Justin
이미 거기에있는 함수의 소스 코드를 살펴 보겠습니다. – David