kwic() 函数 returns 行数少于应有的行数

kwic() function returns less rows than it should

我目前正在尝试对 kwic 对象执行情绪分析,但恐怕 kwic() 函数没有 return 它应该 return。我不太确定究竟是什么问题导致难以 post 一个可重现的示例,所以我希望对我正在尝试做的事情进行详细解释就足够了。

我将包含要分析的演讲的原始数据集子集化为一个新的数据框,该数据框仅包含提及某些关键字的演讲。我使用以下代码创建了这个子集:

ostalgie_cluster <- full_data %>%
  filter(grepl('Schwester Agnes|Intershop|Interflug|Trabant|Trabi|Ostalgie',
                speechContent,
                ignore.case = TRUE))

生成的数据框包含 201 个观察值。但是,当我使用以下代码对同一初始数据集执行 kwic() 时,它 return 是一个只有 82 个观测值的数据框。有谁知道这可能是什么原因?再次抱歉,我无法提供可重现的示例,但是当我尝试从头开始创建 reprex 时,它只是..有效...

#create quanteda corpus object
qtd_speeches_corp <- corpus(full_data,
                            docid_field = "id",
                            text_field = "speechContent")

#tokenize speeches
qtd_tokens <- tokens(qtd_speeches_corp, 
                     remove_punct = TRUE,
                     remove_numbers = TRUE,
                     remove_symbols = TRUE,
                     padding = FALSE) %>%
  tokens_remove(stopwords("de"), padding = FALSE) %>%
  tokens_compound(pattern = phrase(c("Schwester Agnes")), concatenator = " ")

ostalgie_words <- c("Schwester Agnes", "Intershop", "Interflug", "Trabant", "Trabi", "Ostalgie")

test_kwic <- kwic(qtd_tokens,
                  pattern = ostalgie_words,
                  window = 5)

如果没有可重现的示例(即您的输入 full_data),这只是一个猜测,但这是我最好的猜测。您的 kwic() 调用使用默认的“glob”模式匹配,而您需要的是正则表达式匹配。

这样修正:

kwic(qtd_tokens, pattern = ostalgie_words, valuetype = "regex", 
     window = 5