En juillet 2010, le Canard Enchaîné évoquait, en première page, les drôles de guerres de Nicolas Sarkozy. L’article notait que le Président de la République Française avait tendance à voir des guerres partout. N’ayant pas les outils d’archivage suffisant pour creuser, je me suis dis qu’il serait toutefois assez facile de voir si le Président de la République utilise souvent cette rhétorique guerrière dans ses discours. Un peu dans le même esprit qu’un vieux billet montrant que l’on peut reconnaître le Président au travers du discours de fin d’année.
On peut aller sur la page http://www.elysee.fr/ pour trouver des liens vers tous les discours du président, que l’on va scanner, et parcourir,
elysee=scan( "http://www.elysee.fr/president/les-actualites/ discours/discours.18.html", what="character") which(elysee=="id=\"mainContent\">") nl=nchar("/president/les-actualites/discours/") n=pmin(nchar(elysee),nl) L=which(substr(elysee,1,n)== "/president/les-actualites/discours/") LIST=elysee[L] ULIST=unique(LIST) ULIST=ULIST[-length(ULIST)] ULIST=strsplit(ULIST, '\'>') pages=unlist(ULIST) pages=pages[substr(pages,1,4)=="/pre"]
Ensuite, on va balayer toutes les pages de discours, et extraire les mots. La difficulté est d’identifier le discours, i.e. le début et la fin. Pour le début, je cherche les messieurs et les mesdames, voire les altesses et autre majestés. Dans un discours, je cherche un lieu car le discours ne commence pas par une interpellation, comme les autres. Quant à la fin, je cherche les vive et les merci. Là encore, il y a un discours qui ne fini pas. Je cherche alors un lien vers la biographie du président. Après, on cherche la date, souvent avant le début du discours.
longueur=0 DATEDISCOURS=rep(NA,length(pages)) for(i in 1:length(pages)){ discours=scan(paste("http://www.elysee.fr", pages[i],sep=""),what="character") if(length(discours)!=longueur){ (indice1=which(discours%in%c("Mesdames,","Mesdames","chers", "Madame","Monsieur","Messieurs","Majesté,","Altesse,","L'Ile"))) (indice2=which(discours%in%c("Vive","remercie."))) (indice3=which(discours== "href='/president/la-presidence/le-president-de-la-republique/ nicolas-sarkozy-biographie/nicolas-sarkozy- biographie-officielle.482.html'")) if(length(indice2)==0){indice2=indice3[length(indice3)-1]} LD=discours[(indice1[1]+2):(indice2[1]-1)] banir=c("<br","<p>","</p>","/>","--","-",":") sentence=LD[-which(LD%in%banir)] #mots=lower.case(mots) sentence = gsub('[[:punct:]]', '', sentence) sentence = gsub('[[:cntrl:]]', '', sentence) sentence = gsub('\\d+', '', sentence) #sentence = lower.case(sentence) sentence = tolower(sentence) word.list = strsplit(sentence, '\\s+') words = unlist(word.list) sdate=discours[indice1[1]+((-200):1)] isd=which(sdate%in%c("Lundi","Mardi","Mercredi","Jeudi", "Vendredi","Samedi","Dimanche")) MOIS=c("janvier","février","mars","avril","mai","juin", "juillet","août","septembre","octobre","novembre","décembre") mois=which(MOIS==sdate[isd+2]) date=paste(mois,"-",substr(sdate[isd+3],1,4),sep="") if(length(mois)==0){date="99-9999"} if(length(mois)>0){if(mois<10){date=paste("0",mois,"-", substr(sdate[isd+3],1,4),sep="")}} print(paste(i," --- ",date," ----- ",length(words))) write.table(words,paste("/home/discours/discours",i,".txt",sep="")) DATEDISCOURS[i]=date} longueur=length(discours) }
La stratégie est de stocker les listes de mots, discours par discours, dans des fichiers séparés. On va ensuite aller balayer ces fichiers, à la recherche de mots intéressants. C’est ce que fait la petite fonction suivante
DATEDISCOURS0=DATEDISCOURS for(i in 1:length(DATEDISCOURS0)){ if(is.na(DATEDISCOURS0[i])){ DATEDISCOURS0[i]=DATEDISCOURS0[i=1]} if(DATEDISCOURS0[i]=="-9900"){ DATEDISCOURS0[i]=DATEDISCOURS0[i=1]} } comptage=function(MOT="devoir",normalise=TRUE){ DATES=paste(rep(c(paste("0",1:9,sep=""), 10:12),6),rep(2007:2012,each=12),sep="-") COMPTE=rep(0,length(DATES)) COMPTENorm=COMPTE Li=(1:length(pages))[-133] for(i in Li){ if(is.na(DATEDISCOURS[i])==FALSE){ listemots=read.table(paste( "/home/discours/discours",i,".txt",sep="")) COMPTE[DATES==DATEDISCOURS0[i]]= COMPTE[DATES==DATEDISCOURS0[i]]+ sum(listemots==MOT) COMPTENorm[DATES==DATEDISCOURS0[i]]= COMPTENorm[DATES==DATEDISCOURS0[i]]+ sum(listemots=="le")+sum(listemots=="la")+ sum(listemots=="une")+sum(listemots=="un") } } if(normalise==FALSE){ plot(seq(2007+1/24,2012+11/24,by=1/12), COMPTE[1:66],type="s",col="red",xlab="", ylab="",axes=FALSE); axis(1);axis(2);title(MOT)} if(normalise==TRUE){ ratio=COMPTE[1:66]/COMPTENorm[1:66]* mean(COMPTENorm[1:66]) ratio[is.nan(ratio)]=NA plot(seq(2007+1/24,2012+11/24,by=1/12), COMPTE[1:66]/COMPTENorm[1:66]*mean( COMPTENorm[1:66]),type="p",col="red",xlab="", ylab="",axes=FALSE); axis(1);axis(2);title(MOT) tp=seq(2007+1/24,2012+11/24,by=1/12) reg=lm(ratio~bs(tp,7)) lines(seq(2007+15/24,2012+3/24,by=1/24), predict(reg,newdata=data.frame(tp= seq(2007+15/24,2012+3/24,by=1/24)))) }}
Comme il n’y a pas des discours toutes les semaines, on peut normaliser le comptage. Pour ça, je compare avec un comptage de mots basiques, comme le, la, une ou un. Pour revenir à la question qui nous intéressait au début de ce billet,
comptage("guerre")
C’est un mot important, visiblement, qui a eu son heure de gloire fin 2007, que l’on retrouve ponctuellement depuis, et qui semble être revenu dans la bouche du Président au cours des derniers mois. Par comparaison, la justice est à peine plus évoquée, et semble en perte de vitesse depuis quelques années
comptage("justice")
On peut noter que la sécurité,
comptage("sécurité")
ou la police
comptage("police")
ont eu leur heure de gloire au milieu du quinquennat. Parmi les mots qui ont gardé une importance constante, mais à peine plus présent que la guerre, il y a le travail,
comptage("travail")
alors que la santé peine, mais remonte depuis quelques mois,
comptage("santé")
Cela dit, le Président veut que l’on soit heureux,
comptage("heureux")
même si cela reste globalement assez faible. Ou bien il nous dit qu’il est heureux. Parce qu’avec mon comptage je ne sais pas trop de qui il parle dans ses discours… Enfin… si, on le sait de qui il parle…
comptage("je")