如何通过 quanteda 中至少有 n 个术语的文档过滤 dfm?

How to filter a dfm by documents with at least n terms in quanteda?

我正在分析一轮 table 的文本数据,我想知道是否可以只过滤那些包含超过 "n" 个术语的文档?

我的语料库中有只包含 1 个单词的文档,例如:"Thanks"、"Sometimes"、"Really"、"go"。我想删除 then 以减少稀疏性。

我从 quanteda 尝试了 dfm_trim 但我无法处理:

corpus_post80inaug <- corpus_subset(data_corpus_inaugural, Year > 1980)
dfm <- dfm(corpus_post80inaug)
ntoken(dfm)
1981-Reagan  1985-Reagan    1989-Bush 1993-Clinton 1997-Clinton 
       2790         2921         2681         1833         2449 
  2001-Bush    2005-Bush   2009-Obama   2013-Obama   2017-Trump 
       1808         2319         2711         2317         1660 
dfm <- dfm_trim(dfm, min_docfreq = 2000)
ntoken(dfm)
1981-Reagan  1985-Reagan    1989-Bush 1993-Clinton 1997-Clinton 
          0            0            0            0            0 
  2001-Bush    2005-Bush   2009-Obama   2013-Obama   2017-Trump 
          0            0            0            0            0 

我预计只有 1993 年的克林顿、2001 年的布什和 2017 年的特朗普会有 0,或者摆脱掉 dfm。 Obs.: 这个例子只是为了说明,不是我分析的文本数据。

您应该使用 dfm_subset,而不是 dfm_trimdfm_trim 计算所有文档的频率,而不是每个文档。虽然您可以指定该术语应出现的最少(或最多)文档。要删除文档,我们使用 dfm_subset.

corpus_post80inaug <- corpus_subset(data_corpus_inaugural, Year > 1980)
dfm <- dfm(corpus_post80inaug)

# remove documents with less than 2000 tokens. 
my_dfm <- dfm_subset(dfm, ntoken(dfm) >= 2000)

ntoken(my_dfm)
 1981-Reagan  1985-Reagan    1989-Bush 1997-Clinton    2005-Bush   2009-Obama   2013-Obama 
        2790         2921         2681         2449         2319         2711         2317