的ngram表示和距离矩阵中的R(ngram representation and distance

2019-09-30 20:06发布

假设我们有这样的数据:

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 

Answer 1:

你也可以使用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克与stringdist

# creates the total count of the 1-gram
qgrams(a, q = 1L)
   h m o a b c
V1 1 4 1 2 2 1

# create a named vector if you want a nice table
names(a) <- a
qgrams(a, .list = a, q = 1L)

#V1 is the total line
     h m o a b c
V1   1 4 1 2 2 1
ham  1 1 0 1 0 0
bamm 0 2 0 1 1 0
comb 0 1 1 0 1 1


Answer 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

然后,使用距离:

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


文章来源: ngram representation and distance matrix in R