【问题标题】:quanteda: error with textmodel_wordscores: Error in t(as(x, "dgCMatrix"))quanteda:textmodel_wordscores 的错误:t 中的错误(as(x,“dgCMatrix”))
【发布时间】:2020-06-22 06:36:07
【问题描述】:

在新的 quanteda 更新之后,我的代码出现了一些问题。 我正在使用 MigParl 数据从议会演讲中生成 dfm。

(1) 当切换到 quanteda 进行 wordcores 分析时,将 dfm 从 MigParl 矩阵转换为 quanteda:dfm 时,我丢失了行名。但是,根据代码,应该注意这一点。我通过手动添加行名解决了这个问题。这有点烦人,但可以管理。

(2) 现在,当我想计算我的 wordcores 模型时出现错误。 我的dfm的数据格式似乎有问题。

如果您知道发生了什么,我将非常高兴。谢谢你。

达娜

library(polmineR)
use("MigParl")

pb <- partition("MIGPARL", interjection = FALSE, regional_state = "BW", year = 2013:2018) %>%
  partition_bundle(s_attribute = "party")
pb <- pb[[names(pb)[!names(pb) %in% c("", "fraktionslos")] ]]
pb <- enrich(pb, p_attribute = "lemma")
dtm <- polmineR::as.sparseMatrix(pb, col = "count")
dtm <- Matrix::t(dtm)

pg_dfm <- new(
  "dfm",
  i = dtm@i,
  p = dtm@p,
  x = dtm@x,
  Dim = dtm@Dim,
  Dimnames = list(
    docs = dtm@Dimnames$Docs,
    features = dtm@Dimnames$Terms
  )
)

detach("package:polmineR", unload = TRUE)
library(quanteda)
library(quanteda.textmodels)

pg_dfm_red <- quanteda::dfm(pg_dfm)
pg_dfm_trim <- dfm_trim(pg_dfm_red, min_termfreq = 20)
row.names(pg_dfm_trim) <- c("AfD","CDU","FDP","GRUENE","NA","SPD")

现在这是我以前做的:

tmod <- textmodel_wordscores(pg_dfm_trim, c(-1,NA,NA,1,NA, NA))
predict(tmod)

这是我在更新后尝试更改的内容:

textmodel_wordscores(x=pg_dfm_trim, y= c(-1,NA,NA,1,NA, NA), scale = "linear", smooth = 0)
predict(tmod)

两者都产生此错误消息:

t(as(x, "dgCMatrix")) 中的错误: 尝试在 SET_VECTOR_ELT 中设置索引 1/1

我确信问题出在 dfm 的生成上。如果您希望我在这里提供更多信息,我很乐意添加。

由于某种原因,wordfish 模型可以正常工作。

wordfish <- textmodel_wordfish(pg_dfm_trim, c(4,1))
textplot_scale1d(wordfish, doclabels = pg_dfm_trim@Dimnames$docs)

编辑:我安装了较旧的 quanteda 版本。错误依然出现

【问题讨论】:

  • 我无法复制其中的任何内容,但您不应该以这种方式创建 dfm。请改用as.dfm(dtm)。如果要重新分配文档名称,请改用 rownames(pg_dfm) &lt;- 。如果您仍然有问题,请创建一个代表并在 GitHub 页面上提交问题,如果您认为这是一个错误。

标签: r quanteda dfm


【解决方案1】:

问题似乎是 MigParl 数据的编码。

period <-   partition(
  "MIGPARL",
  date = days,
  regional_state = "BW",
  interjection = FALSE,
  encoding = "UTF-8"
)

创建分区时,添加以下规范解决了我的问题。

编码 = "UTF-8"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 2021-08-03
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多