如何通过Quanteda中至少包含n个术语的文档来过滤DFM?

时间:2019-01-26 17:29:23

标签: r text-mining quanteda

我正在分析一个圆桌会议上的文本数据,我想知道是否可以仅过滤那些包含“ n”个以上术语的文档?

我的语料库具有仅包含1个单词的文档,例如:“谢谢”,“有时”,“真的”,“开始”。为了减少稀疏性,我想删除它。

我尝试了dfm_trim中的quanteda,但无法处理:

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。 观察:此示例仅用于说明目的,不是我正在分析的文本数据。

1 个答案:

答案 0 :(得分:2)

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