0

在新的 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 版本。错误仍然出现

4

1 回答 1

1

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

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

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

编码 = "UTF-8"

于 2020-03-10T13:23:08.773 回答