Так как я не знаю, с каким словарем вы работаете, вот описание в принципе вы можете go по этой задаче:
Данные:
df <- data.frame(Descriptions = c("cyber"," &%@","aah ingds.", "823942 blc"))
Допустим, вы работаете со словарем GradyAugmented
из library(qdapDictionaries)
, вы можете вставить слова в словарь вместе, разделяя их маркером чередования регулярных выражений |
, и использовать grepl
, который возвращает TRUE или ЛОЖЬ, чтобы проверить, содержатся ли слова словаря в какой-либо из df$Description
строк:
df$inDict <- grepl(paste0("\\b(", paste(GradyAugmented[1:100], collapse = "|"), ")\\b"), df$Descriptions)
Результат:
df
Descriptions inDict
1 cyber TRUE
2 &%@ FALSE
3 aah ingds. TRUE
4 823942 blc FALSE
Словарь может быть очень большим, и вы можете столкнуться с проблемы с памятью. В этом случае вы можете выбрать другой маршрут, через %in%
:
df$inDict <- lapply(strsplit(df$Descriptions, " "), function(x) x %in% GradyAugmented)
Здесь строки представляют собой списки:
df$inDict <- lapply(strsplit(df$Descriptions, " "), function(x) x %in% GradyAugmented)
df
Descriptions inDict
1 cyber TRUE
2 &%@ FALSE
3 aah ingds. TRUE, FALSE
4 823942 blc FALSE, FALSE
Надеюсь, это поможет.