【发布时间】:2015-05-30 04:50:41
【问题描述】:
我正在尝试找出是否有比 R 中的 gsub 矢量化函数更快的方法。我有以下带有一些“句子”(sent$words)的数据框,然后我有单词从这些句子中删除(存储在 wordsForRemoving 变量中)。
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 方法从 sent$words 中删除单词 (wordsForRemoving) 需要 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
请,任何人都可以帮助我为我的任务编写更快的方法。非常感谢任何帮助或建议。非常感谢转发。
【问题讨论】:
-
通过使用
stringi::stri_replace_all_regex(sent$words, pattern, ""),您将获得一些改进(在我尝试过的示例中为 60%,其复制量减少了)