Вот решение tidy
для вашей проблемы.
Я использую tidytext
для nlp и widyr
для вычисления косинусного сходства между документами.
Примечание,Я превратил ваш оригинальный ss
вектор в tidy
фрейм данных со столбцом ID
.Вы можете сделать этот столбец любым, но это будет то, что мы используем в конце, чтобы показать сходство.
library(tidytext)
library(widyr)
# turn your original vector into a tibble with an ID column
ss <- c(
"ibm madrid limited research",
"madrid limited research",
"limited research",
"research",
"ee"
) %>% as.tibble() %>%
rowid_to_column("ID")
# create df of words & counts (tf-idf needs this)
ss_words <- ss %>%
unnest_tokens(words, value) %>%
count(ID, words, sort = TRUE)
# create tf-idf embeddings for your data
ss_tfidf <- ss_words %>%
bind_tf_idf(ID, words, n)
# return list of document similarity
ss_tfidf %>%
pairwise_similarity(ID, words, tf_idf, sort = TRUE)
Вывод для вышеупомянутого будет:
## A tibble: 12 x 3
# item1 item2 similarity
# <int> <int> <dbl>
# 1 3 2 0.640
# 2 2 3 0.640
# 3 4 3 0.6
# 4 3 4 0.6
# 5 2 1 0.545
# 6 1 2 0.545
# 7 4 2 0.384
# 8 2 4 0.384
# 9 3 1 0.349
#10 1 3 0.349
#11 4 1 0.210
#12 1 4 0.210
где item1
и item2
относятся к столбцу ID
, который мы создали ранее.
В этом ответе есть некоторые странные предостережения.Например, обратите внимание, я добавил токен ee
к вашему вектору ss
: сбой pairwise_similarity
произошел, когда был один документ с одним токеном.Странное поведение, но, надеюсь, это поможет вам.