Вот решение Q1 в несколько шагов:
Шаг 1: очистите данные, удалив все, что не является буквенно-цифровым c (\\W
):
data2 <- trimws(paste0(gsub("\\W+", " ", data), collapse = ""))
Шаг 2 : Составьте отсортированный список частот слов:
fw <- as.data.frame(sort(table(strsplit(data2, "\\s{1,}")), decreasing = T))
Шаг 3: определите шаблон для сопоставления (а именно все слова, которые встречаются только один раз), убедитесь, что вы заключили их в маркеры положения границы (\\b
), чтобы сопоставлялись только точные совпадения (например, network
, но не networking
):
pattern <- paste0("\\b(", paste0(fw$Var1[fw$Freq==1], collapse = "|"), ")\\b")
Шаг 4: удалите совпавшие слова:
data3 <- gsub(pattern, "", data2)
Шаг 5: очистить, удалив лишние пробелы:
data4 <- trimws(gsub("\\s{1,}", " ", data3))
Результат:
[1] "stormfront introduction white networking site decided networking site white brothers stormfront introduction stormfront stormfront main board forums forums articles stormfront stormfront stormfront local local stormfront stormfront main board groups networking member member site online online stormfront time time forums groups site articles main site decided time site white brothers jay member stormfront jay"