量子化计算文件相似度时,如何排除重复计算?

问题描述 投票:0回答:1

我试图计算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

这表明双倍计数仍然存在。

cosine-similarity quanteda
1个回答
1
投票

通过这些设置转换为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
© www.soinside.com 2019 - 2024. All rights reserved.