在R中具有字符n-gram的分层聚类

时间:2017-08-28 21:00:41

标签: r text-mining hierarchical-clustering n-gram

我有七个文本,我想看看它们是如何(dis)在字符三元组的基础上相似的。

我从每个文本中提取了所有字符三元组。所以我有七个这样的矢量:

text1 <- ("aaa", "abc", "bce", "cef", "efg", ...)
text2 <- ("aaa", "abc", "dce", "lmm", ...)

如何比较每个文本中共享三元组的百分比?

是否有为标志三元组创建距离矩阵的标准方法?

1 个答案:

答案 0 :(得分:3)

可重复数据

t1 <- letters[1:10]
t2 <- letters[1:9]
t3 <- letters[1:8]
t4 <- letters[1:7]

碱R溶液

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