如何将数据帧转换为DocumentTermMatrix?

问题描述 投票:0回答:1

我正在尝试使用tidytext将单词频率的变换转换为DocumentTermMatrix,但该函数似乎没有按预期工作。我从AssociatedPress开始,我知道它是一个documentTermMatrix,整理并将其抛回,但输出与原始矩阵不同。我究竟做错了什么?

library(topicmodels)
data(AssociatedPress)
ap_td <- tidy(AssociatedPress)
tt <- ap_td %>%
  cast_dtm(document, term, count)

当我施放$Docs时,元素ap_td不是-NULL但在AssociatedPress中它是NULL:str(tt)

List of 6
 $ i       : int [1:302031] 1 16 35 72 84 93 101 111 155 161 ...
 $ j       : int [1:302031] 1 1 1 1 1 1 1 1 1 1 ...
 $ v       : num [1:302031] 1 1 1 1 1 1 1 1 1 1 ...
 $ nrow    : int 2246
 $ ncol    : int 10473
 $ dimnames:List of 2
  ..$ Docs : chr [1:2246] "1" "2" "3" "4" ...
  ..$ Terms: chr [1:10473] "adding" "adult" "ago" "alcohol" ...
 - attr(*, "class")= chr [1:2] "DocumentTermMatrix" "simple_triplet_matrix"
 - attr(*, "weighting")= chr [1:2] "term frequency" "tf"

List of 6
 $ i       : int [1:302031] 1 1 1 1 1 1 1 1 1 1 ...
 $ j       : int [1:302031] 116 153 218 272 299 302 447 455 548 597 ...
 $ v       : num [1:302031] 1 2 1 1 1 1 2 1 1 1 ...
 $ nrow    : int 2246
 $ ncol    : int 10473
 $ dimnames:List of 2
  ..$ Docs : NULL
  ..$ Terms: chr [1:10473] "aaron" "abandon" "abandoned" "abandoning" ...
 - attr(*, "class")= chr [1:2] "DocumentTermMatrix" "simple_triplet_matrix"
 - attr(*, "weighting")= chr [1:2] "term frequency" "tf"

cast_dtm检索警告

警告消息:尝试为数据中找不到的变量计算distinct(): - row_colcolumn_col这是一个错误,但出于兼容性原因仅引发警告。该操作将返回输入不变。

在GitHub上,我发现this issue应该已经修复了。

r topic-modeling tidytext
1个回答
1
投票

我没有使用tidytext 0.1.9.900和R 3.5.0收到您的警告消息。

dtm对于术语,行和列的数量是相同的。所有的计数都是正确的。

差异确实在tt$dimnames$DocsAssociatedPress$dimnames$Docs的$ dimnames $ Docs之间。

这样做的原因是,如果在整理之前dtm中没有docid,就像AssociatedPress那样,整齐的函数将AssociatedPress $ i分配给tidy_text(ap_td)中的文档变量。将其转换回dtm,将使用tidy_text data.frame(ap_td)中的文档值填充$ dimnames $ Docs。因此,最终AssociatedPress $ i值最终会以$ dimnames $ Docs结尾。

您可以看到,如果您将美联社的$ i与来自tt的文档进行比较。

all.equal(unique(as.character(AssociatedPress$i)), unique(tt$dimnames$Docs))
[1] TRUE

或者从AssociatedPress到ap_td到tt的比较:

all.equal(unique(as.character(AssociatedPress$i)), unique(tt$dimnames$Docs), unique(ap_td))
[1] TRUE

如果你想自己遵循逻辑,你可以检查使用on the github page for the sparse_tidiers的所有功能。从tidy.DocumentTermMatrix开始,按照函数调用tidy.simple_triplet_matrix,最后到tidy_triplet

© www.soinside.com 2019 - 2024. All rights reserved.