Функция R для импорта текстовых данных в предварительно определенной матрице условий документа - PullRequest
0 голосов
/ 06 ноября 2019

Я импортировал некоторые текстовые данные относительно описания некоторых продуктов. Эти текстовые данные были преобразованы в корпус, предварительно обработали некоторые данные и, наконец, передали их в матрицу терминов документа (в виде фрейма данных) для создания модели CART. Вот код:

#Data load
o.data = read_excel("ML data.xlsx")

# Preparation
o.data$label = as.character(o.data$label)
corpus = Corpus(VectorSource(o.data$label))
corpus = tm_map(corpus, tolower)
corpus = tm_map(corpus, removePunctuation)
corpus_matrix = DocumentTermMatrix(corpus)
sparse = removeSparseTerms(corpus_matrix, 0.995)
m.data = as.data.frame(as.matrix(sparse))

После этого я загрузил ID и независимую переменную в набор данных DTM, разделил данные на набор для обучения и тестирования, построил модель и сделал хорошие прогнозы для набора тестирования с помощьюэтот код:

colnames(m.data) = make.names(colnames(m.data))
# Add independent variable (k101) & id variable
m.data$k101 = o.data$k101
m.data$id = o.data$id_new
split = sample.split(m.data, SplitRatio = 0.7)
m.data_train = subset(m.data, split==TRUE)
m.data_test = subset(m.data, split==FALSE)
CART_model_k101 = rpart(k101~., data=m.data_train, method="class")
#...and so on to the model evaluation etc.

Теперь проблема в том, что когда я пытаюсь импортировать новые текстовые данные, преобразовывать их в корпус и матрицу условий документа (как фрейм данных), я получаю другую матрицу DTM и поэтому не могу использоватьМоя ранее построенная модель для классификации новых текстовых данных. Вот код:

t.data = read_excel("new_text_data.xlsx")
corpus_test = Corpus(VectorSource(t.data$label_test))
corpus_test = tm_map(corpus_test, tolower)
corpus_test = tm_map(corpus_test, removePunctuation)
corpus_matrix_test = DocumentTermMatrix(corpus_test)
sparse_test = removeSparseTerms(corpus_matrix_test, 0.995)
corpus.test.data = as.data.frame(as.matrix(sparse_test))
corpus.test.data$k101_pvalue = predict(CART_model_k101, newdata=corpus.test.data)[,2]

После того, как я попытаюсь сделать прогноз для новых текстовых данных, используя модель, которая была построена с использованием DTM из предыдущих текстовых данных, я получаю сообщение об ошибке, где объект [' имя столбца '] не найден - он ищет точно такую ​​же структуру DTM (имена столбцов) в новом DTM при проверке данных.

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

Я прошу прощения за большое количество текста и объяснений и надеюсь, что есть решение для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...