В DocumentTermMatrix должна быть указана ошибка частотного взвешивания термина.

Я пытаюсь использовать LDA() из пакета топиков для довольно большого набора данных. Попробовав все, чтобы исправить следующие ошибки «In nr * nc: NAs, созданные целочисленным переполнением» и «Каждая строка входной матрицы должна содержать хотя бы одну ненулевую запись», я получил эту ошибку.

ask<- read.csv('askreddit201508.csv', stringsAsFactors = F)    
myDtm <- create_matrix(as.vector(ask$title), language="english", removeNumbers=TRUE, stemWords=TRUE, weighting=weightTf)
myDtm2 = removeSparseTerms(myDtm,0.99999)
myDtm2 <- rollup(myDtm2, 2, na.rm=TRUE, FUN = sum)
rowTotals <- apply(myDtm2 , 1, sum)
myDtm2   <- myDtm2[rowTotals> 0, ]  
LDA2 <- LDA(myDtm2,100)

Error in LDA(myDtm2, 100) : 
  The DocumentTermMatrix needs to have a term frequency weighting

person user1569341    schedule 18.11.2015    source источник


Ответы (2)


Часть проблемы заключается в том, что вы взвешиваете матрицу терминов документа с помощью tf-idf, но LDA требует количество терминов. Кроме того, этот метод удаления разреженных терминов создает некоторые документы, из которых удалены все термины.

С помощью пакета quanteda проще перейти от текста к моделям темы. Вот как:

require(quanteda)
myCorpus <- corpus(textfile("http://homepage.stat.uiowa.edu/~thanhtran/askreddit201508.csv",
                            textField = "title"))
myDfm <- dfm(myCorpus, stem = TRUE)
## Creating a dfm from a corpus ...
##    ... lowercasing
##    ... tokenizing
##    ... indexing documents: 160,707 documents
##    ... indexing features: 39,505 feature types
##    ... stemming features (English), trimmed 12563 feature variants
##    ... created a 160707 x 26942 sparse dfm
##    ... complete. 

# remove infrequent terms: see http://stats.stackexchange.com/questions/160539/is-this-interpretation-of-sparsity-accurate/160599#160599
sparsityThreshold <- round(ndoc(myDfm) * (1 - 0.99999))
myDfm2 <- trim(myDfm, minDoc = sparsityThreshold)
## Features occurring in fewer than 1.60707 documents: 12579
nfeature(myDfm2)
## [1] 14363

# fit the LDA model
require(topicmodels)
LDA2 <- LDA(quantedaformat2dtm(myDfm2), 100)
person Ken Benoit    schedule 18.11.2015
comment
Я думал, что поставил weighting=weightTf, чтобы сделать его частотным вместо tf-idf. Я думал, что rollup() не работает. Но если бы я удалил накопитель, я бы получил другую ошибку. Но Quanteda определенно отлично работает для меня. Спасибо . - person user1569341; 19.11.2015

all.dtm ‹- DocumentTermMatrix(корпус, управление = список(взвешивание=weightTf)) ; осмотреть (все.dtm)

tpc.mdl.LDA ‹- LDA(all.dtm ,k=количество.тем)

person Seyma Kalay    schedule 07.01.2019
comment
Попробуйте добавить обратные кавычки `, чтобы форматировать код в ответах ???? - person Karl Taylor; 07.01.2019