Как отфильтровать dfm по документам с хотя бы n терминами в кванте?
Я анализирую текстовые данные с круглого стола и хотел бы знать, можно ли отфильтровать только те документы, у которых больше, чем "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 ответ
Вы должны использовать 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