2016-12-19 4 views
0

с паровым кодом Я пытаюсь найти tfidf для каждого термина для всех документов, которые у меня есть в csv (200 000 документов), а затем я хочу сделать один столбец csv, который он будет содержать каждый член с tfidf, в неубывающем. Я стараюсь сделать небольшой образец, и я думаю, что он работает. положить на большой CSV Rstudio все разрушительно .. любые идеи?tf: анализ текста idf в r

#read text converted to csv 
myfile3 <- "tweetsc.csv" 
x <- read.csv(myfile3, header = FALSE) 
#make data frame 
x <- data.frame(lapply(x, as.character), stringsAsFactors=FALSE) 
# make vector sources 
dd <- Corpus(DataframeSource(x)) 
# from tm package conculate tfidf 
xx <- as.matrix(DocumentTermMatrix(dd, control = list(weighting = weightTfIdf))) 
#data frame from columns to rows decreasing 
freq = data.frame(sort(colSums(as.matrix(xx)), decreasing=FALSE)) 
write.csv2(freq, "important_tweets.csv") 
+1

Добро пожаловать в SO. Вы можете улучшить свой вопрос. Пожалуйста, прочитайте [как предоставить минимальные воспроизводимые примеры в R] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example#answer-5963610). Затем отредактируйте и улучшите его соответствующим образом. Хорошая почта обычно обеспечивает минимальные входные данные, желаемые выходные данные и попытки кода - все операции копирования и вставки в новом/чистом сеансе R. Однако ваш код создает _ «не может открыть файл« tweetsc.csv »: нет такого файла или каталога», что не делает ваш пример воспроизводимым. – lukeA

+0

моя проблема находится на freq <- data.frame (sort (colSums (as.matrix (xx)), убывающий = FALSE)) У меня закончилось 16 гб оперативной памяти, процессор перегрелся и Rstudio сбой без ошибок. – PVoulg

ответ

1

Не принуждайте TDM к матрице. Это, скорее всего, вызовет проблему с переполнением целых чисел с таким количеством документов. Пакет tm использует пакет slam для представления tdm/dtm. Он имеет некоторые функции для выполнения операций со строками или столбцами без принуждения к плотной матрице.

library(slam) 
#read text converted to csv 
myfile3 <- "tweetsc.csv" 
x <- read.csv(myfile3, header = FALSE) 
#make data frame 
x <- data.frame(lapply(x, as.character), stringsAsFactors=FALSE) 
# make vector sources 
dd <- Corpus(DataframeSource(x)) 
# from tm package conculate tfidf 
xx <- DocumentTermMatrix(dd, control = list(weighting = weightTfIdf)) 
#data frame from columns to rows decreasing 
freq = as.data.frame(sort(col_sums(xx), decreasing=FALSE) 
write.csv2(freq, "important_tweets.csv") 

Одно замечание: вы говорите, вы хотите вычислить «каждый член с его tfidf ...» tfidf специфичен для каждого термина в каждом документе. Суммирование tf-idf может не иметь значимой меры, поскольку оно затушевывает вес этого термина в данном документе.