Ich versuche tatsächlich, eine Sentiment-Analyse basierend auf Twitter-Daten mit dem naiven Bayes-Algorithmus zu tun.DocumentTermMatrix falsches Zählen bei Verwendung eines Wörterbuchs
Ich sehe auf 2000 Tweets.
Nachdem die Daten in R-Studio bekomme ich geteilt und Vorprozess das Datum wie folgt:
train_size = floor(0.75 * nrow(Tweets_Model_Input))
set.seed(123)
train_sub = sample(seq_len(nrow(Tweets_Model_Input)), size = train_size)
Tweets_Model_Input_Train = Tweets_Model_Input[train_sub, ]
Tweets_Model_Input_Test = Tweets_Model_Input[-train_sub, ]
myCorpus = Corpus(VectorSource(Tweets_Model_Input_Train$SentimentText))
myCorpus <- tm_map(myCorpus, removeWords, stopwords("english")) #removes common prepositions and conjunctions
myCorpus <- tm_map(myCorpus, stripWhitespace)
removeURL <- function(x) gsub("http[^[:space:]]*", "", x)
myCorpus <- tm_map(myCorpus, removeURL)
removeRetweet <- function(x) gsub("(RT|via)((?:\\b\\W*@\\w+)+)", "", x)
myCorpus <- tm_map(myCorpus, removeRetweet)
myCorpus <- tm_map(myCorpus, removeNumbers)
myCorpus <- tm_map(myCorpus, removePunctuation)
myCorpus <- tm_map(myCorpus, content_transformer(tolower))
myCorpus <- tm_map(myCorpus, PlainTextDocument)
myCorpus.train <- tm_map(myCorpus, stemDocument, language = "english")
myCorpus.train <- Corpus(VectorSource(myCorpus.train$content))
myCorpus = Corpus(VectorSource(Tweets_Model_Input_Test$SentimentText))
myCorpus <- tm_map(myCorpus, removeWords, stopwords("english")) #removes common prepositions and conjunctions
myCorpus <- tm_map(myCorpus, stripWhitespace)
removeURL <- function(x) gsub("http[^[:space:]]*", "", x)
myCorpus <- tm_map(myCorpus, removeURL)
removeRetweet <- function(x) gsub("(RT|via)((?:\\b\\W*@\\w+)+)", "", x)
myCorpus <- tm_map(myCorpus, removeRetweet)
myCorpus <- tm_map(myCorpus, removeNumbers)
myCorpus <- tm_map(myCorpus, removePunctuation)
myCorpus <- tm_map(myCorpus, content_transformer(tolower))
myCorpus <- tm_map(myCorpus, PlainTextDocument)
myCorpus.test <- tm_map(myCorpus, stemDocument, language = "english")
myCorpus.test <- Corpus(VectorSource(myCorpus.test$content))
So bekomme ich einen Zug und ein Testkorpus für mein NB-Algorithmus. Danach möchte ich zwei DTMs nach den Begriffen erstellen, die mindestens 50 Mal im Zugkorpus erscheinen. Diese Begriffe sind: „get“ „miss“ „Tag“ „nur“ „jetzt“, „wollen“ „gut“ „Arbeit“
fivefreq = findFreqTerms(dtm.train, lowfreq = 50, highfreq = Inf)
length((fivefreq))
dtm.train <- DocumentTermMatrix(myCorpus.train, control=list(dictionary = fivefreq))
dtm.test <- DocumentTermMatrix(myCorpus.test, control=list(dictionary = fivefreq))
Für dtm.train es ziemlich gut funktioniert, aber für dtm.test es funktioniert überhaupt nicht. Der DTM basiert auf den oben gewählten Bedingungen, aber die Zählnummern in der Matrix selbst sind nicht korrekt.
Tweet Nein. 1 des Trainingskorpus ist "omg Celli, die passieren, dass ich die Rechnung bezahlt bekomme". Die Teilmenge der DTM ist korrekt:
Tweet nicht. 3 des Testkorpus ist "riesiger Rolldonner justsoso scari". Die Teilmenge der DTM ist nicht korrekt:
Es dass Tweets nicht "get" ist. Aber es gibt ein "nur". Also das Zählen ist irgendwie richtig, aber in der falschen Spalte.
Ich habe so viel versucht, dieses Problem zu lösen, aber eigentlich weiß ich nichts anderes zu tun. Für mich sieht es so aus, als würde tm den DTM basierend auf den Bedingungen des spezifischen Korpus erstellen, und das Wörterbuch wird nur dazu benutzt, den Spaltennamen ohne irgendeine Funktion zu ersetzen.
Danke für Ihre Hilfe!
Maschinen verdienen? LoL –