保留从转换过程中删除的行

Keep removed rows from a convert process

来自这个命令

quant_stm <- convert(tDfm, to = "stm")

我收到一条警告信息 警告信息:

In dfm2stm(x, docvars, omit_empty = TRUE) :
  Dropped empty document(s): g_32, m_21, g_32, [... truncated]

有什么方法可以将此警告消息的值保存在数据框中吗?

不是我能弄清楚。为什么?因为stm的“文档”输入的数据结构没有办法记录没有特征的文档。

让我们来看看它是如何工作的。首先,我们创建一个 dfm,其中包含具有四个不同特征的三个文档,其中一个文档仅包含第四个特征(称之为“d”)。

library("quanteda")
## Package version: 2.1.2

dfmat <- dfm(c(
  "a a c c",
  "b b c c",
  "d d d d"
))

现在,如果我们删除该功能,第三个文档现在是空的。这就是上面输出中删除的内容。

(x <- dfm_remove(dfmat, "d"))
## Document-feature matrix of: 3 documents, 3 features (55.6% sparse).
##        features
## docs    a c b
##   text1 2 2 0
##   text2 0 2 2
##   text3 0 0 0

quanteda internal function dfm2dtm() 中,这是正在发生的事情:

x <- x[, order(featnames(x))]
x <- as(x, "dgTMatrix")
structure(quanteda:::ijv.to.doc(x@i + 1, x@j + 1, x@x),
  names = rownames(x)[which(rowSums(x) > 0)]
)
## $text1
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    2
## 
## $text2
##      [,1] [,2]
## [1,]    2    3
## [2,]    2    2

请注意,在该对象中,它是 stm 输入的“文档”部分,该结构为每个文档记录了一个两行矩阵,其中第一行是“vocab”元素的索引,以及第二行是该词汇元素(特征)的计数。仅记录具有非零计数的词汇元素 - 这就是为什么 text2 中没有第一行为“1”的列(因为 text2 没有“a”特征)。

因此:方案本身无法记录未找到的内容,如果在文档中未找到任何内容,则会被省略。

注意 没有真正的理由使用 convert(x, to = "stm") 因为 stm() 函数可以直接使用 dfm。 (searchK() 但是不能,所以你可能需要它。)