2015-07-10 5 views
9

Ich extrahierte Tweets von Twitter mit dem twitteR-Paket und speicherte sie in einer Textdatei.Wie reinige ich Twitter-Daten in R?

Ich habe folgendes auf dem Korpus durchgeführt

xx<-tm_map(xx,removeNumbers, lazy=TRUE, 'mc.cores=1') 
xx<-tm_map(xx,stripWhitespace, lazy=TRUE, 'mc.cores=1') 
xx<-tm_map(xx,removePunctuation, lazy=TRUE, 'mc.cores=1') 
xx<-tm_map(xx,strip_retweets, lazy=TRUE, 'mc.cores=1') 
xx<-tm_map(xx,removeWords,stopwords(english), lazy=TRUE, 'mc.cores=1') 

(mit mc.cores = 1 und faul = True wie sonst R auf dem Mac läuft in Fehler)

tdm<-TermDocumentMatrix(xx) 

Aber diese Begriff Dokumentenmatrix hat viele seltsame Symbole, bedeutungslose Wörter und dergleichen. Wenn ein Tweet ist

RT @Foxtel: One man stands between us and annihilation: @IanZiering. 
Sharknado‚Äã 3: OH HELL NO! - July 23 on Foxtel @SyfyAU 

Nach der Reinigung des tweet ich nur richtige komplette Englisch Worte wollen nach links, das heißt einen Satz/Satz frei von allem anderen (Benutzernamen, verkürzt ausgedrückt, Urls)

Beispiel werden :

One man stands between us and annihilation oh hell no on 

(Anmerkung: die Transformation in der TM-Paket-Befehle sind nur in der Lage Stoppwörter, Interpunktion und Leerzeichen auch Umwandlung in Kleinbuchstaben zu entfernen)

+0

dann würden 'sharknado' und' foxtel' gemacht, da sie keine "richtigen" englischen Wörter sind ... –

+0

Siehst du irgendeine Verbesserung, wenn du zB 'xx <- tm_map (xx, content_transformer (removePunctuation) 'oder' xx <- tm_map (xx, content_transformer (tolower)) '? – RHertel

+0

Die genaue Syntax kann von der Versionsnummer des von Ihnen installierten 'tm'-Pakets abhängen. – RHertel

Antwort

9

Mit gsub und

stringr Paket

Ich habe zum Entfernen von Retweets Teil der Lösung herausgefunden, Referenzen Namen, Hashtags, Leerzeichen, Zahlen, Interpunktion, Urls zu screenen.

clean_tweet = gsub("&amp", "", unclean_tweet) 
    clean_tweet = gsub("(RT|via)((?:\\b\\W*@\\w+)+)", "", clean_tweet) 
    clean_tweet = gsub("@\\w+", "", clean_tweet) 
    clean_tweet = gsub("[[:punct:]]", "", clean_tweet) 
    clean_tweet = gsub("[[:digit:]]", "", clean_tweet) 
    clean_tweet = gsub("http\\w+", "", clean_tweet) 
    clean_tweet = gsub("[ \t]{2,}", "", clean_tweet) 
    clean_tweet = gsub("^\\s+|\\s+$", "", clean_tweet) 

ref: (Hicks, 2014) Nach dem obigen habe ich die folgenden.

#get rid of unnecessary spaces 
clean_tweet <- str_replace_all(clean_tweet," "," ") 
# Get rid of URLs 
clean_tweet <- str_replace_all(clean_tweet, "http://t.co/[a-z,A-Z,0-9]*{8}","") 
# Take out retweet header, there is only one 
clean_tweet <- str_replace(clean_tweet,"RT @[a-z,A-Z]*: ","") 
# Get rid of hashtags 
clean_tweet <- str_replace_all(clean_tweet,"#[a-z,A-Z]*","") 
# Get rid of references to other screennames 
clean_tweet <- str_replace_all(clean_tweet,"@[a-z,A-Z]*","") 

ref: (Stanton 2013)

Bevor eine der oben genannten tun brach ich zusammen die gesamte Zeichenfolge in einen einzigen langen Charakter der unten.

paste(mytweets, collapse=" ")

Dieses Reinigungsverfahren hat sich für mich ganz gut funktioniert, im Gegensatz zu der tm_map verwandelt.

Alles, was ich jetzt noch habe, ist eine Reihe von richtigen Wörtern und sehr wenigen unpassenden Worten. Jetzt muss ich nur herausfinden, wie man die nicht korrekten englischen Wörter entfernt. Wahrscheinlich werde ich meine Wörter aus einem Wörterverzeichnis subtrahieren müssen.

+1

Das funktioniert gut, aber stellen Sie sicher, dass Sie 'clean_tweet' nicht in Ihrem Argument verwenden, wenn Sie die Variable nicht überschreiben wollen! – timothyjgraham

+1

Stellen Sie außerdem sicher, dass die Bestellung korrekt ist. Wenn Sie zuerst die Erwähnungen entfernen und dann die RT-Prüfung durchführen ('clean_tweet <- str_replace (clean_tweet," RT @ [az, AZ] *: "," ")') wird nichts gefunden, weil die '@ 'Ist nicht mehr da – Mathias711

2

Um die URLs entfernen Sie den folgenden versuchen könnten:

removeURL <- function(x) gsub("http[[:alnum:]]*", "", x) 
xx <- tm_map(xx, removeURL) 

Möglicherweise Sie ähnliche Funktionen definieren könnten, um den Text zu umwandeln.