R中的ngram表示与距离矩阵

R中的ngram表示与距离矩阵,r,sequence,n-gram,R,Sequence,N Gram,假设我们有以下数据: a <- c("ham","bamm","comb") 我知道表(strsplit(a,split=“”)[I])中的I:length(a)将给出它们各自的独立计数。但我不知道如何使用rbind将它们作为一个整体,因为长度和列名不同 之后,我想使用欧几里德距离或曼哈顿距离来找到它们的相似性矩阵,如下所示: # ham bamm comb # ham 0 3 5 # bamm 3 0 4 # comb 5 4 0

假设我们有以下数据:

a <- c("ham","bamm","comb")
我知道
表(strsplit(a,split=“”)[I])中的I:length(a)
将给出它们各自的独立计数。但我不知道如何使用
rbind
将它们作为一个整体,因为长度和列名不同

之后,我想使用欧几里德距离或曼哈顿距离来找到它们的相似性矩阵,如下所示:

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

您可以这样做:

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

您还可以使用
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

q-gram和n-gram是一样的吗?它是一种可以通过两种方式调用的方法吗?@Hadij将
q=1L
更改为
q=nL
,其中n是您希望拥有的一行中的字母数。这与文本挖掘中的n-gram不同,文本挖掘中有n个单词gram。
> as.matrix(dist(m,method='manhattan'))
     ham bamm comb
ham    0    3    5
bamm   3    0    4
comb   5    4    0
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
# 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