Сопоставление нескольких слов среди строк и создание матрицы для отображения ответа
У меня есть файл с 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 X 5, которая говорит мне, какие слова являются общими для двух разных обзоров.
Решение будет выглядеть как таблица / матрица с 5 столбцами и 5 строками, имеющими 25 элементов. Это диагональный элемент будет 0.
Теперь у меня есть основная идея интеллектуального анализа текста. Но как я должен сделать эту конкретную задачу.
Это всего лишь тестовый прогон, на самом деле мне нужно сделать матрицу из 100 строк и 100 столбцов.
1 ответ
Может как то так
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