【发布时间】:2020-07-09 11:19:10
【问题描述】:
我有一个包含诸如此类的字符串的数据框,其中一些是现有的英文单词,而另一些则不是:
df <- data.frame(
strings = c("'tis"," &%#@","aah", "notexistingword", "823942", "abaxile"))
现在我想通过将它们与GradyAugmented 等大型字典进行匹配来检查其中哪些是真实单词;
library(qdapDictionaries)
df$inGrady <- grepl(paste0("\\b(", paste(GradyAugmented[1:2500], collapse = "|"), ")\\b"), df$strings)
df
strings inGrady
1 'tis TRUE
2 &%#@ FALSE
3 aah TRUE
4 notexistingword FALSE
5 823942 FALSE
6 abaxile TRUE
不幸的是,只要我限制GradyAugmented 的大小,它就可以正常工作(它似乎不再起作用的截止点大约是2500 的大小)。当我使用 whole 字典时,我得到一个错误,断言有一个 invalid regular expression。我的预感是它不是正则表达式而是内存问题。如何解决这个问题?
【问题讨论】:
-
TRE 和 PCRE 都不支持太长的模式。不确定 ICU 是否会,您可以咨询
stringr::str_detect -
我认为与其有一个长模式参数 > 2500.. 它可能会更快,如果你这样做应该可以工作
pat <- paste0("\\b(", GradyAugmented[1:2500], ")\\b"); Reduce("|", lapply(pat, grepl, x = df$strings))
标签: r regex dictionary memory