首页 > 解决方案 > 如何通过 quanteda 中至少有 n 个术语的文档过滤 dfm?

问题描述

我正在分析来自圆桌会议的文本数据,我想知道是否可以仅过滤那些具有超过“n”个术语的文档?

我的语料库中的文档仅包含 1 个单词,例如:“Thanks”、“Sometimes”、“Really”、“go”。我想删除然后以减少稀疏性。

我试过但我无法处理dfm_trimquanteda

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-Clinton、2001-Bush 和 2017-Trump 的值为 0,或者摆脱dfm. Obs.:此示例仅用于说明目的,它不是我要分析的文本数据。

标签: rtext-miningquanteda

解决方案


你应该使用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 

推荐阅读