Raiatea

1. Introduction

Dans cette note de recherche nous analysons les commentaires déposés sur Tripadvisor et relatifs à un hôtel en particulier, c’est un corpus de petite taille (1737 commentaire) qui set de corpus test. On aura pu lors d’une visite, réaliser de manière plus concrête, la clarté de certains éléments de résultats, l’observation directe confirme la description indirecte donnée par le texte. On fera tourner plus tard la procédure sur l’intégralité des commentaires.

L’objectif est d’abord de décrire le contenu de ces textes, puis d’en analyser la tonalité avec plusieurs outils pour en évaluer la consistance. On s’intéressera enfin à la relation entre les indicateurs de sentiments et la note donnée par les évaluateurs. Le texte est-il en accord avec le jugement numérique?

Cette question est d’autant plus importante que les notes sont l’objet de différents processus qui affectent leur distribution pour leur donner une forme caractéristiques fortement biaisée à droite en faveur des 4 et 5 étoiles. Ce sont des processus psycho-sociaux (biais d’approbation), des processus d’apprentissage, l’effet des dispositifs et algorithmes de moderation (voir la detection de la toxicité cf @)

Le “pipe” de traitement consiste à

    1. annoter les tokens (les termes) par une analyse des éléments du discours (POS) de manière à identifier les lemmes.
    1. Réduire le corpus aux : noms communs, adjectifs et adverbes, ainsi qu’aux verbes. On élimine ainsi noms de lieu, ponctuations etc. Avec la lemmatisation cette opération permet de passer outre aux opérations de a) correction d’orthographe b) harmonisation de la casse, de suppression des stopwords habituels.
    1. Construire le modèle de topics (sujets) par une méthode LDA
    1. Le visualiser avec LDAvis
    1. Annoter le corpus avec les dépendances syntaxiques et examiner la relation des noms communs à de leurs adjectifs pour mieux apprécier certain aspect s des topics
    1. Analyse du sentiment selon la méthode FEEL (nrc) et frLSD. (lexicoder)
    1. Analyse des émotions
    1. Examiner l’évolution des indicateurs obtenus
    1. Comparer les scores de sentiments avec les notes données par les consommateurs
    1. Tenter d’expliquer des notes par le textes au travers d’une approche machine-learning avec un modèles naive bayes et des modèles types SVM et random forest.
    1. Analyser et évaluer les modèles par des critère AUC et autres.

2. Initialisation

L’annotation est réalisée avec cleanNLP, on emploie text2vec pour le LDA, pour la représentation des dépendances packcircles sera utile. Pour le détail du code on consultera le repo.

la lecture du fichier ne pose aucune difficulté, en voici les trois premiers éléments pour avoir une idée de sa structure.

## Parsed with column specification:
## cols(
##   X1 = col_character(),
##   X2 = col_character(),
##   X3 = col_character(),
##   X4 = col_character(),
##   X5 = col_character(),
##   X6 = col_double()
## )
## # A tibble: 3 x 6
##   X1             X2                           X3        X4     X5        X6
##   <chr>          <chr>                        <chr>     <chr>  <chr>  <dbl>
## 1 InterContinen~ "Très bel hôtel à quelques ~ Il y a 3~ avril~ Tompb~     4
## 2 InterContinen~ "À notre arrivée,  tous le ~ il y a 4~ mars ~ Mimis~     4
## 3 InterContinen~ "Nous sommes restés en tran~ 19 mars ~ mars ~ 394ya~     1

3. La lemmatisation

Avant d’explorer plus avant le contenu des tweets, on va d’abord annoter le corpus en utilisant les ressources de cleanNLP de Arnold (2017) et en particulier son outil d’annotation des parties du discours (POS) et de lemmatisation qui permettra à la fois d’obtenir les lemmes correspondants à chaque des termes mais aussi leur catégorie morphosyntaxique. Nous nous inspirons largement de leur étude de cas

#library(cleanNLP) annotation morpho, lemmes.
text<-reviews$X2
cnlp_init_udpipe(model_name = "french")
obj <- cnlp_annotate(text, as_strings = TRUE)
head(cnlp_get_token(obj))
## # A tibble: 6 x 10
##   id      sid   tid word     lemma   upos  pos     cid   pid s_after
##   <chr> <int> <int> <chr>    <chr>   <chr> <chr> <int> <int> <chr>  
## 1 doc1      1     1 Très     très    ADV   <NA>      0     1 " "    
## 2 doc1      1     2 bel      beau    ADJ   <NA>      5     1 " "    
## 3 doc1      1     3 hôtel    hôtel   NOUN  <NA>      9     1 " "    
## 4 doc1      1     4 à        à       ADP   <NA>     15     1 " "    
## 5 doc1      1     5 quelques quelque DET   <NA>     17     1 " "    
## 6 doc1      1     6 minutes  minute  NOUN  <NA>     26     1 " "

3.1 Des éléments du discours (POS)

La composition en catégories morphosyntaxiques n’est pas forcément évidente à interprêter, il faudrait connaitre leurs distribution dans des corpus de référence (langue standard, ou base d’avis de consommateurs).

On examine les différentes catégories de termes. Les plus fréquents sont des noms communs, accompagnés des déterminants. Les commentaires seraient-il descriptifs. La ponctuation est fréquente, les adverbes et adjectifs viennent ensuite : signe d’un caractère peu évaluatif et très descriptif ?

Nous pouvons désormais travailler sur un corpus linguistiquement plus homogène. On doit remarquer que le caractère cardinal du découpage est aussi fonction de convention. On pourrait imaginer une détection des langues plus fine qui prendrait en compte les dialectes. C’est le travail des linguistes que de produire des catégories pertinentes et nous nous fierons à leurs avancées.

3.2 verbes, noms communs et adjectif et adverbes

Le texte à l’état brut comporte de nombreux signes qui amènent peu de sens lexical : des points , des noms de lieux, des déterminants. La stratégie que nous engageons est différentes de cette de tm qui juxtapose : mise en minuscule, suppression des ponctuactions, des mentions et des ref html, notre stratégie n’élimine pas mais se concentre sur les éléments lexicaux les plus signifiants. Au moins de manière première, les autres éléments, secondaires, peuvent révéler des flexions plus fines, comme l’usage de la ponctuation le permet - Proust l’aura démontré (ISABELLE SERCA (2010))

Il s’agira ici simplement des verbes, des noms propres, des adjectifs et des adverbes. On en présente les trois distributions.

  • Les noms communs mettent en tête des éléments liés aux logement, à sa localisation et son voisinage, ainsi qu’au séjour et à l’accueil.
  • Les qualificatifs sont très positifs et principalement expressifs, proche, propre et confortable en sont les attributs les plus fréquents
  • Les verbes traduisent une intention : recommendation, des mouvements : stay, walk go et des transaction : get, need…

On filtre les lemmes dont la fréquence est supérieure à 300.

L’expérience reste largement inexprimée si ce n’est pas un jugement très positif (bien, bon, beau) qui nous incite à explorer dans une prochaine section les sentiments et émotions associées. Mais auparavant, tentons d’isoler dans ces ensembles de termes des sujets et thème d’évaluation.De quoi parlent les commentateurs ?

4. Un modèle LDA de topics

Pour mieux cerner les sujets on utilise le désormais bien connu modèle LDA avec la solution proposée par text2vec et la solution de visualisation interactive LDAvis.

On ne retient qu’une partie du corpus : les adjectifs, les noms communs et les verbes. La méthode nous permet d’ôter nombres et signes de ponctuations comme on le fait avec tm et les autres packages, mais aussi les noms de lieux (noms communs) qui peuvent “fragmenter” les topics en leur donnant une spécificité géographique. On travaille sur les lemmes ce qui permet de réduire le bruit généré par les fautes d’orthographes inévitables dans un corpus dont la langue est largement vernaculaire.

Le choix du nombre de solutions peut se faire sur la base de plusieurs critères avec procédure [ldatuning](https://cran.r-project.org/web/packages/ldatuning/vignettes/topics.html). On opte pour un modèle à 6 thèmes. On gagnerait en finesse à choisir une catégorie en 15 thèmes (ou en 10), mais une solution plus simple à 6 semble maximiser le coefficient de Deveaud, SanJuan, and Bellot (2014). Pour chacun de ces modèles, la somme des divergences D(ki||kj) entre tous les paires de concepts(ki,kj) est calculée afin de déterminer à quel point les concepts sont correctement délimités. Finalement, le modèle pour lequel la divergence globale est la plus forte est choisit, car c’est celui qui propose la meilleure démarcation entre les concepts.

## fit models... done.
## calculate metrics:
##   Deveaud2014... done.

Les résultats se présentent sous la forme d’une liste des termes les plus pertinents selon le critère proposé par (???) pour chacun des sujets identifiés.

  • le lieu : beau, superbe, magnifique. il est constitué par le lagon et la piscine et le lagonarium qui est l’originalité de cet hôtel proche de l’aéroport et qui est aussi un hotel de transit.
  • la situation, et les commodités. L’aéroport, la douche.
  • Le spectacle et le buffet forme un troisième point d’intérêt.
  • La mer, nager un quatrième topic est relatif à l’environnement proche et aux activités
  • le personnel et sa serviabilité marque le 5ème sujet
  • c’est l’accueil qui est désigné dans le dernier sujet.
## INFO [2019-05-29 20:47:12] iter 25 loglikelihood = -270083.972
## INFO [2019-05-29 20:47:12] iter 50 loglikelihood = -266764.663
## INFO [2019-05-29 20:47:13] iter 75 loglikelihood = -264226.174
## INFO [2019-05-29 20:47:13] iter 100 loglikelihood = -262526.130
## INFO [2019-05-29 20:47:13] iter 125 loglikelihood = -261506.364
## INFO [2019-05-29 20:47:13] iter 150 loglikelihood = -260442.011
## INFO [2019-05-29 20:47:13] iter 175 loglikelihood = -259776.721
## INFO [2019-05-29 20:47:14] iter 200 loglikelihood = -259027.917
## INFO [2019-05-29 20:47:14] iter 225 loglikelihood = -258908.259
## INFO [2019-05-29 20:47:14] early stopping at 225 iteration

on pourra générer une visualisation dynamique qui facilite l’interprétation avec le package LDAvis, en activant le code suivant. (on peut voir ici une démonstration )

# la visualisation interactive
library(LDAvis)
lda_model$plot()

L’intégration dans le htlm n’étant pas facile on n’en représente qu’une illustration. Le résultat est une visualisation interactive qui pour chacun des topics et des mots indique :

  • Sa proximité avec les autres topics via une analyse des similarités, ce qui est représenté sur le panneau de gauche. La surface des cercles est proportionnelle à la frequence des tokens.
  • Pour un topic donné, le profil est indiqué à droite : les trente principaux termes sont classés par ordre de pertinence (modulée par le paramètre lambda) de haut en bas, leurs fréquences sont indiquées sur les barres horizontales et comparées à la fréquence du mot dans l’ensemble du corpus.
Topic

Topic

  • En cliquant sur les mots on peut aussi observer leur distribution dans les différents groupes et peut en apprécier la spécificité. Dans le cas suivant (serviable) seul quatres thèmes y sont relatifs, plus de la moitié appartiennent au topis “Qualité du personnel”
Mots

Mots

5. Analyse des dépendances

Certains annotateurs peuvent repérer les règles grammaticales et trouver pour un mot cible ses corrélats. Un nom commun peut être ainsi associé à des adjectifs qui le qualifient et le nuancent. C’est ainsi que le stanford NLP distingue 55 types de dépendances syntaxiques. Cette annotation peut être produite avec cleannlp.

On s’intéressera à des dépendences de qualification en optant pour les dépendences

  • “amod” : adjectival modifier - An adjectival modifier of an NP is any adjectival phrase that serves to modify the meaning of the NP.“Sam eats red meat”amod(meat, red)
  • “admod” : adverbial modifier. “Sam eats a lot of meat”amod(meat, a lot of)

Pour plus de détail il faut consulter le “Stanford typed dependencies manual” Marneffe and Manning (2008)). on en trouvera un exposé ici universal dependencies.

Pour mieux comprendre le modèle LDA on peut ainsi être inciter à étudier certains des lemmes contributifs (on ne travaille plus sur le texte brut mais sur un texte filtré). Dans l’exemple suivant, on s’inspire du code suivant. Il est commenté ici.

On représente les qualificatifs de 4 notions qui apparaissent comme étant les plus fréquentes au travers de leur manifestation par l’usage de noms communs : par exemple le restaurant, la chambre, le lagonarium (qui est l’attraction spectaculaire de cet hotel) et la piscine.

6. Analyse du sentiment

Dans les sections précédentes on a caractérisé les contenus, dérivant des polarités positives et négatives dans les contenus. C’est cette polarité qui va être l’objet de l’analyse du sentiment qui est mené dans cette 6ème section.

On filtre le corpus sur un critère de 10 caractères minimum, au moins trois mots, et on élimine les textes très longs, de plus de 5000 caractères, qui contribuent plus que proportionnellement au corpus.

library(syuzhet)             #analyse du sentimeent
reviews$nbcar<-as.numeric(nchar(reviews$X2))
df_en<-reviews %>% filter(nbcar>10 & nbcar<5000)

6.1 La distribution du sentiment

On utilise le package syuzhet et en particulier le dictionnaire “nrc” developpé et traduit par Mohammad and Turney (2013) ( Index Feel)

#paramètres
method <- "nrc"
lang <- "french"
phrase<-as.character(df_en$X2)
#extraction
my_text_values_french<- get_sentiment(phrase, method=method, language=lang)

Le sentiment est globalement plutôt positif, même si une fraction des contributions présentent des valeurs négatives. La variance est relativement élevée, ce qui est le signe d’une certaine sensibilité. Il se distribue plutôt normalement au moins de manière symétrique.

6.2 Un indicateur dépendant de la longueur du texte

En corrélant le nombre de caractères et le score primaire de sentiment une corrélation nette apparait, elle est de l’ordre de 0.56, elle s’atténue quand la taille du texte déapsse les 700 caractères. Quand on corrèle au score de sentiment standardisé, c’est une relation inverse qui apparait, même si elle est moins forte ( r= 0.26) , plus le texte est long est plus il est neutre, mais prudence, neutre en moyenne, pas forcément en qualité d’expression. astuce des quintile

La transformation opérée montre une relation linéaire claire dans le segment [-10,10], audelà le score de sentiment devient invariant avec le grand nombre de mention positive qui résulte d’un commentaire long.

7. Analyse des émotions - nrc

Le même outil fournit un autre système d’annotation qui compte les mentions d’éléments positifs ou négatifs, ainsi que d’émotions définies sur la base de l’inventaire de Plutchik (1982) on utilise simplement la fonction get_nrc_sentiment, en précisant le dictionnaire adéquat. L’échelle comprend en fait deux éléments : les 8 émotion de base *au sens de pluchik, et deux indicateurs de polarité. L’opérationnalisation réalisée par Mohammad and Turney (2013) s’inscrit dans une tradition de la recherche en marketing, se souvenir de Havlena and Holbrook (1986) et de Westbrook and Oliver (1991).

7.1 Les polarités

On s’intéresse d’abord aux mentions positives et négatives. (la mesure permet ainsi une dyssémétrie des deux polarités, il y a le bien, le mal, le mal et le bien, mais aussi si qui n’est ni mal ni bien). Les textes étant inégaux en taille on va ramener l’indicateur de polarité au nombre de caractères (sur une base de 100 c) de chaque contribution. En effet l’algo compte les valence et leur intensité est proportionnel à la longueur du texte. Ce qui est clairement démontré par la seconde figue. A partir de ces deux mesures, 4 indicateurs peuvent être construits * Positivité : nombre de termes positifs pour 100 signes. * Négativitivé : nombre de termes négatifs pour 100 signes. * Valence : rapport du nombre de termes positifs sur les négatifs. * Expressivité : nombre de termes positifs et négatifs. le dernier graphe nous apprend que les jugements plutôt positifs sont aussi les plus expressifs. La “froideur” des commentaires les plus négatifs reflète-t-elle une crainte de la désaprobation sociale? C’est une piste de recherche à poursuivre, on pourrait s’attendre à ce que les commentaires les plus négatifs surgissent plus facilement si la densité des négatives est plus importante et observer une sorte d’autocorrélation.

## [1] 15523
## [1] 7093

La relation entre le nombre de mention et la taille du texte est évidente et de l’ordre de 0.75.

L’idée de transformer cet indicateur brut en le rapportant à un même nombre de caractères (10 ou environ un token) est donc justifiée. On observe une symétrie l’effet de la valence sur l’expressivité, même si une contribution plus forte de la négativité. Négativité et positivité ne sont pas corrélés.

## function (..., deparse.level = 1) 
## .Internal(rbind(deparse.level, ...))
## <bytecode: 0x0000000018606b40>
## <environment: namespace:base>

7.2 La palette des émotions

On se concentre sur les 8 facettes de l’émotion telle que conceptualisée par Plutchik (Plutchik (1982))

dont on reprend les définitions en anglais : " * trust goes from acceptance to admiration * fear goes from timidity to terror * surprise goes from uncertainty to amazement * sadness goes from gloominess to grief * disgust goes from dislike to loathing * anger goes from annoyance to fury * anticipation goes from interest to vigilance * joy goes from serenity to ecstasy"

et mesurée sur la base des textes par l’outil NCR élaborée par Mohammad Saif et pour le français voir. On peut raisonner en part relative des émotions dans le mesure où l’outil NCR compte les éléments probables de chacune des émotions. C’est pourquoi on recode les variables, encore une fois les textes long risquent de peser plus que les textes courts, la normalisation est nécessaire.

On complète l’analyse par une typologie simple (méthode de ward) qui fait apparaitre 4 grandes répondes émotionnelles. L’une marginale( 4) est clairement négative, une autre représente un tiers des observations peut être qualifiée de mitigée ( une fréquence élevé de tristesse), les deux autres qui représentent un peu plus de 60% sont franchement positives se distinguant pour l’une par une forte attention et l’autre par un plus grand sentiment de confiance.

# 8. Notes et sentiments

Si on examine les corrélations entre les notes délivrées par les commentateurs et le sentiment tel qu’il est mesuré par nos instrutements (basés sur le dictionnaire FEEL) on observe de très faibles corrélations, 0.25 au mieux pour la valence. Celà va dans le bon sens mais exprime ausi un hiatus entre le commentaire et la note.

On sait que cette dernière répond fortement aux besoins d’approbation sociale (trouver des refs : moscovici déjà) et devient peu discriminante (ex : . On lira par exemple pour un approfondissement sur cette question. On notera que les système de réputation s’y adapte en introduisant des choix de d’indicateurs d’emotions. Facebook a été le premier à répondre à ce sujet Eranti and Lonkila (2015), linkedIn vient de s’y mettre.

Il peut être intéressant de tester l’hypothèse avec un autre score de sentiment. La faible corrélation est peut être le fruit de notre instrument de mesure. On utilise le lexicoder (Duval and Pétry (2016)) avec quanteda. D’autres packages (en français) sont possibles comme pattern.nlp et un travail de comparaison systématique pourrait être utile et faire l’objet d’un papier de recherche à part entière, nous ne faisons qu’esquisser un tel travail. En anglais beaucoups plus d’indicateurs sont disponibles. On réutilise les transformations en valence et expressivité.

On s’aperçoit dans l’analyse des corrélation que les valences obtenue avec les deux outils conergent avec des valences corréles à 0.55 et des expressivity de 0.88. Les notes sont mieux corrélée ( 0.34) mais c’est une valeur encore faible, bien plus faible que la convergence de nos deux indicateurs. On doit constater le divorce entre la tonalité des commentaires et les notes attribuée.

## 
## Call:
## lm(formula = X6 ~ valence_lsd + expressivity_lsd, data = df_en3)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.3301 -0.4101  0.0151  0.7021  1.9514 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)       3.97142    0.06189  64.169   <2e-16 ***
## valence_lsd       0.42344    0.03324  12.741   <2e-16 ***
## expressivity_lsd -0.09485    0.07477  -1.269    0.205    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.8278 on 1734 degrees of freedom
## Multiple R-squared:  0.1207, Adjusted R-squared:  0.1196 
## F-statistic:   119 on 2 and 1734 DF,  p-value: < 2.2e-16

8. Analyse chronologique

Il s’agit ici d’examiner l’évolution de nos indicateurs de sentiments. On se limite à la période postérieure à 2009 pour une question de densité de contributions. On en profite pour observer la convergence des indicateurs produits à partir des deux dictionnaires FEEL et FrLSD. Ils évoluent bien ensemble, peut-être moins en terme de négativité où une lègère divergence semble se manifester.

9. Un modèle naives bayes pour prédire la note

On utilise un modèle très simple. Le plus basique qui soit.

#https://fderyckel.github.io/2016-12-07-Texts_Classification_in_R/

9.1 Constitution du corpus

## # A tibble: 1 x 7
##   X1            X2                        X3       X4     X5       X6 nbcar
##   <chr>         <chr>                     <chr>    <chr>  <chr> <dbl> <dbl>
## 1 InterContine~ "Très bel hôtel à quelqu~ Il y a ~ avril~ Tomp~     4   470
## <<SimpleCorpus>>
## Metadata:  corpus specific: 1, document level (indexed): 0
## Content:  documents: 1737
## <<SimpleCorpus>>
## Metadata:  corpus specific: 1, document level (indexed): 0
## Content:  documents: 2
## 
## [1] À notre arrivée,  tous le personnel nous dise bonjour même si nous sommes résidant,  le service est super avec toujours le sourire .  Nous avons bien manger .  Nous n<U+0092>avons pas été déçu pour un premier repas (petit déjeuner) familial au resto et surtout à l<U+0092>intercontinental . Il y a juste le prix que l<U+0092>on trouvait un peu trop chère mais pour le reste,  rien à dire .  À y retourner et recommander .                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
## [2] Nous sommes restés en transit dans cet hôtel 2 nuits lorsque nous sommes arrivés sur Tahiti où notre séjour a été des plus agréables (superbe chambre,  vue imprenable sur le lagon,  personnel agréable) et 3 nuit avant de reprendre l<U+0092>avion pour la France .  Et c<U+0092>est la que ça coince  .  .  . A l<U+0092>intercontinental de Moorea nous avions bénéficié d<U+0092>un Check-out tardif (16h) laveille de notre départ .  Quelle surprise de voir que l<U+0092>intercontinental de Tahiti ne pratique pas la même politique !Nous appelons tout d<U+0092>abord le jour de notre arrivée pour demander un départ tardif (notre avion est à 22h et le check-out se dit normalement à 11h),  la réceptionniste nous répond qu<U+0092>elle ne peut rien garantir mais que « des fois,  éventuellement,  ça peut passer lorsqu<U+0092>on demande la veille au soir » .  Lorsque nous arrivons pour notre check-in nous redemandons (sait-on jamais) : la réceptionniste dit qu<U+0092>elle va laisser un mot dans notre « dossier » mais qu<U+0092>il faudra demander confirmation le jour même ou « peut être que ça peut passer la veille au soir » .  Mais il ne faut pas s<U+0092>inquiéter  .  .  .  au pire nous avons toujours l<U+0092>option de payer une nuit supplémentaire  .  .  .  pour quitter l<U+0092>hôtel à 19h  .  .  .  la blague !!!!Mais bon qu<U+0092>à cela ne tienne nous retournons à la réception la veille au soir (ça commençait à franchement nous agacer) .  Et la  .  .  .  en plus de rigoler en nous disant que l<U+0092>hôtel sera complet,  le réceptionniste nous annonce qu<U+0092>on ne peut demander confirmation de Check-out tardif que le matin du départ À N<U+0092>IMPORTE QU<U+0092>ELLE HEURE du matin mais que le matin tout de même .  Nous appelons le matin à 6h40 .  .  .  pour s<U+0092>entendre dire que la brigade n<U+0092>est pas encore arrivée et qu<U+0092>ils nous rappelleront pour nous tenir au courant dans la journée .  .  . Incroyable de devoir se mettre à genou et de mettre son réveil à 6h30 le matin pour demander un départ tardif que finalement personne n<U+0092>est capable de nous confirmer  .  .  .  enceinte de 5 mois,  j<U+0092>étais tellement strèssée à l<U+0092>idée de devoir poireauter dans l<U+0092>hôtel pendant 8h que j<U+0092>ai à peine dormipour ma dernière nuit  .  .  .  dommage de clôturer son voyage de noce dans ces conditions .  .  .  avec en prime personne pour s<U+0092>excuser ou pour chercher une solution .  .  .  à si  .  .  .  les chambres de transit  .  .  .  du coup je suppose que nous n<U+0092>avons pas à nous plaindre . Autre chose : petit déjeuner,  on m<U+0092>apporte un chocolat chaud (dans un Thermos,  important de préciser) .  20min plus tard je bois le chocolat : il est froid .  Je me resserre du Thermos,  le chocolat est froid .  Je le fais gentiment remarquer à la serveuse qui me rétorque de mauvaise foi que c<U+0092>est le ventilateur du plafond qui a refroidi le chocolat  .  .  .  en Thermos  .  .  .  à 9h20 du matin  .  .  .  31 degrés température extérieure  .  .  .  je n<U+0092>ai pas voulu en rajouter je n<U+0092>ai rien dit  .  .  .  mais ça me fait doucement rigoler de me faire prendre pour une idiote par une serveuse qui est visiblement fiu . Membre du IHG rewards club,  on nous remercie de notre fidélité envers la chaîne interconti par une consommation gratuite (uniquement vin,  bière ou boisson non alcoolisée,  mais disons que c<U+0092>est déjà mieux que rien) mais lorsque les clients demandent un service en particulier il n<U+0092>y a plus personne  .  .  .  c<U+0092>est extrêmement décevant  .  .  .  on a l<U+0092>impression d<U+0092>etre une pompe à fric ambulante (je suppose que c<U+0092>est le sort réservé aux clients de ce genre d<U+0092>hôtel de toutes les manières) .  Dommage parce que le personnel au bar-piscine et les bagagistes sont très sympas  .  .  . Mais pour être déjà venue dans cet hôtel 13 ans auparavant avec mes parents et avoir été époustouflée,  je peux dire que l<U+0092>hôtel a de quoi se remettre sérieusement en question sur la qualité des services proposés,  la qualité des chambres (les serviettes meme pas changées tous les jours),  rien dans le mini-bar,  personne pour nous expliquer ou nous donner un plan de l<U+0092>hôtel avec les activités proposées .  .  .  L<U+0092>interconti de Moorea est beaucoup plus soucieux de ses clients et beaucoup plus respectueux que celui de Tahiti . On sent que l<U+0092>interconti de Tahiti n<U+0092>est qu<U+0092>un hôtel transit  .  .  .  simplement lorsqu<U+0092>on seprend pour un 4 étoiles  .  .  .  on les assume ou on ne les porte pas .  Surtout pour nous dire que le départ tardif n<U+0092>est finalement pas possible  .  .  .  même pas pour 1h .

9.2 fabriquer le DTM

On constitue deux sous corpus 60% et 40% pour l’entrainement et le test et on considère les bigrams.

## <<DocumentTermMatrix (documents: 6, terms: 9)>>
## Non-/sparse entries: 3/51
## Sparsity           : 94%
## Maximal term length: 9
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs bénéficié boisson brigade capable celui chaîne chambres changées
##   40         0       0       0       0     0      0        0        0
##   41         0       0       0       0     0      0        1        0
##   42         0       0       0       0     0      0        0        0
##   43         0       0       0       0     0      1        2        0
##   44         0       0       0       0     0      0        0        0
##   45         0       0       0       0     0      0        0        0
##     Terms
## Docs chaud
##   40     0
##   41     0
##   42     0
##   43     0
##   44     0
##   45     0
## [1]  1000 10248
## [1] 571

9.3 selectioner les termes les plus fréquents to build the DTM

et recoder les fréquences en variables binaires Function to convert the word frequencies to yes (presence) and no (absence) labels

## [1] 1000  571
## [1] 737 571

9.4 Le modèle

On utilise ici la fonction naiveBayes du package e7000 mais d’autres solutions sont possibles. Un paramètre doit cependant être fixé, la valeur de la constante de lissage de Laplace. On trouvera ici et là les explications nécessaires sur son rôle et son choix.

https://en.wikipedia.org/wiki/Additive_smoothing

http://rocr.bioinf.mpi-sb.mpg.de/

9.5 Evaluation du modèle

Pour évaluer le modèle on emploie la fonction confusion matrix mais aussi le package ROCR qui fournit tous les indicateurs habituels du machine learning. On évalue d’abord le modèle. La précision est de 0,782 ( et de 0.68 quand elle est équilibrée), elle doit être comparé à la prévalence qui est de 84% (). La précision (sensitivity) est de .90 et le recall de 0,83 (specificity) le F est donc de 0.86 et l’auc de 0.78. le taux de detection est de 0,69. le coefficient kappa peut être qualifié de correct (fair) ce qui indique que la prediction tout en étant sensible est peu précise.

Manifestement le contenu des avis et les notes sont assez peu lié. La corrélation du sentiment et des notes nous en donnait déjà l’idée, elle se confirme ici, même si nous n’employons qu’un modèle très simple.(D’autre SVM, RF et autres pourraient être testés à leur tour, on pourrait affiner les choses en utilisant du word embedness).

## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0  63 105
##          1  55 514
##                                           
##                Accuracy : 0.7829          
##                  95% CI : (0.7514, 0.8122)
##     No Information Rate : 0.8399          
##     P-Value [Acc > NIR] : 0.9999794       
##                                           
##                   Kappa : 0.3109          
##                                           
##  Mcnemar's Test P-Value : 0.0001072       
##                                           
##             Sensitivity : 0.8304          
##             Specificity : 0.5339          
##          Pos Pred Value : 0.9033          
##          Neg Pred Value : 0.3750          
##              Prevalence : 0.8399          
##          Detection Rate : 0.6974          
##    Detection Prevalence : 0.7720          
##       Balanced Accuracy : 0.6821          
##                                           
##        'Positive' Class : 1               
## 

## An object of class "performance"
## Slot "x.name":
## [1] "None"
## 
## Slot "y.name":
## [1] "Area under the ROC curve"
## 
## Slot "alpha.name":
## [1] "none"
## 
## Slot "x.values":
## list()
## 
## Slot "y.values":
## [[1]]
## [1] 0.7831932
## 
## 
## Slot "alpha.values":
## list()

Un résultat accessoire est l’identification des termes qui contribuent à la prédiction. On va extraire du classificateur (qui se présente comme une liste de tableau croisés entre la note (neg/positive) et la présence/absence du terme) donnant les probabilité a postériori (probabilité d’avoir le terme sachant que la classe est negative ou positive). On calcule la différence entre les probabilités d’être positif et négatif, un fort écart indique le pouvoir discriminant du termes).

On y voit clairement les termes discriminants : en positif, la piscine, le personnel, la vue et des adjectifs hyperbolique. En négatif le prix…. Il y a là matière à construire un nouvel index de sentiment…..

#extraction des probabilité conditionnelle (p=W/positif)
classifier$tables$ambiance["1","Yes"]         # p(dept.A|admitted)
## [1] 0.02533172
for(i in classifier$tables){print(i["1","Yes"])}
## [1] 0.2352232
## [1] 0.02533172
## [1] 0.08685163
## [1] 0.01809409
## [1] 0.1495778
## [1] 0.02171291
## [1] 0.03136309
## [1] 0.08926417
## [1] 0.1688782
## [1] 0.2400483
## [1] 0.4583836
## [1] 0.02533172
## [1] 0.02533172
## [1] 0.13269
## [1] 0.1158022
## [1] 0.02291918
## [1] 0.1013269
## [1] 0.6357057
## [1] 0.1290712
## [1] 0.1230398
## [1] 0.0880579
## [1] 0.05548854
## [1] 0.2858866
## [1] 0.03618818
## [1] 0.026538
## [1] 0.4607961
## [1] 0.3655006
## [1] 0.02533172
## [1] 0.1013269
## [1] 0.09047045
## [1] 0.02412545
## [1] 0.04583836
## [1] 0.2412545
## [1] 0.1182147
## [1] 0.7563329
## [1] 0.04101327
## [1] 0.4414958
## [1] 0.04101327
## [1] 0.01930036
## [1] 0.03136309
## [1] 0.06272618
## [1] 0.4583836
## [1] 0.026538
## [1] 0.06634499
## [1] 0.2846803
## [1] 0.08443908
## [1] 0.03860072
## [1] 0.3522316
## [1] 0.2364294
## [1] 0.03377563
## [1] 0.1411339
## [1] 0.09288299
## [1] 0.03739445
## [1] 0.03015682
## [1] 0.09408926
## [1] 0.2267793
## [1] 0.02412545
## [1] 0.1652593
## [1] 0.07599517
## [1] 0.1073583
## [1] 0.08564536
## [1] 0.02895054
## [1] 0.04342581
## [1] 0.026538
## [1] 0.07599517
## [1] 0.04463209
## [1] 0.1688782
## [1] 0.02774427
## [1] 0.106152
## [1] 0.1387214
## [1] 0.01809409
## [1] 0.3413752
## [1] 0.01809409
## [1] 0.02171291
## [1] 0.01568154
## [1] 0.04463209
## [1] 0.039807
## [1] 0.02533172
## [1] 0.053076
## [1] 0.02050663
## [1] 0.03015682
## [1] 0.03136309
## [1] 0.04342581
## [1] 0.009650181
## [1] 0.03256936
## [1] 0.07117008
## [1] 0.05066345
## [1] 0.02050663
## [1] 0.1544029
## [1] 0.1556092
## [1] 0.05910736
## [1] 0.013269
## [1] 0.03377563
## [1] 0.01930036
## [1] 0.02412545
## [1] 0.04342581
## [1] 0.0482509
## [1] 0.06031363
## [1] 0.06755127
## [1] 0.1158022
## [1] 0.212304
## [1] 0.01930036
## [1] 0.1145959
## [1] 0.05428227
## [1] 0.02291918
## [1] 0.0482509
## [1] 0.212304
## [1] 0.1833534
## [1] 0.1182147
## [1] 0.02171291
## [1] 0.02291918
## [1] 0.07961399
## [1] 0.02171291
## [1] 0.01688782
## [1] 0.07599517
## [1] 0.03618818
## [1] 0.09770808
## [1] 0.2907117
## [1] 0.02412545
## [1] 0.04583836
## [1] 0.1109771
## [1] 0.1507841
## [1] 0.02895054
## [1] 0.02171291
## [1] 0.06875754
## [1] 0.03618818
## [1] 0.01930036
## [1] 0.02895054
## [1] 0.039807
## [1] 0.1278649
## [1] 0.1375151
## [1] 0.01930036
## [1] 0.26538
## [1] 0.04221954
## [1] 0.02533172
## [1] 0.3437877
## [1] 0.05910736
## [1] 0.04342581
## [1] 0.0615199
## [1] 0.1218335
## [1] 0.05066345
## [1] 0.03498191
## [1] 0.0880579
## [1] 0.02291918
## [1] 0.06513872
## [1] 0.03739445
## [1] 0.05066345
## [1] 0.06272618
## [1] 0.03739445
## [1] 0.05548854
## [1] 0.1833534
## [1] 0.07840772
## [1] 0.1411339
## [1] 0.06393245
## [1] 0.01930036
## [1] 0.2762364
## [1] 0.3486128
## [1] 0.053076
## [1] 0.02412545
## [1] 0.1399276
## [1] 0.2738239
## [1] 0.08564536
## [1] 0.1037394
## [1] 0.2810615
## [1] 0.09891435
## [1] 0.106152
## [1] 0.1531966
## [1] 0.07599517
## [1] 0.2002413
## [1] 0.02895054
## [1] 0.2870929
## [1] 0.1085645
## [1] 0.04704463
## [1] 0.1314837
## [1] 0.04221954
## [1] 0.053076
## [1] 0.04704463
## [1] 0.07599517
## [1] 0.053076
## [1] 0.08564536
## [1] 0.07720145
## [1] 0.04342581
## [1] 0.106152
## [1] 0.03256936
## [1] 0.039807
## [1] 0.1519903
## [1] 0.07237636
## [1] 0.1519903
## [1] 0.0615199
## [1] 0.04221954
## [1] 0.02533172
## [1] 0.026538
## [1] 0.03860072
## [1] 0.01688782
## [1] 0.03618818
## [1] 0.03256936
## [1] 0.1423402
## [1] 0.0482509
## [1] 0.1688782
## [1] 0.08323281
## [1] 0.053076
## [1] 0.09891435
## [1] 0.03860072
## [1] 0.1471653
## [1] 0.02533172
## [1] 0.04221954
## [1] 0.0615199
## [1] 0.04704463
## [1] 0.06875754
## [1] 0.01930036
## [1] 0.04583836
## [1] 0.07840772
## [1] 0.1158022
## [1] 0.04101327
## [1] 0.2279855
## [1] 0.05428227
## [1] 0.03256936
## [1] 0.03256936
## [1] 0.03136309
## [1] 0.04463209
## [1] 0.039807
## [1] 0.03015682
## [1] 0.03377563
## [1] 0.02412545
## [1] 0.04221954
## [1] 0.05790109
## [1] 0.05669481
## [1] 0.04463209
## [1] 0.05066345
## [1] 0.04583836
## [1] 0.01930036
## [1] 0.03256936
## [1] 0.05428227
## [1] 0.04221954
## [1] 0.02412545
## [1] 0.05548854
## [1] 0.05186972
## [1] 0.07599517
## [1] 0.05669481
## [1] 0.03015682
## [1] 0.08685163
## [1] 0.02050663
## [1] 0.1797346
## [1] 0.0747889
## [1] 0.145959
## [1] 0.0615199
## [1] 0.1182147
## [1] 0.02291918
## [1] 0.1254524
## [1] 0.05669481
## [1] 0.02291918
## [1] 0.0615199
## [1] 0.06755127
## [1] 0.05548854
## [1] 0.03739445
## [1] 0.026538
## [1] 0.026538
## [1] 0.02050663
## [1] 0.03256936
## [1] 0.05186972
## [1] 0.01447527
## [1] 0.05669481
## [1] 0.02171291
## [1] 0.053076
## [1] 0.06393245
## [1] 0.02774427
## [1] 0.053076
## [1] 0.02533172
## [1] 0.01688782
## [1] 0.06272618
## [1] 0.02291918
## [1] 0.053076
## [1] 0.026538
## [1] 0.0880579
## [1] 0.01568154
## [1] 0.03377563
## [1] 0.04342581
## [1] 0.1073583
## [1] 0.05790109
## [1] 0.02412545
## [1] 0.08202654
## [1] 0.1881785
## [1] 0.1085645
## [1] 0.01930036
## [1] 0.06755127
## [1] 0.039807
## [1] 0.039807
## [1] 0.03618818
## [1] 0.06634499
## [1] 0.02533172
## [1] 0.04704463
## [1] 0.06875754
## [1] 0.01688782
## [1] 0.05790109
## [1] 0.04583836
## [1] 0.04463209
## [1] 0.1266586
## [1] 0.05548854
## [1] 0.03136309
## [1] 0.03015682
## [1] 0.1254524
## [1] 0.03015682
## [1] 0.05669481
## [1] 0.05066345
## [1] 0.02171291
## [1] 0.04101327
## [1] 0.07117008
## [1] 0.04463209
## [1] 0.04463209
## [1] 0.09529554
## [1] 0.03015682
## [1] 0.03860072
## [1] 0.02291918
## [1] 0.1351025
## [1] 0.09529554
## [1] 0.02050663
## [1] 0.02533172
## [1] 0.03136309
## [1] 0.053076
## [1] 0.02412545
## [1] 0.02412545
## [1] 0.02412545
## [1] 0.0615199
## [1] 0.08564536
## [1] 0.03136309
## [1] 0.1544029
## [1] 0.039807
## [1] 0.02050663
## [1] 0.06272618
## [1] 0.04463209
## [1] 0.119421
## [1] 0.1001206
## [1] 0.06031363
## [1] 0.106152
## [1] 0.02895054
## [1] 0.0747889
## [1] 0.01930036
## [1] 0.0482509
## [1] 0.04342581
## [1] 0.03739445
## [1] 0.02533172
## [1] 0.01809409
## [1] 0.01809409
## [1] 0.1025332
## [1] 0.053076
## [1] 0.02412545
## [1] 0.04463209
## [1] 0.07237636
## [1] 0.039807
## [1] 0.039807
## [1] 0.01809409
## [1] 0.02774427
## [1] 0.04221954
## [1] 0.02291918
## [1] 0.02171291
## [1] 0.05790109
## [1] 0.02412545
## [1] 0.02774427
## [1] 0.05790109
## [1] 0.02533172
## [1] 0.06634499
## [1] 0.02412545
## [1] 0.04101327
## [1] 0.02774427
## [1] 0.026538
## [1] 0.01809409
## [1] 0.03136309
## [1] 0.04463209
## [1] 0.06996381
## [1] 0.02895054
## [1] 0.03015682
## [1] 0.02050663
## [1] 0.08202654
## [1] 0.04221954
## [1] 0.02895054
## [1] 0.07237636
## [1] 0.03136309
## [1] 0.08926417
## [1] 0.03860072
## [1] 0.1978287
## [1] 0.04945718
## [1] 0.02291918
## [1] 0.02050663
## [1] 0.02171291
## [1] 0.02533172
## [1] 0.06272618
## [1] 0.03256936
## [1] 0.08564536
## [1] 0.05066345
## [1] 0.02291918
## [1] 0.03015682
## [1] 0.01809409
## [1] 0.06513872
## [1] 0.01688782
## [1] 0.03256936
## [1] 0.04342581
## [1] 0.03136309
## [1] 0.03136309
## [1] 0.04463209
## [1] 0.04704463
## [1] 0.04342581
## [1] 0.0482509
## [1] 0.02050663
## [1] 0.026538
## [1] 0.026538
## [1] 0.03136309
## [1] 0.01930036
## [1] 0.0482509
## [1] 0.026538
## [1] 0.02412545
## [1] 0.02291918
## [1] 0.01930036
## [1] 0.03256936
## [1] 0.053076
## [1] 0.02895054
## [1] 0.0482509
## [1] 0.02774427
## [1] 0.03498191
## [1] 0.05428227
## [1] 0.03377563
## [1] 0.03136309
## [1] 0.03498191
## [1] 0.01809409
## [1] 0.02533172
## [1] 0.02050663
## [1] 0.03498191
## [1] 0.03860072
## [1] 0.03136309
## [1] 0.06513872
## [1] 0.03739445
## [1] 0.02171291
## [1] 0.03860072
## [1] 0.02412545
## [1] 0.1399276
## [1] 0.02291918
## [1] 0.026538
## [1] 0.039807
## [1] 0.02050663
## [1] 0.03377563
## [1] 0.1314837
## [1] 0.0880579
## [1] 0.02533172
## [1] 0.026538
## [1] 0.02050663
## [1] 0.02050663
## [1] 0.05066345
## [1] 0.04101327
## [1] 0.03015682
## [1] 0.01688782
## [1] 0.09047045
## [1] 0.06875754
## [1] 0.02171291
## [1] 0.03136309
## [1] 0.02895054
## [1] 0.03739445
## [1] 0.09047045
## [1] 0.04583836
## [1] 0.02774427
## [1] 0.01447527
## [1] 0.02533172
## [1] 0.03015682
## [1] 0.05186972
## [1] 0.06755127
## [1] 0.02895054
## [1] 0.03618818
## [1] 0.01568154
## [1] 0.02291918
## [1] 0.01447527
## [1] 0.03618818
## [1] 0.03015682
## [1] 0.04101327
## [1] 0.02533172
## [1] 0.02291918
## [1] 0.02171291
## [1] 0.01809409
## [1] 0.026538
## [1] 0.02774427
## [1] 0.03256936
## [1] 0.02774427
## [1] 0.05428227
## [1] 0.03618818
## [1] 0.02412545
## [1] 0.013269
## [1] 0.02533172
## [1] 0.04342581
## [1] 0.03498191
## [1] 0.02774427
## [1] 0.02412545
## [1] 0.026538
## [1] 0.02412545
## [1] 0.02412545
## [1] 0.02412545
## [1] 0.02412545
## [1] 0.03015682
## [1] 0.02412545
## [1] 0.03136309
## [1] 0.03377563
## [1] 0.02291918
## [1] 0.03377563
## [1] 0.02774427
## [1] 0.026538
## [1] 0.07358263
## [1] 0.0747889
## [1] 0.02050663
## [1] 0.03618818
## [1] 0.026538
## [1] 0.02895054
## [1] 0.03256936
## [1] 0.013269
## [1] 0.03136309
## [1] 0.03136309
## [1] 0.02774427
## [1] 0.01568154
## [1] 0.05910736
## [1] 0.01930036
## [1] 0.02291918
## [1] 0.03015682
## [1] 0.03498191
## [1] 0.01930036
## [1] 0.02533172
## [1] 0.02533172
## [1] 0.02412545
## [1] 0.03256936
## [1] 0.026538
## [1] 0.03739445
## [1] 0.0615199
## [1] 0.02412545
## [1] 0.02050663
## [1] 0.01688782
## [1] 0.02533172
## [1] 0.02050663
## [1] 0.02050663
## [1] 0.02774427
## [1] 0.03739445
## [1] 0.053076
## [1] 0.03015682
## [1] 0.03256936
## [1] 0.03015682
## [1] 0.01809409
## [1] 0.02291918
## [1] 0.02050663
## [1] 0.01568154
## [1] 0.03377563
## [1] 0.03860072
## [1] 0.02774427
## [1] 0.03015682
## [1] 0.02412545
## [1] 0.04342581
## [1] 0.05186972
## [1] 0.02412545
## [1] 0.01688782
## [1] 0.01930036
## [1] 0.03136309
## [1] 0.04704463
## [1] 0.01688782
## [1] 0.02050663
## [1] 0.03377563
## [1] 0.02171291
## [1] 0.02050663
## [1] 0.02171291
## [1] 0.02774427
## [1] 0.03860072
## [1] 0.03498191
## [1] 0.02171291
## [1] 0.03015682
## [1] 0.02895054
## [1] 0.02291918
## [1] 0.02050663
## [1] 0.02291918
## [1] 0.02774427
## [1] 0.02291918
k=0
output <- matrix(ncol=2, nrow=571)
for(i in classifier$tables){
  k=k+1
  output[k,1]<-i["1","Yes"]
  output[k,2]<-i["0","Yes"]}
output<-as.data.frame(output)

10. Bibliographie

Arnold, Taylor. 2017. “A Tidy Data Model for Natural Language Processing Using cleanNLP.” CoRR abs/1703.09570. http://arxiv.org/abs/1703.09570.

Deveaud, Romain, Eric SanJuan, and Patrice Bellot. 2014. “Accurate and Effective Latent Concept Modeling for Ad Hoc Information Retrieval.” Document Numérique 17 (1): 61–84. https://doi.org/10.3166/dn.17.1.61-84.

Duval, Dominic, and François Pétry. 2016. “L’analyse Automatisée Du Ton Médiatique : Construction et Utilisation de La Version Française Du Lexicoder Sentiment Dictionary.” Canadian Journal of Political Science 49 (2): 197–220. https://doi.org/10.1017/S000842391600055X.

Eranti, Veikko, and Markku Lonkila. 2015. “The Social Significance of the Facebook Like Button.” First Monday 20 (6). https://doi.org/10.5210/fm.v20i6.5505.

Havlena, William J., and Morris B. Holbrook. 1986. “The Varieties of Consumption Experience: Comparing Two Typologies of Emotion in Consumer Behavior.” Journal of Consumer Research 13 (3): 394. https://doi.org/10.1086/209078.

ISABELLE SERCA. 2010. LES COUTURES APPARENTES DE LA RECHERCHE PROUST ET LA PONCTUATION. « Recherches Proustiennes ». Paris: Honoré Champion.

Marneffe, Marie-Catherine de, and Christopher D. Manning. 2008. “Stanford Typed Dependencies Manual.” Stanford Parser V. 1.6.2, no. Revised for in February 2010 (September).

Mohammad, Saif M., and Peter D. Turney. 2013. “Crowdsourcing a Word-Emotion Association Lexicon.” Computational Intelligence 29 (3): 436–65.

Plutchik, Robert. 1982. “A Psychoevolutionary Theory of Emotions.” Social Science Information 21 (4-5): 529–53. https://doi.org/10.1177/053901882021004003.

Westbrook, Robert A., and Richard L. Oliver. 1991. “The Dimensionality of Consumption Emotion Patterns and Consumer Satisfaction.” Journal of Consumer Research 18 (1): 84. https://doi.org/10.1086/209243.