如何通过 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_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
我正在分析一轮 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_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