Проблемы с запуском stm для тематического моделирования с одним ковариатом - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь запустить анализ моделирования LDA с помощью stm, но у меня есть проблемы с моими метаданными, кажется, что он работает нормально, но у меня есть ковариата (возраст), которая не читается, как показано в этом примере.

У меня есть несколько твитов (столбец документооборота в файле Excel) со значениями Ковариат возраста (молодые, старые).

Вот мои данные http://www.mediafire.com/file/5eb9qe6gbg22o9i/dada.xlsx/file

library(stm)
library(readxl)
library(quanteda)
library(stringr)
library(tm)


data <-  read_xlsx("C:/dada.xlsx") 

#Remove URL's 
data$docu <- str_replace_all(data$docu, "https://t.co/[a-z,A-Z,0-9]*","")


data$docu <- gsub("@\\w+", " ", data$docu)  # Remove user names (all proper names if you're wise!)

data$docu <- iconv(data$docu, to = "ASCII", sub = " ")  # Convert to basic ASCII text to avoid silly characters
data$docu <- gsub("#\\w+", " ", data$docu)

data$docu <- gsub("http.+ |http.+$", " ", data$docu)  # Remove links

data$docu <- gsub("[[:punct:]]", " ", data$docu)  # Remove punctuation)

data$docu<-  gsub("[\r\n]", "", data$docu)

data$docu <- tolower(data$docu)



#Remove Stopwords. "SMART" is in reference to english stopwords from the SMART information retrieval system and stopwords from other European Languages.
data$docu <- tm::removeWords(x = data$docu, c(stopwords(kind = "SMART")))

data$docu <- gsub(" +", " ", data$docu) # General spaces (should just do all whitespaces no?)

myCorpus <- corpus(data$docu)
docvars(myCorpus, "Age") <- as.factor(data$Age)


processed <- textProcessor(data$docu, metadata = data)

out <- prepDocuments(processed$documents, processed$vocab, processed$meta, lower.thresh = 2)

out$documents
out$meta
levels(out$meta)

First_STM <- stm(documents = out$documents, vocab = out$vocab,
                 K = 4, prevalence =~ Age ,
                 max.em.its = 25, data = out$meta,
                 init.type = "LDA", verbose = FALSE)

Какпоказанный в коде, который я пытался определить Age как фактор, я думаю, что это не нужно, потому что может быть достаточно запустить textProcessor, но, тем не менее, когда я запускаю levels(out$meta), я получаю значение NULL, поэтому когда я запускаю stmчтобы получить актуальные темы я получаю ошибку выделения памяти ..

1 Ответ

2 голосов
/ 07 марта 2019

В качестве множителя в этой строке вы установите метаварию Age

docvars(myCorpus, "Age") <- as.factor(data$Age)

Но вы больше не используете myCorpus.На следующих шагах вы используете ваш фрейм данных data для предварительной обработки.Попробуйте определить Age в кадре данных как фактор:

data$Age <- factor(data$Age)

, а затем использовать его непосредственно здесь

processed <- textProcessor(data$docu, metadata = data)

out <- prepDocuments(processed$documents, processed$vocab, processed$meta, lower.thresh = 2)

Затем вы можете посмотреть на уровни следующим образом:

levels(out$meta$Age)

Я не смог воспроизвести ошибку выделения памяти.STM отлично работает на моей машине (Win 10 Pro, 8 ГБ ОЗУ).

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