R tibble все слова сочинения строки - coocurences - bigram - dplyr - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть фрейм данных в этом формате:

df <- data.frame(names= c('perform data cleansing','information categorisation', ''))
                             names
1           perform data cleansing
2       information categorisation
3 write batch record documentation

И я хотел бы получить этот со всеми возможностями:

                             names           tokens1              tokens2
1           perform data cleansing           perform                 data
1           perform data cleansing              data            cleansing 
1           perform data cleansing         cleansing              perform
2       information categorisation       information       categorisation
3 write batch record documentation             write                batch
3 write batch record documentation             write               record
3 write batch record documentation             write        documentation 
3 write batch record documentation             batch               record 
3 write batch record documentation             batch        documentation 
3 write batch record documentation            record        documentation 

так, для n словв строке у вас будет n x (n-1) / 2 валют.

1 Ответ

0 голосов
/ 13 декабря 2018

Мы могли бы разделить «имена» по пробелам, циклически перебирая разделенные элементы list, получить комбинацию слов, выбирающих по два одновременно и unnest list

library(tidyverse)
df %>%
   mutate(tokens = strsplit(names, " ") %>%
                     map(~ .x %>%
                          combn(m = 2, simplify = FALSE))) %>%
   unnest

Если нам нужны два отдельных столбца «токенов», то мы paste combn начинаем слова вместе, затем unnest и separate «токены» на два столбца, разделяя их на разделитель, который былиспользуется для paste объединения вместе

df %>%
    mutate(tokens = strsplit(names, " ") %>%
                      map(~ .x %>%
                           combn(m = 2, FUN = function(x) 
                                paste(x[1], x[2], sep="-"), simplify = FALSE))) %>%
                                    unnest %>%
                                    unnest %>% 
                                    separate(tokens, into = c('tokens1', 'tokens2'))
#                               names     tokens1        tokens2
#1            perform data cleansing     perform           data
#2            perform data cleansing     perform      cleansing
#3            perform data cleansing        data      cleansing
#4        information categorisation information categorisation
#5  write batch record documentation       write          batch
#6  write batch record documentation       write         record
#7  write batch record documentation       write  documentation
#8  write batch record documentation       batch         record
#9  write batch record documentation       batch  documentation
#10 write batch record documentation      record  documentation

data

df <- structure(list(names = c("perform data cleansing", 
   "information categorisation", 
 "write batch record documentation")), class = "data.frame",
  row.names = c("1", "2", "3"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...