找出多个词组合成一个词的频率?

Find frequencies of multiple words combined as one?

我想找出几个词的总和频率。

例如,我正在使用这段代码来查找某些单词的频率

keyterms <- c("canadian", "american", "british")
dict <- dictionary(list(keyterms2 = c("canadian", "american", "british"))))


dfm <- dfm(toks) %>%
  dfm_group(groups = "Organization") %>%
  dfm_select(pattern = keyterms)

当我 运行 使用关键字和字典执行上述操作时,我会单独获取每个单词的频率。

A header canadian american british
Organization 10 10 10

有没有一种方法可以编写脚本,使其 returns 频率加起来看起来像这样:

A header terms
Organization 30

谢谢

您可以使用 rowSums -

result <- dfm(toks) %>%
  dfm_group(groups = "Organization")  %>%
  dfm_select(pattern = keyterms) %>%
  rowSums() 

使用 stack(result)[2:1] 将 return 数据框。

字典方法是最优雅的解决方案,因为它结合了您的关键字术语。

在这里,我说明了如何使用 built-in 就职语料库执行此操作,其中您的组(类似于您的“组织”)是总统的名字。

library("quanteda")
## Package version: 3.1
## Unicode version: 13.0
## ICU version: 69.1
## Parallel computing: 12 of 12 threads used.
## See https://quanteda.io for tutorials and examples.

keyterms <- c("canadian", "american", "british")
dict <- dictionary(list(terms = keyterms))

toks <- data_corpus_inaugural %>%
  corpus_subset(Year > 2000) %>%
  tokens() %>%
  tokens_lookup(dictionary = dict)

dfm(toks) %>%
  dfm_group(groups = President) %>%
  convert(to = "data.frame")
##   doc_id terms
## 1  Biden     9
## 2   Bush     6
## 3  Obama     8
## 4  Trump    11

(如果您愿意,可以将第一列重命名为“A header”。)

请注意 groups 的用法在 quanteda 3.0 中发生了变化,因此现在不应引用它的值。