2016-12-20 6 views
0

Je suis nouveau sur Twitter Sentimental Analysis avec twitteR, et j'ai utilisé le positif.txt et le negative.txt de Hu et Liu. J'étais si content que tout se passe bien, mais les scores de plus de 1000 tweets se sont tous révélés neutres (score = 0)? Je ne peux pas comprendre ce qui s'est mal passé, toute aide est grandement appréciée!Twitter Sentimental Analysis avec twitteR, tous les scores sont zéro?

setup_twitter_oauth(consumer_key, consumer_secret, token, token_secret) 

    #Get tweets about "House of Cards", due to the limitation, we'll set n=1500 
    netflix.tweets<- searchTwitter("#HouseofCards",n=1500) 
    tweet=netflix.tweets[[1]] 
    tweet$getScreenName() 
    tweet$getText() 
    netflix.text=laply(netflix.tweets,function(t)t$getText()) 
    head(netflix.text) 
    write(netflix.text, "HouseofCards_Tweets.txt", ncolumns = 1) 

    #loaded the positive and negative.txt from Hu and Liu 
    positive <- scan("https://stackoverflow.com/users/xxx/desktop/positive_words.txt", what = character(), comment.char = ";") 
    negative <- scan("https://stackoverflow.com/users/xxx/desktop/negative_words.txt", what = character(), comment.char = ";") 

    #add positive words 
    pos.words =c(positive,"miss","Congratulations","approve","watching","enlightening","killing","solid") 

    scoredsentiment <- function(hoc.vec, pos.word, neagtive) 
    { 
     clean <- gsub("(RT|via)((?:\\b\\W*@\\w+)+)", "",hoc.vec) 
     clean <- gsub("^\\s+|\\s+$", "", clean) 
     clean <- gsub("[[:punct:]]", "", clean) 
     clean <- gsub("[^[:graph:]]", "", clean) 
     clean <- gsub("[[:cntrl:]]", "", clean) 
     clean <- gsub("@\\w+", "", clean) 
     clean <- gsub("\\d+", "", clean) 
     clean <- tolower(clean) 

     hoc.list <- strsplit(clean, "") 
     hoc=unlist(hoc.list) 

     pos.matches = match(hoc, pos.words) 
     scoredpositive <- sapply(hoc.list, function(x) sum(!is.na(match(pos.matches, positive)))) 
     scorednegative <- sapply(hoc.list, function(x) sum(!is.na(match(x, negative)))) 
     hoc.df <- data.frame(score = scoredpositive - scorednegative, message = hoc.vec, stringsAsFactors = F) 
     return (hoc.df) 
    } 

    twitter_scores <- scoredsentiment(netflix.text, scoredpositive, scorednegative) 
    print(twitter_scores) 
    write.csv(twitter_scores, file=paste('twitter_scores.csv'), row.names=TRUE) 

    #draw a graph to show the final outcome 
    hist(twitter_scores$score) 
    qplot(twitter_scores$score) 

Tout fonctionne, mais le score pour chaque tweet est le même (score = 0)

+0

Tout fonctionne, sauf qu'il ne fonctionne pas .... got it. Où est-ce que 'markedpositive' et' scorenegative' sont définis en dehors de la fonction afin que vous puissiez les utiliser comme entrées pour la fonction? Je soupçonne que si vous avez exécuté ce code sur un environnement propre (redémarrer R), cela ne fonctionnerait plus. – cory

+0

@cory LOL J'ai vraiment plus de travail sur mon utilisation de lanaguge haha ​​il a effectivement traversé à nouveau après que je ai redémarré R, mais je n'ai encore que score = 0 pour tous les tweets – LenaLD

+0

'scorepositive' et' scorenegative' ne sont pas définis dans le code que vous avez posté. – cory

Répondre

0

À partir de votre code, je ne pense pas que le simple match fonctionnera. Vous devez utiliser une forme de schéma de correspondance floue. Avec match, vous avez besoin du mot exact répété qui ne se produira pas beaucoup et plus loin, vous faites correspondre un seul mot à une chaîne de mots.

+0

Comment puis-je faire cela? Peux-tu élaborer? Merci beaucoup! – LenaLD

+0

Eh bien, c'est là que vous devez faire la recherche. Vous pouvez regarder les différentes mesures de distance de chaîne ou en utilisant gsub. Il y a beaucoup de ressources là-bas. Mais si vous devez demander l'élaboration d'une tâche simple, peut-être devriez-vous passer plus de temps à faire des recherches sur votre projet avant d'y aller en premier. – Akbar

1

Vous pouvez utiliser Microsoft Cognitive Services pour le calcul du score Sentiments. L'API Microsoft Cognitive Services (API Text Analytics) peut détecter le sentiment, les expressions clés, les rubriques et la langue de votre texte.

Référez ce lien pour utiliser les services Microsoft cognitifs dans la R link

Pour Sentimental Analysis in R

+0

Bien que cela puisse être un service utile, suggérant qu'il change complètement le service/l'outil qu'il utilise ne répond vraiment pas à sa question. –