r - 保留从转换过程中删除的行
问题描述
从这个命令
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 内部函数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 输入的“文档”部分,该结构为每个文档记录一个包含两行的矩阵,其中第一行是“词汇”元素的索引,第二行是计数对于那个词汇元素(特征)。只记录计数非零的词汇元素 - 这就是为什么 text2 中没有第一行为“1”的列(因为 text2 没有“a”特征)。
所以:该方案本身无法记录未找到的内容,如果在文档中找不到任何内容,则将其省略。
请注意,没有真正使用的理由,convert(x, to = "stm")
因为该stm()
函数可以直接采用 dfm。(searchK()
但不能,所以你可能需要它。)
推荐阅读
- node.js - node.js 未在 socialboard api 中成功运行
- java - elasticsearch中的too_many_buckets_exception
- python - 如何将文本附加到“列”值
- java - 错误:找不到符号 messageTextBody.put("message", task.getResult().getDownloadUrl().toString());
- python - Python将记录插入到另一个批处理作业使用的日志文件中
- google-tag-manager - 点击变量为空
- sonarqube - SonarQube 7.7+,Gitlab 插件
- firebase - 世博会反应本机注销功能无法正常工作
- scikit-learn - 沉默未定义度量警告
- c++ - 何时释放 unique_ptr?