CommencezCommencez gratuitement

Nuage comparatif normalisé

Vous souvenez-vous de la « majoration des notes » des scores de polarité dans les évaluations de locations? Parfois, une autre façon de faire ressortir un constat consiste à normaliser les scores autour de 0, puis à créer les sous-ensembles du corpus. Cela veut dire que certains commentaires auparavant positifs peuvent se retrouver du côté négatif, et vice versa, puisque la moyenne est ramenée à 0. Cet exercice vous aidera à normaliser les scores, puis à refaire le tracé de comparison.cloud(). Enlever cette « majoration des notes » peut révéler des pistes supplémentaires.

Précédemment, vous avez appliqué polarity() à bos_reviews$comments et créé un comparison.cloud(). Dans cet exercice, vous allez appliquer scale() au résultat avant de créer le comparison.cloud(). Voyez si l'illustration met en évidence quelque chose de différent!

Comme il s'agit surtout d'un exercice de révision, une bonne partie du code est déjà là : il ne reste qu'à compléter avec les bons objets et paramètres!

Cette activité fait partie du cours

Analyse de sentiment en R

Voir le cours

Instructions de l’exercice

  • Passez en revue une section de bos_pol$all préchargé en indexant [1:6,1:3].
  • Ajoutez une nouvelle colonne appelée scaled_polarity avec scale() appliqué à la colonne des scores de polarité bos_pol$all$polarity.
  • Pour les commentaires positifs, utilisez subset() où la nouvelle colonne bos_reviews$scaled_polarity est strictement supérieure (>) à zéro.
  • Pour les commentaires négatifs, utilisez subset() où la nouvelle colonne bos_reviews$scaled_polarity est strictement inférieure (<) à zéro.
  • Créez pos_terms avec paste() à partir de pos_comments.
  • Créez maintenant neg_terms avec paste() à partir de neg_comments.
  • Regroupez les documents concaténés, pos_terms et neg_terms, dans un seul corpus appelé all_terms.
  • Suivez le flot de travail habituel de tm en imbriquant VectorSource() à l'intérieur de VCorpus() appliqué à all_terms.
  • Créez la TermDocumentMatrix() à partir de l'objet all_corpus. Notez qu'il s'agit d'une matrice termes-documents pondérée TfIdf avec des fonctions de nettoyage de base.
  • Transformez all_tdm en all_tdm_m avec as.matrix(). Puis renommez les colonnes dans le code existant en "positive" et "negative".
  • Enfin! appliquez comparison.cloud() à l'objet matrice all_tdm_m. Portez attention aux nouveaux mots négatifs les plus fréquents. Peut-être que cela fera ressortir une idée que vous n'aviez pas encore vue!

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

# Review
___

# Scale/center & append
bos_reviews$___ <- scale(___)

# Subset positive comments
pos_comments <- subset(bos_reviews$comments, ___)

# Subset negative comments
neg_comments <- subset(bos_reviews$comments, ___)

# Paste and collapse the positive comments
pos_terms <- paste(___, collapse = " ")

# Paste and collapse the negative comments
neg_terms <- paste(___, collapse = " ")

# Organize
all_terms<- c(___, ___)

# VCorpus
all_corpus <- ___(VectorSource(___))

# TDM
all_tdm <- TermDocumentMatrix(
  ___, 
  control = list(
    weighting = weightTfIdf, 
    removePunctuation = TRUE, 
    stopwords = stopwords(kind = "en")
  )
)

# Column names
___ <- as.matrix(___)
colnames(all_tdm_m) <- c("___", "___")

# Comparison cloud
comparison.cloud(
  ___, 
  max.words = 100,
  colors = c("darkgreen", "darkred")
)
Modifier et exécuter le code