Корреляция текста с R - PullRequest
       23

Корреляция текста с R

2 голосов
/ 24 апреля 2020

Я работаю с DF, который содержит несколько строк с Text ID, Text Corpus и количеством слов в указанном корпусе. Это выглядит примерно так:

    ID                        Text     W_Count
Text_1         I love green apples           4
Text_2    I love yellow submarines           4
Text_3 Remember to buy some apples           5
Text_4               No match here           3

С этим DF я хочу вычислить количество слов, которые все строки имеют вместе друг с другом. Например, Text_1 и Text_2 имеют два общих слова, в то время как Text_1 и Text_3 имеют только одно.

Как только я получу это, мне нужно отобразить данные в матрице, подобной этой :

      ID Text_1 Text_2 Text_3 Text_4
Text_1      4      2      1      0
Text_2      2      4      0      0
Text_3      1      0      5      0
Text_4      0      0      0      3

Мне удалось сделать это только с двумя строками, например Text_1 и Text_2:

Text_1 = df[1, 2]
Text_2 = df[2, 2]
Text_1_split <- unlist(strsplit(Text_1, split =" "))
Text_2_split <- unlist(strsplit(Text_2, split =" "))
count = length(intersect(Text_1_split, Text_2_split))
count
[1] 2

Но я не знаю, как применить это систематически для всех строк, а затем отобразите нужную мне матрицу.

Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 24 апреля 2020

Возможно, вы ищете функцию vapply. Рассмотрим следующее:

vapply(df$ID, 
           function(x){
                sapply(df$ID, 
                       function(y){
                          x_split <- unlist(strsplit(df$Text[df$ID == x], split = " "))
                          y_split <- unlist(strsplit(df$Text[df$ID == y], split = " "))

                          return(length(intersect(x_split, y_split)))
                       })
            }, 
           integer(nrow(df)))

Функция vapply ("vector-apply") применяет функцию к ряду входных данных и возвращает вектор в форме третьего аргумента (в данном случае целое число длины равно длине вашего ввода данных.

...