我正在分析一个圆桌会议上的文本数据,我想知道是否可以仅过滤那些包含“ 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
。
观察:此示例仅用于说明目的,不是我正在分析的文本数据。
答案 0 :(得分:2)
您应该使用dfm_subset
,而不是dfm_trim
。 dfm_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