我正在尝试使用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_col
,column_col
,这是一个错误,但出于兼容性原因,仅引发警告。该操作将返回输入 保持不变。
在GitHub上,我发现this issue应该已经修复了。
答案 0 :(得分:1)
我没有使用tidytext 0.1.9.900和R 3.5.0收到警告消息。
术语,行和列的数量的dtm相同。而且所有计数都是正确的。
tt$dimnames$Docs
和AssociatedPress$dimnames$Docs
的$ dimnames $ Docs之间确实存在差异。
这样做的原因是,如果在整理之前dtm中没有docid(与AssociatedPress一样),则整理函数会将AssociatedPress $ i分配给tidy_text(ap_td)中的文档变量。将其转换回dtm,将使用tidy_text data.frame(ap_td)中的文档值填充$ dimnames $ Docs。因此,最终,AssociatedPress $ i值将以tt $ 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
进行函数调用。