Создать DFM шаг за шагом с Quanteda

Я хочу проанализировать большой (n = 500 000) корпус документов. я используюquanteda в ожидании того, чтобудет быстрее чемtm_map() отtm, Я хочу продолжить шаг за шагом, а не использовать автоматический способ сdfm(), У меня есть причины для этого: в одном случае я не хочу разбивать токены перед удалением стоп-слов, так как это приведет ко многим бесполезным биграммам, а в другом я должен предварительно обработать текст с помощью процедур, специфичных для языка.

Я хотел бы, чтобы эта последовательность была реализована:
1) убрать знаки препинания и цифры
2) удалить стоп-слова (т.е. до токенизации, чтобы избежать ненужных токенов)
3) токенизировать с помощью униграмм и биграмм
4) создать DFM

Моя попытка:

> library(quanteda)
> packageVersion("quanteda")
[1] ‘0.9.8’
> text <- ie2010Corpus$documents$texts
> text.corpus <- quanteda:::corpus(text, docnames=rownames(ie2010Corpus$documents))

> class(text.corpus)
[1] "corpus" "list"

> stopw <- c("a","the", "all", "some")
> TextNoStop <- removeFeatures(text.corpus, features = stopw)
# Error in UseMethod("selectFeatures") : 
# no applicable method for 'selectFeatures' applied to an object of class "c('corpus', 'list')"

# This is how I would theoretically continue: 
> token <- tokenize(TextNoStop, removePunct=TRUE, removeNumbers=TRUE)
> token2 <- ngrams(token,c(1,2))

Бонусный вопрос Как удалить редкие токены вquanteda? (то есть эквивалентremoveSparseTerms() вtm.

ОБНОВИТЬ В свете ответа @ Кена, вот код, чтобы продолжить шаг за шагомquanteda:

library(quanteda)
packageVersion("quanteda")
[1] ‘0.9.8’

1) Удалить пользовательские знаки препинания и цифры. Например. обратите внимание, что "\ n" в корпусе ie2010

text.corpus <- ie2010Corpus
texts(text.corpus)[1]      # Use texts() to extrapolate text
# 2010_BUDGET_01_Brian_Lenihan_FF
# "When I presented the supplementary budget to this House last April, I said we
# could work our way through this period of severe economic distress. Today, I
# can report that notwithstanding the difficulties of the past eight months, we
# are now on the road to economic recovery.\nIt is

texts(text.corpus)[1] <- gsub("\\s"," ",text.corpus[1])    # remove all spaces (incl \n, \t, \r...)
texts(text.corpus)[1]
2010_BUDGET_01_Brian_Lenihan_FF
# "When I presented the supplementary budget to this House last April, I said we
# could work our way through this period of severe economic distress. Today, I
# can report that notwithstanding the difficulties of the past eight months, we
# are now on the road to economic recovery. It is of e

Еще одно замечание о причине, по которой можно предпочесть предварительную обработку. Мой нынешний корпус на итальянском языке, на котором есть статьи, связанные со словами с апострофом. Таким образом, прямойdfm() может привести к неточному токенизации. например.:

broken.tokens <- dfm(corpus(c("L'abile presidente Renzi. Un'abile mossa di Berlusconi"), removePunct=TRUE))

создаст два отдельных токена для одного и того же слова («un'abile» и «l'abile»), следовательно, потребуется дополнительный шаг сgsub() Вот.

2) Вquanteda невозможно удалить стоп-слова непосредственно в тексте перед токенизацией. В моем предыдущем примере «l» и «un» должны быть удалены, чтобы не вводить в заблуждение биграммы. Это может быть обработано вtm сtm_map(..., removeWords).

3) токенизация

token <- tokenize(text.corpus[1], removePunct=TRUE, removeNumbers=TRUE, ngrams = 1:2)

4) Создайте dfm:

dfm <- dfm(token)

5) Удалить редкие функции

dfm <- trim(dfm, minCount = 5)

Ответы на вопрос(1)

Ваш ответ на вопрос