我试图计算160个文档之间的余弦相似度(dfm_daten
),然后将它们导出为一对一的列表到Excel中。
代码。
cosdocpair <- textstat_simil(dfm_daten, method = "cosine", margin = "documents")
listcosdoc <- as.data.frame(cosdocpair, sorted = TRUE, diag = FALSE, upper = FALSE)
我明白了 upper = FALSE
应消除重复计算 (A,B)
和 (B,A)
,我想将其排除在外,但我生成的列表总是同时包含了 (A,B)
和 (B,A)
.
有什么想法,我在这里做错了什么?
**谢谢你,肯 这很奇怪。在你的例子中,它可以工作,但当我使用我的DFM时,由于某种原因,它不工作。下面是我的代码。
cosdocpair <- textstat_simil(dfm_daten, method = "cosine", margin = "documents")
liste <- as.data.frame(cosdocpair, sorted = TRUE, diag = FALSE, upper = FALSE)
liste[order(liste$cosine),]
然后前几行输出如下:
document1 document2 cosine
10792 8_mck_NY_8_yes.pdf 161_acn_2016_67_no.pdf 0.03571487
22169 161_acn_2016_67_no.pdf 8_mck_NY_8_yes.pdf 0.03571487
10787 75_dlt_2016_12_no.pdf 161_acn_2016_67_no.pdf 0.03879965
21374 161_acn_2016_67_no.pdf 75_dlt_2016_12_no.pdf 0.03879965
934 8_mck_NY_8_yes.pdf 103_acn_2018_9_yes.pdf 0.03975923
22107 103_acn_2018_9_yes.pdf 8_mck_NY_8_yes.pdf 0.03975923
这表明双倍计数仍然存在。
通过这些设置转换为data.frame,你将不会有A,B和B,A对,只有A,B。
示范。
library("quanteda")
## Package version: 2.0.1
dfm_daten <- dfm(c(
A = "a a b c c d",
B = "a d d b c",
C = "a a a c c"
))
cosdocpair <- textstat_simil(dfm_daten, method = "cosine", margin = "documents")
as.data.frame(cosdocpair, sorted = TRUE, diag = FALSE, upper = FALSE)
## document1 document2 cosine
## 1 A B 0.8366600
## 2 A C 0.8770580
## 3 B C 0.5241424