我有2个文档术语矩阵:
所以基本上我想将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文档。
答案 0 :(得分:2)
这是一种计算两个矩阵之间余弦距离的方法。使用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帖子:R: Calculate cosine distance from a term-document matrix with tm and proxy