Как подмножество матрицы терминов документа для обучения

#r #nlp #corpus

#r #nlp #corpus

Вопрос:

У меня есть матрица терминов документа, которую я хотел бы разделить на две, один набор для обучения, а другой для тестирования.

Я попробовал приведенный ниже код:

 library(tm)

text.vector <- c("The quick brown dog",
"jumped over",
"the lazy fox",
"How now brown cow",
"The cow jumped over the moon")

text.corpus <- VCorpus(VectorSource(text.vector))
text.dtm <- DocumentTermMatrix(text.corpus)

set.seed(123)
train.vector <- sample(5,2,replace=F)
train.vector

train.boolean <- text.dtm$i %in% train.vector
train.boolean

text_train.dtm <- text.dtm[train.boolean,]
text_test.dtm <- text.dtm[!train.boolean,]

table(text.dtm$i)
table(text_train.dtm$i)
table(text_test.dtm$i)

text.dtm
text_train.dtm
text_test.dtm
  

Фактические результаты таковы:

 > table(text.dtm$i)

1 2 3 4 5 
4 2 3 4 5 
> table(text_train.dtm$i)

1 
5 
> table(text_test.dtm$i)

1 2 3 4 
4 2 3 4 
  

Мои ожидаемые результаты — обучающая матрица с двумя документами (# 2 и # 4) и тестовая матрица из трех документов (# 1, # 3 и # 5):

 > table(text.dtm$i)

1 2 3 4 5 
4 2 3 4 5 
> table(text_train.dtm$i)

2 4 
2 4
> table(text_test.dtm$i)

1 3 5 
4 3 5 
  

Кто-нибудь может помочь мне понять, почему это не работает? Спасибо.

Ответ №1:

Вы можете упростить свой код и просто подмножить информацию о местоположении в dtm $ dimnames $Documents

Надеюсь, это поможет:

 set.seed(123)
train.vector <- sample(5,2,replace=F)
train.vector

text_train.dtm <- text.dtm[text.dtm$dimnames$Docs %in% train.vector,]
text_test.dtm <- text.dtm[!(text.dtm$dimnames$Docs %in% train.vector),]

table(text.dtm$i)
1 2 3 4 5 
4 2 3 4 5 

table(text_train.dtm$i)
1 2 
2 4

table(text_test.dtm$i)
1 2 3 
4 3 5