Я пытаюсь удалить стоп-слова из большого фрейма данных в R (12M строк). Я попытался выполнить его для фрейма данных 30k строк, и он отлично работает (это делается в течение 2 минут). Для фрейма данных 300k строк это занимает слишком много времени (около 4 часов), но мне нужно выполнить его для Фрейм данных длиной 12 м, я просто хочу знать, есть ли другой способ сделать это (возможно, цикл вызывает замедление)
Функция trait_text определена в области кода
и removeWords - это предопределенная функция R, которая удаляет стоп-слова из varchar.
Еще один вопрос в том же контексте:
Нужно ли мигрировать на 64-битную RStudio? потому что 32-разрядная версия не использует всю оперативную память, доступную на компьютере.
#define stopwords
stop<-c("MONSIEUR","MADAME","MR","MME","M","SARL","SA","EARL","EURL","SCI","SAS","ETS","STE","SARLU", "SASU","CFA","ATS","GAEC","COMMUNE","SOCIETE",toupper(stopwords::stopwords("fr", source = "snowball")))
##trait text :
#Remove Multiple spaces
del_multispace = function(text) {
return(text <- gsub("\\s+", " ", text))
}
#Remove Ponctuation
del_punctuation = function(text) {
text <- gsub("[[:punct:]]", "", text)
}
#Remove accents
del_accent = function(text) {
text <- gsub("['`^~\"]", " ", text)
text <- iconv(text, from = "UTF-8", to = "ASCII//TRANSLIT//IGNORE")
text <- gsub("['`^~\"]", "", text)
return(text)
}
trait_text=function(text) {
text = del_multispace(text)
text = del_punctuation(text)
text = del_accent(text)
}
#remove stopwords for data :
system.time(for (i in 1:nrow(test_data)) {
print(paste("client n: ",i))
x<-removeWords(trait_text(test_data$ref[i]),stop)
#output
test_data$ref[i]<-gdata::trim(paste(x, collapse = ' '))
})
Sample test_data with desired output :
ref ouptut
1 |"LE LA ONE" | "ONE"
2 |"SAS TWO" | "TWO"
3 |"MR THREE" | "THREE"