Erstelle dfm Schritt für Schritt mit quanteda
Ich möchte ein großes (n = 500.000) Korpus von Dokumenten analysieren. Ich benutzequanteda
in der Erwartung, dasswird schneller sein alstm_map()
vontm
. Ich möchte Schritt für Schritt vorgehen, anstatt den automatisierten Weg mit @ zu verwendedfm()
. Ich habe Gründe dafür: In einem Fall möchte ich nicht vor dem Entfernen von Stoppwörtern tokenisieren, da dies zu vielen nutzlosen Bigrams führen würde, in einem anderen Fall muss ich den Text mit sprachspezifischen Prozeduren vorverarbeiten.
Ich möchte, dass diese Sequenz implementiert wird:
1) entfernen Sie die Interpunktion und die Zahlen
2) Stoppwörter entfernen (d. H. Vor der Tokenisierung, um unnötige Token zu vermeiden)
3) Tokenisieren mit Unigramm und Bigramm
4) erstelle das dfm
Mein Versuch:
> 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))
Bonus-Frag Wie entferne ich spärliche Token inquanteda
? (d. h. äquivalent zuremoveSparseTerms()
imtm
.
AKTUALISIERE Nach der Antwort von @ Ken ist hier der Code, mit dem Sie Schritt für Schritt mit @ fortfahren könnequanteda
:
library(quanteda)
packageVersion("quanteda")
[1] ‘0.9.8’
1) Benutzerdefinierte Interpunktion und Zahlen entfernen. Z.B. Beachten Sie, dass das "\ n" im ie2010 Corpus
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
Eine weitere Anmerkung zum Grund, warum man es vorziehen kann, vorzuverarbeiten. Mein gegenwärtiger Korpus ist in Italienisch, einer Sprache, die Artikel enthält, die mit den Wörtern durch einen Apostroph verbunden sind. Somit ist die geradedfm()
kann zu ungenauer Tokenisierung führen. z.B.
broken.tokens <- dfm(corpus(c("L'abile presidente Renzi. Un'abile mossa di Berlusconi"), removePunct=TRUE))
erzeugt zwei getrennte Token für dasselbe Wort ("un'abile" und "l'abile"), weshalb ein zusätzlicher Schritt mit @ erforderlich isgsub()
Hier
2) Inquanteda
Stoppwörter können vor der Tokenisierung nicht direkt im Text entfernt werden. In meinem vorherigen Beispiel müssen "l" und "un" entfernt werden, um keine irreführenden Bigramme zu erzeugen. Dies kann in @ behandelt werdtm
mittm_map(..., removeWords)
.
3) Tokenization
token <- tokenize(text.corpus[1], removePunct=TRUE, removeNumbers=TRUE, ngrams = 1:2)
4) Erstellen Sie die DFM:
dfm <- dfm(token)
5) Spärliche Features entfernen
dfm <- trim(dfm, minCount = 5)