Как отфильтровать dfm по документам с хотя бы n терминами в кванте? - PullRequest
0 голосов
/ 26 января 2019

Я анализирую текстовые данные с круглого стола и хотел бы знать, можно ли отфильтровать только те документы, у которых больше, чем «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 голосов
/ 26 января 2019

Вы должны использовать 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 
...