Я пытаюсь выяснить, есть ли более быстрый подход, чем gsub векторная функция в R. У меня есть следующий кадр данных с некоторыми "предложениями" (отправленными словами), а затем у меня есть слова для удаления из этих предложений (хранимых в переменной wordForRemoving).
sent <- data.frame(words =
c("just right size and i love this notebook", "benefits great laptop",
"wouldnt bad notebook", "very good quality", "bad orgtop but great",
"great improvement for that bad product but overall is not good",
"notebook is not good but i love batterytop"),
user = c(1,2,3,4,5,6,7),
stringsAsFactors=F)
wordsForRemoving <- c("great","improvement","love","great improvement","very good","good",
"right", "very","benefits", "extra","benefit","top","extraordinarily",
"extraordinary", "super","benefits super","good","benefits great",
"wouldnt bad")
Тогда я собираюсь создать симуляцию больших данных для вычисления потребления времени...
df.expanded <- as.data.frame(replicate(1000000,sent$words))
library(zoo)
sent <- coredata(sent)[rep(seq(nrow(sent)),1000000),]
rownames(sent) <- NULL
Использование следующего подхода gsub для удаления слов (wordsForRemoving) из отправленных $words занимает 72.87 сек. Я знаю, это не хорошая симуляция, но в реальности я использую словарный словарь с более чем 3.000 словами для 300 000 предложений, а общая обработка занимает более 1,5 часов.
pattern <- paste0("\\b(?:", paste(wordsForRemoving, collapse = "|"), ")\\b ?")
res <- gsub(pattern, "", sent$words)
# user system elapsed
# 72.87 0.05 73.79
Пожалуйста, может кто-нибудь помочь мне написать более быстрый подход для моей задачи. Любая помощь или совет очень оценены. Большое спасибо вперёд.