2017-06-01 4 views
3

Ich verwende tm und wordcloud für die Durchführung einiger grundlegende Text Mining in R. Der Text verarbeitet enthält viele Wörter, die bedeutungslos sind wie asfdg, aawptkr und ich müssen solche Wörter zu filtern. Die nächste Lösung, die ich gefunden habe, ist library(qdapDictionaries) und Erstellen einer benutzerdefinierten Funktion, um die Gültigkeit von Wörtern zu überprüfen.Entfernen bedeutungslose Wörter aus dem Korpus in R

library(qdapDictionaries) 
is.word <- function(x) x %in% GradyAugmented 

# example 
> is.word("aapg") 
[1] FALSE 

Der Rest des Textes Bergbau ist:

curDir <- "E:/folder1/" # folder1 contains a.txt, b.txt 
myCorpus <- VCorpus(DirSource(curDir)) 
myCorpus <- tm_map(myCorpus, removePunctuation) 
myCorpus <- tm_map(myCorpus, removeNumbers) 

myCorpus <- tm_map(myCorpus,foo) # foo clears meaningless words from corpus 

Das Problem is.word() funktioniert gut ist Datenrahmen für den Umgang mit, aber wie es Handhabung für Korpus zu benutzen?

Dank

+0

hallo check 'content_transformer' es ist, was Sie brauchen –

+0

@ s.brunel,' content_transformer' arbeitet mit Funktion, die Corpus ändern, 'is.word' gibt gerade zurück True/False – parth

Antwort

2

Nicht sicher, ob es die ressourceneffiziente Methode sein wird (ich sehr gut, das Paket nicht wissen), aber es sollte funktionieren:

tdm <- TermDocumentMatrix(myCorpus) 
all_tokens  <- findFreqTerms(tdm, 1) 
tokens_to_remove <- setdiff(all_tokens,GradyAugmented) 
corpus <- tm_map(corpus, content_transformer(removeWords), 
       tokens_to_remove) 
+0

Danke @Moody für die Antwort, es filtert Wörter aus bis zu einem gewissen Grad. – parth

+0

In gewissem Maße? Vielleicht stellen Sie sicher, beide Seiten sind Kleinbuchstaben –

+0

Ja danke, ich habe einige Transformationen vor diesen Schritten angewendet, funktioniert alles in Ordnung. Nur ausgeben, es ist ressourcenintensiv. – parth

4

Wenn Sie bereit sind, ein, um zu versuchen verschiedenes Text-Mining-Paket, dann wird diese Arbeit:

library(readtext) 
library(quanteda) 
myCorpus <- corpus(readtext("E:/folder1/*.txt")) 

# tokenize the corpus 
myTokens <- tokens(myCorpus, remove_punct = TRUE, remove_numbers = TRUE) 
# keep only the tokens found in an English dictionary 
myTokens <- tokens_select(myTokens, names(data_int_syllables)) 

Von dort können Sie auf Dokument-Begriff-Matrix bilden können für die Analyse (ein „DFM“ in quanteda genannt), und es wird nur die Merkmale enthält gefunden als englische Begriffe wie im Wörterbuch (das ungefähr 130.000 Wörter enthält).

+0

Dank @Ken um Hilfe, ich blickte auf die "Quanteda" und reduziert einige Daten, anstatt alle Wörter für die Beschleunigung des Prozesses zu betrachten – parth

Verwandte Themen