r语言 - 术语文档矩阵的复杂结构



我对R很陌生,对不起,如果我的问题微不足道。我尝试使用文字云。函数 comparison.cloud 应该接受一个术语文档矩阵,其单词频率矩阵是这样构建的:

head(term.matrix,1)
Docs
Terms SOTU 2010 SOTU 2011
’ll         3         8
colnames(term.matrix)
[1] "SOTU 2010" "SOTU 2011"

我尝试自己构建这样的矩阵,但我很困惑为什么"术语"不被视为列名,为什么"文档"在两个列名称"SOTU 2010"和"SOTU 2011"之上......

有人可以解释一下吗?

矩阵的dimnames属性(如果不是NULL)是存储矩阵的行名和列名list(rownames, colnames)形式的列表。

x <- matrix(1:9, 3L, 3L)
x
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
dimnames(x) <- list(letters[1:3], LETTERS[1:3])
x
##   A B C
## a 1 4 7
## b 2 5 8
## c 3 6 9

有时,列表本身有名称很方便。这些名称的作用有点像轴标题:

names(dimnames(x)) <- c("lo", "UP")
x
##    UP
## lo  A B C
##   a 1 4 7
##   b 2 5 8
##   c 3 6 9

lo与列名打印在同一行上,但它实际上是第一维度的标题。同样,UP是第二个维度的标题。

TermDocumentMatrixDocumentTermMatrix对象不是真正的 R 矩阵。它们以三元组格式存储非零元素以提高效率,以及一些元数据。但是,与真正的 R 矩阵一样,它们可以具有dimnames属性。由于行和列表示术语和文档(反之亦然),因此 packagetm将名称TermsDocs分配给dimnames

vignette("tm")为例:

library("tm")
reut21578 <- system.file("texts", "crude", package = "tm")
reuters <- VCorpus(DirSource(reut21578, mode = "binary"), 
readerControl = list(reader = readReut21578XMLasPlain))
tdm <- TermDocumentMatrix(reuters)
str(tdm)
## List of 6
##  $ i       : int [1:2255] 14 35 49 157 202 203 233 274 290 291 ...
##  $ j       : int [1:2255] 1 1 1 1 1 1 1 1 1 1 ...
##  $ v       : num [1:2255] 1 1 1 1 1 1 1 1 1 1 ...
##  $ nrow    : int 1266
##  $ ncol    : int 20
##  $ dimnames:List of 2
##   ..$ Terms: chr [1:1266] "..." ""(it)" ""demand" ""expansion" ...
##   ..$ Docs : chr [1:20] "127" "144" "191" "194" ...
##  - attr(*, "class")= chr [1:2] "TermDocumentMatrix" "simple_triplet_matrix"
##  - attr(*, "weighting")= chr [1:2] "term frequency" "tf"

因此:

y <- as.matrix(tdm)[1:6, 1:6]
y
##             Docs
## Terms        127 144 191 194 211 236
##   ...          0   0   0   0   0   0
##   "(it)        0   0   0   0   0   0
##   "demand      0   1   0   0   0   0
##   "expansion   0   0   0   0   0   0
##   "for         0   0   0   0   0   0
##   "growth      0   0   0   0   0   0
dimnames(y)
## $Terms
## [1] "..."         ""(it)"      ""demand"    ""expansion" ""for"       ""growth"   
## 
## $Docs
## [1] "127" "144" "191" "194" "211" "236"

最新更新