Вы можете сделать это, заменив интересующие вас биграммы составным текстом в тексте перед токенизацией (т. Е. unnest_tokens
):
keepbigram_new <- stringi::stri_replace_all_regex(keepbigram, "\\s+", "_")
keepbigram_new
#> [1] "of_the" "to_be" "in_the" "it_was" "i_am" "she_had"
#> [7] "of_her" "to_the" "she_was" "had_been"
Использование _
вместо пробела является обычной практикой. за это. stringi::stri_replace_all_regex
почти такой же, как gsub
или str_replace
из stringr
, но немного быстрее и с большим количеством функций.
Теперь замените биграммы в тексте этими новыми соединениями перед токенизацией. Я использую регулярные выражения границы слова (\\b
) в начале и конце биграмм, чтобы случайно не захватить, например, " из m":
topwords <- austen_books() %>%
mutate(text = stringi::stri_replace_all_regex(text, paste0("\\b", keepbigram, "\\b"), keepbigram_new, vectorize_all = FALSE)) %>%
unnest_tokens(output = word, input = text) %>%
count(word, sort = TRUE) %>%
mutate(rank = seq_along(word))
Глядя на большинство общие слова, первый биграмм появляется теперь на 40-м ранге:
topwords %>%
slice(1:4, 39:41)
#> # A tibble: 7 x 3
#> word n rank
#> <chr> <int> <int>
#> 1 and 22515 1
#> 2 to 20152 2
#> 3 the 20072 3
#> 4 of 16984 4
#> 5 they 2983 39
#> 6 of_the 2833 40
#> 7 from 2795 41