Это может быть излишним, но должно работать достаточно быстро с большими данными.
Шаги:
- Создать матрицу элементов документа с помощью
quanteda
- Выполнение умножения матриц
library(quanteda)
library(dplyr)
a <- c('tom','john','phil')
b <- c('phil','leo','james')
d <- c('tom','john', 'dan')
feature_matrix <- list(a, b, d) %>% as.tokens %>% dfm
feature_matrix
#> Document-feature matrix of: 3 documents, 6 features (50.0% sparse).
#> features
#> docs tom john phil leo james dan
#> text1 1 1 1 0 0 0
#> text2 0 0 1 1 1 0
#> text3 1 1 0 0 0 1
feature_matrix %*% t(feature_matrix)
#> 3 x 3 sparse Matrix of class "dgCMatrix"
#> text1 text2 text3
#> text1 3 1 2
#> text2 1 3 .
#> text3 2 . 3
Создано в 2020-05-04 пакетом Представить (v0.3.0)
Последний шаг, чтобы получить точно такой же результат:
library(Matrix)
feature_matrix %*% t(feature_matrix) %>% tril() %>% as.matrix()
#> text1 text2 text3
#> text1 3 0 0
#> text2 1 3 0
#> text3 2 0 3