Любая из сред обработки естественного языка может сделать это довольно легко. Мне нравится tidytext
для простых вещей, как это. Есть более быстрые в вычислительном отношении, но это довольно просто.
library(tidytext)
library(dplyr)
library(tidyr)
OriginalVector <- c("Nimble red fox", "Lazy Grey Dog", "Red Fox funny")
df <- tibble(id = seq_along(OriginalVector), text = OriginalVector)
df %>%
unnest_tokens(word, text) %>%
count(id, word) %>%
pivot_wider(id_cols = id, names_from = word, values_from = n, values_fill = list(n = 0)) %>%
select(-id)
# A tibble: 3 x 7
fox nimble red dog grey lazy funny
<int> <int> <int> <int> <int> <int> <int>
1 1 1 1 0 0 0 0
2 0 0 0 1 1 1 0
3 1 0 1 0 0 0 1
Вы также можете выйти из рамки раньше и просто использовать table
.
table(unnest_tokens(df, word, text))
word
id dog fox funny grey lazy nimble red
1 0 1 0 0 0 1 1
2 1 0 0 1 1 0 0
3 0 1 1 0 0 0 1
Обратите внимание, что unnest_tokens()
имеет опцию to_lower = TRUE
по умолчанию. Вы можете изменить это на FALSE
, если вы этого не хотите.