2016-04-12 2 views
5

Am utilisant qdap package pour déterminer le sentiment de chaque commentaire commentaire d'une application particulière. J'ai lu les commentaires d'un fichier CSV et je l'ai passé à la fonction de polarité de qdap. Tout fonctionne bien et j'obtiens la polarité pour tous les commentaires de revue mais le problème est que cela prend 7-8 secondes pour calculer la polarité toutes les phrases (le nombre total de phrases présentes dans le fichier CSV est 779). Je colle mon code ci-dessous.Sentimental L'analyse des commentaires de révision à l'aide de qdap est lente

temp_csv <- filePath() 
    attach(temp_csv) 
    text_data <- temp_csv[,c('Content')] 
    print(Sys.time()) 
    polterms <- list(neg=c('wtf')) 
    POLKEY <- sentiment_frame(positives=c(positive.words),negatives=c(polterms[[1]],negative.words))  
    polarity <- polarity(sentences, polarity.frame = POLKEY) 
    print(Sys.time()) 

Le temps nécessaire est la suivante:

[1] "12/04/2016 16:43:01 IST"

[1] « 12/04/2016 16:43: 09 IST "

Quelqu'un peut-il me faire savoir si je fais quelque chose de mal? Comment puis-je améliorer les performances?

Répondre

9

Je suis l'auteur de qdap. La fonction polarity a été conçue pour des ensembles de données beaucoup plus petits. Comme mon rôle a changé, j'ai commencé à travailler avec des ensembles de données plus volumineux. J'avais besoin de rapidité et de précision (ces deux choses sont en opposition) et j'ai développé depuis un package de rupture sentimentr. L'algorithme est optimisé pour être plus rapide et plus précis que qdap. En l'état actuel des choses, vous disposez de 5 dictionnaires basés sur des dictionnaires (ou basés sur des algorithmes formés) pour la détection des sentiments. Chacun a ses inconvénients (-) et plus (+) et est utile dans certaines circonstances.

  1. qdap + sur CRAN; -slow
  2. syuzhet + sur CRAN; + rapide + super complot; -moins précis sur une utilisation autre que littéraire
  3. sentimentr + rapide; + précision plus élevée; -GitHub seulement
  4. stansent (stanford port) + le plus précis; -slower
  5. tm.plugin.sentiment -archivé sur CRAN; -Je ne pouvais pas le faire fonctionner facilement

Je montre des tests de temps sur les données d'échantillon pour les 4 premiers choix de ci-dessus dans le code ci-dessous.

Installer des packages et faire des fonctions de synchronisation

J'utilise pacman, car il permet au lecteur de courir tout le code; si vous pouvez remplacer par install.packages & library appels.

if (!require("pacman")) install.packages("pacman") 
pacman::p_load(qdap, syuzhet, dplyr) 
pacman::p_load_current_gh(c("trinker/stansent", "trinker/sentimentr")) 

pres_debates2012 #nrow = 2912 

tic <- function (pos = 1, envir = as.environment(pos)){ 
    assign(".tic", Sys.time(), pos = pos, envir = envir) 
    Sys.time() 
} 

toc <- function (pos = 1, envir = as.environment(pos)) { 
    difftime(Sys.time(), get(".tic", , pos = pos, envir = envir)) 
} 

id <- 1:2912 

minutage

## qdap 
tic() 
qdap_sent <- pres_debates2012 %>% 
    with(qdap::polarity(dialogue, id)) 
toc() # Time difference of 18.14443 secs 


## sentimentr 
tic() 
sentimentr_sent <- pres_debates2012 %>% 
    with(sentiment(dialogue, id)) 
toc() # Time difference of 1.705685 secs 


## syuzhet 
tic() 
syuzhet_sent <- pres_debates2012 %>% 
    with(get_sentiment(dialogue, method="bing")) 
toc() # Time difference of 1.183647 secs 


## stanford 
tic() 
stanford_sent <- pres_debates2012 %>% 
    with(sentiment_stanford(dialogue)) 
toc() # Time difference of 6.724482 mins 

Pour en savoir plus sur les horaires et la précision voir mon sentimentr README.md et s'il vous plaît étoiles repo si elle est utile.Le savoir ci-dessous capture l'un des tests du README:

enter image description here

+0

Je suis d'accord avec Tyler, j'ai eu de bons résultats avec syuzhet sur des ensembles très grand nombre de morceaux de texte de taille extrait/examen. – Awhstin

+0

Merci @Tyler Rinker pour l'analyse détaillée de divers paquets de sentiments. Juste maintenant vérifié le paquet sentimentr créé par vous. C'est exactement ce dont j'avais besoin. Mais j'ai besoin de la liste des mots positifs et des mots négatifs de chaque phrase. Je recevais ceci tout en utilisant qdap, alors que sentimentr ne renvoie que le nombre de mots. Est-il possible de les obtenir en utilisant sentimentr? – VenuSathya20

+0

@ VenuSathya20 non ça n'avait plus de sens pour moi. Puis-je demander ce que vous voulez faire avec eux? –