web-dev-qa-db-fra.com

Comment nettoyer les données Twitter dans R?

J'ai extrait les tweets de Twitter à l'aide du logiciel Twitter et les ai enregistrés dans un fichier texte.

J'ai réalisé ce qui suit sur le corpus

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')

(en utilisant mc.cores = 1 et lazy = True, sinon R sur mac rencontre des erreurs)

tdm<-TermDocumentMatrix(xx)

Mais ce terme matrice de documents comporte de nombreux symboles étranges, mots dénués de sens, etc. Si un Tweet est

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

Après avoir nettoyé le Tweet, je souhaite conserver uniquement les mots anglais complets, c’est-à-dire une phrase/phrase vide de tout le reste (noms d’utilisateur, mots abrégés, urls)

exemple:

One man stands between us and annihilation oh hell no on 

(Remarque: les commandes de transformation du package tm ne peuvent supprimer que les mots vides, les espaces, les signes de ponctuation et la conversion en minuscules.)

10
kRazzy R

Utiliser gsub et 

package stringr 

J'ai compris une partie de la solution pour supprimer les retweets, les références aux noms d'écran, les hashtags, les espaces, les nombres, les ponctuations, les urls. 

  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) Après ce qui précède , j'ai fait ce qui suit.

 #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)

Avant de faire tout ce qui précède, j'ai réduit la chaîne entière en un seul caractère long en utilisant ce qui suit.

paste(mytweets, collapse=" ")

Ce processus de nettoyage a très bien fonctionné pour moi, contrairement aux transformations de tm_map.

Tout ce qui me reste à présent, c’est un ensemble de mots corrects et très peu de mots incorrects. Je devrai probablement soustraire mon ensemble de mots d’un dictionnaire de mots. 

11
kRazzy R

Pour supprimer les URL, vous pouvez essayer les solutions suivantes:

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

Vous pourriez éventuellement définir des fonctions similaires pour transformer davantage le texte.

2
RHertel

Pour moi, ce code n'a pas fonctionné, pour une raison quelconque.

# Get rid of URLs
clean_Tweet <- str_replace_all(clean_Tweet, "http://t.co/[a-z,A-Z,0-9]*{8}","")

Erreur était-

Error in stri_replace_all_regex(string, pattern, fix_replacement(replacement),  : 
 Syntax error in regexp pattern. (U_REGEX_RULE_SYNTAX)

Donc, au lieu de cela, j'ai utilisé

clean_Tweet4 <- str_replace_all(clean_Tweet3, "https://t.co/[a-z,A-Z,0-9]*","")
clean_Tweet5 <- str_replace_all(clean_Tweet4, "http://t.co/[a-z,A-Z,0-9]*","")

se débarrasser des URL

1
Cur123