Сопоставление нескольких слов среди строк и создание матрицы для отображения ответа - PullRequest
0 голосов
/ 13 июня 2018

У меня есть файл с 5 отзывами.Следующее:

text <- c("Orange is the new black", " I love smoking Marlboro black",
    "I love oranges before they go black", "My diary is black, so is my hair",
    "Is it okay to drink and smoke black")

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

Решение будет выглядеть примерно так:таблица / матрица с 5 столбцами и 5 строками, имеющими 25 элементов.Его диагональный элемент будет равен 0.

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

Это всего лишь тестовый прогон, на самом деле мне нужно сделать матрицу из 100 строк и 100 столбцов.

1 Ответ

0 голосов
/ 13 июня 2018

Может быть, что-то вроде этого

all_words <- stringr::str_extract_all(text, "\\w+")
I <- expand.grid(seq_along(text), seq_along(text))
L <- map2(I$Var1, I$Var2, ~paste(intersect(all_words[[.x]], all_words[[.y]]), collapse="|"))
mat <- matrix(L, nrow=5)
diag(mat) <- NA
mat

     # [,1]       [,2]           [,3]           [,4]       [,5]   
# [1,] NA         "black"        "black"        "is|black" "black"
# [2,] "black"    NA             "I|love|black" "black"    "black"
# [3,] "black"    "I|love|black" NA             "black"    "black"
# [4,] "is|black" "black"        "black"        NA         "black"
# [5,] "black"    "black"        "black"        "black"    NA  

Для подсчета общих слов выполните

L <- map2(I$Var1, I$Var2, ~length(intersect(all_words[[.x]], all_words[[.y]])))
mat <- matrix(L, nrow=5)
diag(mat) <- NA
mat

     # [,1] [,2] [,3] [,4] [,5]
# [1,] NA   1    1    2    1   
# [2,] 1    NA   3    1    1   
# [3,] 1    3    NA   1    1   
# [4,] 2    1    1    NA   1   
# [5,] 1    1    1    1    NA  
...