R中2个DTM的余弦相似度
Cosine similarity of 2 DTMs in R
我有 2 个文档术语矩阵:
- DTM 1 有 1000 个向量(1000 个文档)和
- DTM2 有 20 个向量(20 个文档)
所以基本上我想将 DTM1 的每个文档与 DTM2 进行比较,并希望使用余弦函数查看哪些 DTM1 文档最接近哪些 DTM2 文档。任何指针都会有所帮助!
我使用 "slam" 包创建了一个余弦矩阵。
Docs –glyma –ie –initi –stafford ‘bureaucratic’ ‘empti ‘holi ‘incontrovert
1 0.000000 0 0.000000 0.000000 0.000000 0 0 0
2 0.000000 0 0.000000 0.000000 0.000000 0 0 0
3 0.000000 0 0.000000 0.000000 0.000000 0 0 0
4 0.000000 0 0.000000 0.000000 0.000000 0 0 0
5 0.000000 0 0.000000 0.000000 0.000000 0 0 0
6 0.000000 0 0.000000 0.000000 4.906891 0 0 0
7 0.000000 0 0.000000 4.906891 0.000000 0 0 0
8 0.000000 0 0.000000 0.000000 0.000000 0 0 0
9 0.000000 0 4.906891 0.000000 0.000000 0 0 0
10 4.906891 0 0.000000 0.000000 0.000000 0 0 0
余弦函数结果为:
但是,此矩阵将 DTM1 的文档相互比较。我希望将这些向量与 DTM2 的向量进行比较,然后为给定的 DTM1 文档找到最接近的 DTM2 文档。
这是一种计算两个矩阵之间的余弦距离的方法。 tm 的使用仅用于数据目的...
library(slam)
library(tm)
data("acq")
data("crude")
dtm <- DocumentTermMatrix(c(acq, crude))
index <- sample(1:70, size = 10)
dtm1 <- dtm[index, ]
dtm2 <- dtm[-index, ]
cosine_sim <- tcrossprod_simple_triplet_matrix(dtm1, dtm2)/sqrt(row_sums(dtm1^2) %*% t(row_sums(dtm2^2)))
余弦函数改编自此 SO post:
我有 2 个文档术语矩阵:
- DTM 1 有 1000 个向量(1000 个文档)和
- DTM2 有 20 个向量(20 个文档)
所以基本上我想将 DTM1 的每个文档与 DTM2 进行比较,并希望使用余弦函数查看哪些 DTM1 文档最接近哪些 DTM2 文档。任何指针都会有所帮助!
我使用 "slam" 包创建了一个余弦矩阵。
Docs –glyma –ie –initi –stafford ‘bureaucratic’ ‘empti ‘holi ‘incontrovert
1 0.000000 0 0.000000 0.000000 0.000000 0 0 0
2 0.000000 0 0.000000 0.000000 0.000000 0 0 0
3 0.000000 0 0.000000 0.000000 0.000000 0 0 0
4 0.000000 0 0.000000 0.000000 0.000000 0 0 0
5 0.000000 0 0.000000 0.000000 0.000000 0 0 0
6 0.000000 0 0.000000 0.000000 4.906891 0 0 0
7 0.000000 0 0.000000 4.906891 0.000000 0 0 0
8 0.000000 0 0.000000 0.000000 0.000000 0 0 0
9 0.000000 0 4.906891 0.000000 0.000000 0 0 0
10 4.906891 0 0.000000 0.000000 0.000000 0 0 0
余弦函数结果为:
但是,此矩阵将 DTM1 的文档相互比较。我希望将这些向量与 DTM2 的向量进行比较,然后为给定的 DTM1 文档找到最接近的 DTM2 文档。
这是一种计算两个矩阵之间的余弦距离的方法。 tm 的使用仅用于数据目的...
library(slam)
library(tm)
data("acq")
data("crude")
dtm <- DocumentTermMatrix(c(acq, crude))
index <- sample(1:70, size = 10)
dtm1 <- dtm[index, ]
dtm2 <- dtm[-index, ]
cosine_sim <- tcrossprod_simple_triplet_matrix(dtm1, dtm2)/sqrt(row_sums(dtm1^2) %*% t(row_sums(dtm2^2)))
余弦函数改编自此 SO post: