Tag Archives: mots

De quoi a parlé le Président de la République pendant 5 ans ?

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")

Marc Levy n’utilise que 150 mots ?

L’intérêt des voyages en avion, c’est que ça offre beaucoup de temps pour lire… Et comme j’avais fini mon polar arrivé à Paris, je me suis rabattu sur la version papier de Rue89. Et un article m’a beaucoup plus, où l’on apprenait que les hommes ne pouvaient pas lire Marc Levy… Ne l’ayant jamais lu moi même je ne suis pas apte pour juger, mais une raison évoquée était qu’il utilisait trop peu de mots… En particulier, l’article reprenait une déclaration de François Busnel qui affirmait (ici) “Ces livres sont cousus de fil blanc et écrits avec 150 mots. C’est comme la série Les Feux de l’amour.”

Ah, voilà une affirmation qui m’intéresse en tant que statisticien… combien les écrivains utilisent de mots dans leurs romans…?

Si on regarde Le Voleur d’Ombre, il contient environ 64 000 mots, en tout. Parmi ces mots, on en compte 6 830 uniques (en sachant qu’ici abandonnèrent,abandonne et abandonnait, par exemple, sont considérés comme différents). Le code R est d’ailleurs assez simple,

> livre=scan("Levy-Marc-Le voleur d'ombres.txt", 
+ what=character())
> minlivre=tolower(livre)
> TABLE=rev(sort(table(minlivre)))
> length(TABLE)
[1] 6827
> length(livre)
[1] 64122
> D1=data.frame(mot=names(x),N=as.numeric(x),
+ Freq=as.numeric(x)/sum(x)*100)

(je tiens à préciser que j’ai remplacé les virgules, les points, les apostrophes, etc par des espaces, dans le texte de base afin de récupérer dans le fichier simplement des mots, sans symboles – et j’ai transformé les mots pour n’avoir que des minuscules).

Histoire de comparer avec d’autres auteurs, j’ai pris un auteur plus ancien (pour éviter les soucis de droits d’auteurs, car les textes se trouvent en ligne), à savoir Théophile Gautier, et plus particulièrement son Capitaine Fracasse (oui, on reste dans les pavés). En tout, 127 177 mots, dont 15 595 uniques. Si on compare les courbes de Lorentz, on obtient le graphique suivant,

Les 20 mots les plus fréquents sont (en nombre et surtout en fréquence) respectivement

cbind(D1[1:20,],D2[1:20,])
    mot    N      Freq mot    N      Freq
1    de 2310 3.6025077  de 6284 4.9411450
2    la 1591 2.4812077  et 3862 3.0367126
3    je 1534 2.3923147  la 3720 2.9250572
4     à 1270 1.9805995  le 3235 2.5436989
5    le 1165 1.8168491   à 2429 1.9099365
6    et 1121 1.7482299 les 2214 1.7408808
7   que 1096 1.7092418   d 2192 1.7235821
8     j  889 1.3864196  un 2075 1.6315843
9     l  873 1.3614672   l 2055 1.6158582
10   un  857 1.3365148 une 1678 1.3194210
11   en  780 1.2164312  en 1497 1.1770996
12   me  736 1.1478120  il 1494 1.1747407
13  pas  701 1.0932285 des 1455 1.1440748
14  les  665 1.0370856  se 1178 0.9262681
15   il  654 1.0199308 que 1085 0.8531417
16 elle  653 1.0183712  du 1072 0.8429197
17   tu  596 0.9294782 qui 1064 0.8366293
18   ai  588 0.9170020 son  971 0.7635028
19 dans  549 0.8561804   s  922 0.7249739
20    d  542 0.8452637  qu  915 0.7194697

On retrouve malgré tout que Marc Levy utilise une autre manière d’écrire, qu’il utilise beaucoup le je ou le moi (par rapport à Théophile Gautier). Mais critiquer car il utilise peu de mots me semble un peu léger…. il semble en utiliser autant que des vrais grands écrivains….