Comment parle un président français le 31 décembre ?

Il y a pas mal d’agitation présidentielle sur les blogs (français) cette semaine, que ce soit au sujet des 30 ans de l’élection de François Mitterrand, ou l’annonce de la date de la prochaine élection présidentielle (et probablement d’autres raisons). Un peu naïvement je me suis demandé si les présidents étaient vraiment si différents que ça ? Ou plus précisément, est-ce qu’une fois investis par la fonction, tous ces hommes ne se comporteraient-ils pas – finalement – tous pareils ?

Pour cela je me suis simplement demandé si on pouvait distinguer les discours des différents Présidents. J’ai donc pris quelques discours entendus les 31 décembre, lors de vœux retransmis à la télévision (en ligne ici, en excluant les discours aux forces armées, qui me semblaient biaiser un peu mon échantillon). On commence par récupérer la liste de tous les mots prononcés (les fichiers csv sont en ligne ici)

setwd("/home/arthur/Documents/r-data/voeux/")
FILES=list.files()
library(tau)
BASE=scan(FILES[1],what="character")
WORD=fixEncoding(BASE,latin1=TRUE)
 for(i in 2:length(FILES)){
BASE=scan(FILES[i],what="character")
 WORD=c(WORD,fixEncoding(BASE,latin1=TRUE))
 }

Ensuite on regarde le top 500 (j’exclue les mots communs genre le ou la, mais je garde les pronoms, comme mon ou notre),

> WORD=toupper(WORD)
> LW=rev(sort(table(WORD)))
> LISTE=names(LW[1:500])
> LISTE=LISTE[-c(1,2,3,4,5,6,7,8,9,10,11,14,15,18,19,20,21,22,23,25,
               27,43,40,36,41,60)]
> LISTE[1:25]
 [1] "NOUS"   "JE"     "VOUS"   "NOTRE"  "PLUS"   "FRANCE" "PAS"    "NOS"   
 [9] "EST"    "AVEC"   "SE"     "MES"    "CEUX"   "MAIS"   "SONT"   "OU"    
[17] "CETTE"  "AUSSI"  "TOUS"   "SUR"    "SI"     "PAYS"   "LEUR"   "FAIRE" 
[25] "VOTRE"

et créer une base de décompte, par discours,

ANNEE=as.numeric(substr(FILES,6,7))
AN=1900+ANNEE*(ANNEE>15)+(100+ANNEE)*(ANNEE<15)
PRES=c("CHIRAC","CHIRAC","CHIRAC","SARKOZY","SARKOZY",
"SARKOZY","VGE","VGE","VGE","MITTERRAND","MITTERRAND",
"MITTERRAND","MITTERRAND","MITTERRAND")
NOM=paste(PRES,AN,sep="-")
COMPTE=matrix(NA,length(FILES),length(LISTE))
for(i in 1:length(FILES)){
BASE=scan(FILES[i],what="character")
WORD=toupper(fixEncoding(BASE,latin1=TRUE))
for(j in 1:length(LISTE)){
COMPTE[i,j]=sum(WORD==LISTE[j])
}}
colnames(COMPTE)=LISTE
rownames(COMPTE)=NOM

On peut alors faire tourner des procédures d’analyse de données, comme une ACP

library("FactoMineR")
res.pca = PCA(COMPTE, scale.unit=TRUE, ncp=5, graph=FALSE)
plot.PCA(res.pca, axes=c(1, 2), choix="ind")

Les projections des individus (les discours) sont les suivantes

alors que celles pour les variables (les mots) sont, toujours sur les deux premiers axes factoriels,

On peut jouer des heures à se demander qui dit quoi, mais ce qui m’intéressait était de voir si les présidents étaient proches, en terme de discours. On peut alors faire des classifications hiérarchiques,

DISTANCE = dist(COMPTE)
h = hclust(DISTANCE) 
plot(as.dendrogram(h), horiz = TRUE)

ou ici avec un autre algorithme de classification

On notera les regroupements dépendent peu des distances et des méthodes de constitution de classes… et que les regroupements se font par président: tous les discours de François Mitterrand semblent proches, et tous ceux de Jacques Chirac aussi (en tous les cas ceux que j’ai téléchargé, mais l’analyse n’est pas exhaustive). On notera aussi la proximité entre Valéry Giscard d’Estaing l’année de son élection, et Nicolas Sarkozy l’année de son élection….

C’est finalement un peu rassurant de voir que les Présidents ne sont pas tous les mêmes, et qu’on peut les reconnaitre en fonction de leur discours… c’est tout du moins la prochaine étape, ou on va voir si on peut affecter des nouveaux discours (que je n’ai pas utilisés pour l’analyse) dans des classes, et repérer qui l’a écrit…


One thought on “Comment parle un président français le 31 décembre ?”

  1. Bonjour,

    Juste pour dire qu’il existe un package R qui permet de faire du text mining (package tm).

    Cordialement.

Leave a Reply

Your email address will not be published. Required fields are marked *