Как отфильтровать 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 
Другие вопросы по тегам