我有七个文本,我想看看它们是如何(dis)在字符三元组的基础上相似的。
我从每个文本中提取了所有字符三元组。所以我有七个这样的矢量:
text1 <- ("aaa", "abc", "bce", "cef", "efg", ...)
text2 <- ("aaa", "abc", "dce", "lmm", ...)
等
如何比较每个文本中共享三元组的百分比?
是否有为标志三元组创建距离矩阵的标准方法?
答案 0 :(得分:3)
t1 <- letters[1:10]
t2 <- letters[1:9]
t3 <- letters[1:8]
t4 <- letters[1:7]
maxval <- 4 # number of trigram vectors
all.combs <- expand.grid(1:maxval, 1:maxval) %>% setNames(c("A","B")) # makes all combinations, including self <-> self comparison
以下计算向量之间intersect
的长度,并为所有成对向量组合按max(length(v1), length(v2))
除以
P <- sapply(1:nrow(all.combs), function(x) length(intersect(get(paste0("t", all.combs$A[x])), get(paste0("t", all.combs$B[x])))) / max(length(get(paste0("t", all.combs$A[x]))), length(get(paste0("t", all.combs$B[x])))))
转换为矩阵
M <- matrix(P, ncol=maxval)
[,1] [,2] [,3] [,4]
[1,] 1.0 0.9000000 0.8000000 0.7000000
[2,] 0.9 1.0000000 0.8888889 0.7777778
[3,] 0.8 0.8888889 1.0000000 0.8750000
[4,] 0.7 0.7777778 0.8750000 1.0000000