Concours Reine Élisabeth : Création de la base de donnée.

Ahhh, le concours Reine Élisabeth. Le plus prestigieux concours de musique du monde. Il y a de tout, du chant, du violon, du piano et de la composition. Il y a même (enfin) du violoncelle… Enfin !!!!

Bien que je m’intéressais surtout au piano, il m’était arrivé d’écouter de tout.  J’ai toujours trouvé les imposés totalement immonde et j’avais un faible devant les oeuvres de Chopin bien interprétées (et ce dernier mot est important. Merde, à leurs niveaux, certains devraient avoir honte).

Puis en 2013, Boris Giltburg interpréta l’oeuvre de Beethoven suivante :

Ce n’était pas la meilleure sonate de Beethoven à mon gout (sur 32, elles ne peuvent pas toutes être excellentes.). Mais surtout, à la fin de la pièce, le commentateur (RTBF je pense) a dit une phrase qui m’est resté depuis :     « Il a assuré.»

Assuré ? comment ça assuré ? Y aurait-il des morceaux plus simples que d’autres ? Puis en réfléchissant, j’avais rarement entendu mon compositeur préféré durant ce concours :  le grand Chopin.

Était-ce vrai ? Chopin était-il boudé des épreuves publiques ? Y-avait il des morceaux plus joués que d’autres ? Il fallait que je vérifie.

Le site et les données

Sur le site du concours Reine Élisabeth, on pouvait y trouver toutes les informations … en vrac. Toutes les oeuvres se trouvaient ici. Et chaque oeuvre avait sa propre fiche ultra-bien faite. Par exemple le prélude et Fugue n. 12 en fa mineur BWV de Johann Sebastian Bach contient de chouettes informations telles que les instruments nécessaires et les activités (quand cela avait été joué et par qui).

De ces pages, on pouvait même aller sur la page du compositeur qui contenaient d’autres informations telles que les dates de naissance et de mort.

Bref tout était là. Malheureusement, il n’y avait pas de coin open-data sur le site (du moins, je n’ai pas trouvé). Pas le choix,  il faudra scripter.

En analysant un peu le site, il s’agit clairement d’un site généré via un framework (Django ou autre). Par contre, en regardant les sources, je n’ai pas trouvé lequel. Qu’importe.

Le script est ici (vive GitHub). Il n’est pas compliqué (quelques heures de programmation quand même) fait les choses suivantes (en vrac) :

  • Il parcourt toutes les fiches en faisant grimper un compteur de 0 à 10000. Chaque fiche pouvant être atteinte via le html suivant : http://cmireb.be/cgi?lg=fr&pag=1942&tab=227&rec=36&frm=0&par=secorig1656 ou le paramètre rec est le paramètre de la fiche.
  • Il extrait de la fiche les informations nécessaires (instrument, activités, nom de l’auteur, etc…).
  • Il va aussi chercher sur la page du compositeur, sa date de naissance et de mort.
  • Il crée une base de données sqlite3 avec tout dedans.
  • Il va chercher des informations sur wikipedia.
  • Il sauvegarde les pages téléchargées dans un dossier (pour accélérer).
  • Plein d’autres choses.

Spéciale dédicace à cette fonction :

def replace_letter(strg):
global issue
a = strg.strip()
if a == « Première épreuve » : a = « Première épreuve »
if a == « Michael Ponti » : a = « Michaël Ponti »
if a == « Lukas Vondracek » : a = « Lukáš Vondráček »
if a == « Pierre Volondat » : a = « Pierre-Alain Volondat »
if a == « Mikhail Faerman » : a = « Mikhaïl Faerman »
if a == « Eketarina Novitzkaya » : a = « Ekaterina Novitskaya »
if a == « Concert de lauréats » : a = « Concert de lauréats »
if a == « Récital du prix Musiq’3 » : a = « Récital du prix Musiq3 »
if a == « Zbigniew Tursky » : a = « Zbigniew Turski »
if a == « Emil Guilels » : a = « Emil Gilels »

a = a.replace(« Ã© », »é »).replace(« Ã¨ », »è »).replace(‘”’, »).replace(‘“’, »).replace(‘ÿ’,’ÿ’).replace(« Ã§ », »ç »).replace(« Ã¢ », »â »).replace(« Ã« », »ë »).replace(‘ö’,’ö’).replace(‘ó’,’ó’).replace(‘ñ’,’ñ’).replace(‘ï’,’ï’).replace(‘ – récital’, »)

if re.search(‘[^0-9a-zA-Zû\ \.éèêë\-aáà\:uù\,óůü\/\(\)\?ôçö&\!üïÜÖîœääìÿòřáěčÈòÁıöŞł…ÔřáířáÉ\’ñflý°\[\]¿\%ßFånämöŒøâme∆ÈÏ’ÄúlÀ\–Ž«»`ňáąCançãoGarõaŠirokérukáširt’s ‘igaroyžmná’!Dzieciątkomójmaleńki]+’, a) is not None:
print(« \n\n-> »,a, »\n\n »)
issue+= « \n »+a
return a;

Après cela, j’ai rajouté à la main certaines informations telles que

  • le type de concours pour l’année x (piano, violon, etc…)
  • les gagnants (via wikipedia)

Le règlement

Les règlements du concours se suivent et se ressemblent et la direction impose balise les morceaux possibles en fonction du classement. Celui du piano pour 2013 était:

  • Le dvd de présentation doit contenir des morceaux du genre
    • un prélude et fugue du « Clavier bien tempéré » de J.S. Bach ;
    • une sonate classique (Haydn, Mozart, Beethoven ou Schubert) ;
    • une étude de Chopin ;
    • une œuvre au choix pour piano solo.
  • Pour la première épreuve
    • un prélude et fugue du « Clavier bien tempéré » de J.S. Bach ;
    • le premier mouvement d’une sonate classique (Haydn, Mozart, Beethoven ou Schubert) ;
    • une étude de Chopin
    • une étude de Liszt ;
    • une étude de Debussy ;
    • une étude choisie parmi celles de Bartók, Dusapin, Ligeti, Messiaen, Ohana, Prokofiev, Rachmaninov, Rautavaara, Skryabin ou Stravinsky.
  • Pour la demi-finale
    • Une oeuvre imposée immonde inédite
    • Un Concerto de Mozart
  • Et enfin, pour la finale
    • une sonate classique (Haydn, Mozart, Beethoven ou Schubert).
    • une œuvre inédite pour piano
    • un concerto au choix du candidat

Chopin est bien là, sur dvd et durant la première épreuve. (du moins ces études…)

En Conclusion

Il m’aura fallu quelques heures de travail pour faire le script. C’est malheureusement du reverse engineering et donc probablement que pas mal d’erreurs s’y sont glissées. Pour ceux qui veulent, le tout se trouve ici. Comme d’ab quoi :-D.

À noter que le script met une heure pour rapatrier les 9000 fichiers la première fois qu’il est lancé (après tout ce fait en local).

Prochaine étape, les statistiques.