2017-04-10 6 views
2

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:

DTM Tweet 1 Training Data

Tweet nicht. 3 des Testkorpus ist "riesiger Rolldonner justsoso scari". Die Teilmenge der DTM ist nicht korrekt:

DTM Tweet 3 Training Data

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!

Antwort

0

Edit: diese ist ein tatsächlicher Fehler. Mit VCorpus() anstelle von Corpus() wird auch das Problem behoben.

Dies scheint ein tatsächlicher Fehler zu sein. Versuchen Sie, zu Version 0.6-2 zurückzukehren. Das hat das Problem für mich behoben.

+0

Maschinen verdienen? LoL –

Verwandte Themen