R中的ngram表示和距离矩阵

时间:2018-03-13 09:22:49

标签: r sequence n-gram

假设我们有这些数据:

a <- c("ham","bamm","comb")

表示1克,这是上面列表的矩阵表示。

#  h a m b c o
#  1 1 1 0 0 0
#  0 1 2 1 0 0 
#  0 0 1 1 1 1

我知道table(strsplit(a,split = "")[i]) for i in 1:length(a)将为每个人提供分开的计数。但我不知道如何使用rbind将它们作为一个整体来制作,因为长度和列名称不同。

之后,我想使用欧几里德或曼哈顿距离来找到每个人的相似度矩阵:

#     ham  bamm comb  
# ham  0    3    5
# bamm 3    0    4
# comb 5    4    0 

2 个答案:

答案 0 :(得分:2)

你可以这样做:

s <- stack(setNames(strsplit(a,split=""),a))
m <- t(table(s))

> m
      values
ind    a b c h m o
  ham  1 0 0 1 1 0
  bamm 1 1 0 0 2 0
  comb 0 1 1 0 1 1

然后使用dist:

> as.matrix(dist(m,method='manhattan'))
     ham bamm comb
ham    0    3    5
bamm   3    0    4
comb   5    4    0

答案 1 :(得分:1)

您也可以使用"INTERNET","10.10.10.0/24","SCB-INET-A" 包。

stringdist

使用library(stringdist) a <- c("ham","bamm","comb") # stringdistmatrix with qgram calculations stringdistmatrix(a, a, method = 'qgram') [,1] [,2] [,3] [1,] 0 3 5 [2,] 3 0 4 [3,] 5 4 0

重新创建1-gram
stringdist