Blog

Les Mystères percés

June 25, 2021

*Cet article présente le projet de création du site . Ce site propose des outils de recherche et de visualisation pour une base de données d'épisodes de pièces radiophoniques, disponible ici : [merger.min.json](https://chalier.fr/les-mysteres-perces/data/merger.min.json) (5,66 Mo).*

Introduction

« Parmi les chefs-d'œuvre du roman policier, Germaine Beaumont et Pierre Billard ont choisi pour vous ce soir… » Ces mots annoncent chaque épisode de la série de pièces radiophoniques *Les Maîtres du mystère*, diffusée sur les ondes de France Inter à compter du milieu des années cinquante. Avec plusieurs centaines d’épisodes réalisés sur plusieurs décennies, l’émission réunit « jusqu’à douze millions d’auditeurs, [dans] vingt-cinq pays ». Les épisodes sont des adaptations de polars, où des comédiens se donnent la réplique à l’instar d’une pièce de théâtre ; la narration avance au gré de ces voix, accompagnées de bruitages minimalistes et de courts intermèdes musicaux. On y retrouve une France bourgeoise des Trente Glorieuses, peuplée de maris et de femmes trompés, de comptables véreux, de maîtres-chanteurs, de malfrats gentilshommes ou pègreleux. Un monde romancé et daté, certes, mais aux envoûtantes ambiances rétro.

Devant une montagne de romans, Pierre Billard et Germaine Beaumont cherchent un sujet pour Les Maîtres du mystère
Devant une montagne de romans, Pierre Billard et Germaine Beaumont cherchent un sujet pour Les Maîtres du mystère – INA

Longtemps bercé par ces voix, j’ai commencé par écouter quelques épisodes achetés en cassette et en CD, sans suspecter l’ampleur de la collection totale. La première découverte a été une trentaine d’épisodes rendus disponibles sur Spotify. Certaines pièces dont je connaissait l’existence ne figurant pas dans cette liste, j’ai pu suspecter celle de nombreuses autres. Je me mets alors en quête d’une liste exhaustive. [La page Wikipédia dédiée](https://fr.wikipedia.org/w/index.php?title=Les_Maîtres_du_mystère&oldid=161733539) m’apprend que la série *Les Maîtres du mystère* succède à *Faits divers*, et précède *L’Heure du mystère* ainsi que *Mystère, mystère*, chacune portée par Pierre Billard ou Germaine Beaumont. Le nombre d’épisode n’est pas indiqué, mais une liste d’une centaine d’épisodes est fournie. Sur YouTube, beaucoup d’épisodes sont disponibles, mais il est assez difficile de se faire une idée de leur nombre sans analyses plus poussées. J’y découvre néanmoins l’existence d’une nouvelle série, *Les Mystères de l’été*, diffusée en parallèle des autres. Je me lance alors dans un premier projet : développer un *web scraper* – un programme dont le but est la récolte automatisée de données en lisant des sites webs – pour le [portail Inathèque](http://inatheque.ina.fr/), le catalogue des archives de l’INA, puis croiser les données récoltées avec des recherches YouTube afin d’y repérer les épisodes disponibles. Le dépôt pour ce projet – là où est enregistré le code source – est [ychalier/ina](https://github.com/ychalier/ina), et fait d’ailleurs partie des dépôts archivés dans le [GitHub Arctic Code Vault](https://archiveprogram.github.com/arctic-vault/) lors du 2020 GitHub Archive Program. Je récolte ainsi 491 épisodes. Malheureusement, la qualité des données récoltées est assez pauvre ; des incohérences, des redondances, mais surtout beaucoup d’épisodes manquent, notamment certains dont j’avais déjà connaissance. Malgré cela, le volume de données total est trop important pour permettre une annotation manuelle du contenu, rendant impossible la recherche d’épisode basée sur des critères précis tels que « l’enquête de police commence dès le début de l’épisode » ou « l’épisode ne contient que deux personnages ». Voici donc le point de départ de ce nouveau projet, dont l’objectif est de consolider cette base de données – ou plutôt, d’en créer une nouvelle, plus correcte et complète. Pour cela, j’ai regroupé et aligné plusieurs sources de données, étendues par un peu d’extraction d’information. Voyons cela en détails.

Acquisition des données

Je commence donc par faire un tour d’horizon des données disponibles sur Internet. Je connais déjà l’existence du catalogue **Inathèque** et des épisodes sur **YouTube**. J’omets les épisodes sur Spotify car, après de brèves recherches, vraiment peu d’épisodes s’y trouvent. Dans sa version actuelle, [la page Wikipédia des *Maîtres du mystère*](https://fr.wikipedia.org/w/index.php?title=Les_Maîtres_du_mystère) liste deux nouvelles sources : **madelen**, le service de streaming de l’INA, et le site internet **les-maitres-du-mystere.fr**. Enfin, j’aurai aimé trouver des informations en provenance directe de Radio France, mais ni les sites actuels ni les sites d’archives ne contiennent cela. Une bonne piste d’amélioration serait d’y trouver un contact pouvant éclairer un peu ma lanterne. Ces quatre sources identifiées, je m’attelle à la phase de « récolte » des données. Le but est d’obtenir, pour chaque source, une représentation standardisée et lisible par une machine des données qui s’y trouvent, sans en altérer la nature. Je pourrai alors exploiter ces données et y apporter des corrections *a posteriori*. Toutes les modifications aux données originales pourront donc être tracées et annulées indépendamment de la source.

les-maitres-du-mystere.fr

Je commence par cette source car c'est en la voyant que je me suis motivé pour reprendre et étendre les travaux de [ychalier/ina](https://github.com/ychalier/ina). Sur [ce site Internet](http://les-maitres-du-mystere.fr), outre la couleur de fond qui pique un peu les yeux, on trouve une liste de 954 épisodes, avec le titre, l’auteur de l’œuvre originale et la date de diffusion, le tout divisé en blocs de séries. Simple et efficace. De surcroît, j’y découvre l’existence d’une série encore antérieure à *Faits divers*, nommée *Le Jeu du mystère et de l’aventure*. La liste me semble alors être une bonne candidate pour être la liste exhaustive que je cherchais tant. *A posteriori*, cela se révélera assez vrai, avec seulement une petite poignée d’épisodes manquants (souvent des nouvelles versions d’épisodes déjà diffusées), ainsi que toute la série des *Nouveaux Maîtres du mystère*. Cependant, cette liste souffre de nombreuses erreurs, notamment typographiques. Des fautes dans les titres, des fautes dans les noms d’auteurs, et même dans les dates de diffusion. Un moyen très rapide de s’en rendre compte est de regarder les dates des épisodes « Le fauteuil des aveux », « Six gouttes d’huile » et « Le Père Noël s’en va-t-en guerre », vers la fin de la rubrique *Faits divers*. Les épisodes sont normalement classés par ordre croissant de date, hors ces épisodes sont datés en décembre 1956 et sont placés avant ceux de janvier 1956. Les épisodes de décembre 1955 étant manquants, il semble probable que l’année de ces épisodes soit erronée et qu’il s’agisse d’épisodes de 1955. Il s’agit là d’un exemple facilement détectable « à l’œil nu », mais durant mes analyses je découvrirai que ces erreurs sont courantes : beaucoup d’épisodes correspondent en tous points (titre et auteur) à un épisode d’une autre source, avec seulement un chiffre de décalage dans la date. Par exemple, 12/07/1965 au lieu de 12/0**8**/1965. À cela se rajoutent les libertés prisent sur les noms des épisodes, qui diffèrent souvent de la rédaction typique utilisée dans les autres sources. Et cerise sur le gâteau, les séries *Mystère, mystère* et *L’Heure du mystère* ne sont pas différenciées, et la série *Les Mystères de l’été* n’y figure même pas.

Boîtiers des cassettes des Maîtres du mystère
Boîtiers des cassettes des Maîtres du mystère, où l'on retrouve deux éléments importants de l'identité visuelle de cette série : la couleur jaune dorée et le masque de carnaval traversé par une plume

Compte tenu de ces problèmes, je cherche alors à en apprendre plus sur l’origine de cette source. Qui a créé cette liste ? Malheureusement, je ne dispose pas, à ce jour, d’une réponse. Sur la page Wikipédia qui m’a révélé l’existence de ce site, rien n’est mentionné. [La modification à l’article](https://fr.wikipedia.org/w/index.php?title=Les_Maîtres_du_mystère&diff=179684583&oldid=177668489) a été effectuée le 7 février 2021, par un utilisateur seulement identifié par son adresse IP, et dont c’est l’unique contribution. La modification ne concerne que l’ajout du site dans la liste des références, avec la mention « Source liste complète des épisodes ». Le site en lui-même ne laisse apparaître aucun nom de créateur. Le code source non plus. Le site ne dispose pas de certificat attestant de son identité. En dernier recours, je cherche donc des informations sur le détenteur du nom de domaine, grâce à une recherche [Whois](https://www.afnic.fr/noms-de-domaine/tout-savoir/whois-trouver-un-nom-de-domaine/?domaine=les-maitres-du-mystere+&tld=fr). J’obtiens alors des informations factices telles que le nom « Mystère », l’adresse « Rue du Mystère 75000 PARIS » ou le numéro de téléphone 01 23 45 67 89. [Chou blanc, donc](https://www.youtube.com/watch?v=W-s-hXO3D5k). Malgré tout, j’extrais toutes les informations du site, facilement car les données sont bien structurées. Ce nouveau jeu de données constituera donc une première base pour ma recherche d’informations. Pour le télécharger, cf. [Mise à disposition des données](#mise-a-disposition-des-donnees).

Inathèque

La seconde source et certainement la plus complète : [le catalogue officiel de l'INA](http://www.inatheque.fr/). L’extraction comporte deux phases. La première consiste à effectuer plusieurs recherches depuis le [portail](http://inatheque.ina.fr/) en utilisant des mots-clés qui feront ressortir les épisodes visés. Lors du projet [ychalier/ina](https://github.com/ychalier/ina), cette tâche est effectuée en simulant un navigateur web et des recherches manuelles via ce navigateur, ce qui n'est pas optimal. En effet, cela s’automatise en isolant la requête concernée depuis le navigateur : il s’agit d’une requête POST à l’adresse `http://inatheque.ina.fr/docListe/TV-RADIO`, avec un grand nombre de données de formulaire, ainsi qu'un cookie `PHPSESSID`. Cette requête renvoie le code HTML de la page de résultats demandée, contenant notamment un tableau listant les différentes notices INA correspondant à la recherche. J'effectue une recherche par série, en indiquant le nom de la série dans le champ de recherche. Je rencontre alors une première difficulté : le moteur de recherche du catalogue produit énormément de faux positifs. Une requête telle que « Le Jeu du mystère et de l'aventure » peut retourner plusieurs millions de résultats : chaque correspondance entre un mot du texte recherché et un mot d’un champ d’une entrée dans la base de données produit un résultat. Il faut donc procéder à un filtrage manuel pour sélectionner les résultats véritablement pertinent. Ce filtrage se base sur une correspondance entre des formes normalisées des noms de séries. En conséquence, même si cela me semble peu probable, il est possible que certaines données du catalogue ne figurent pas dans l’extrait ainsi formé.
Mise en scène de l'élaboration d'un scénario de Mystère, mystère
Mise en scène de l'élaboration d'un scénario de Mystère, mystère – Vidéo INA (11 min)
La deuxième phase consiste à envoyer une requête par notice identifiée dans les résultats. [Voici un exemple de page de notice](http://inatheque.ina.fr/doc/TV-RADIO/PH_PHD99215210/mort-de-vingt-et-un-cyclistes). On y trouve un tableau renseignant plusieurs champs. En analysant quelques exemples de notices, on se rend compte que les champs ainsi présents varient, ainsi que leur formatage. En effet, la plupart de ces champs ont dû être renseignés individuellement et manuellement, contiennent des erreurs ou des différences dans leur structure, ce qui va rendre leur extraction beaucoup (!) plus complexe. Depuis ces notices, je récolte donc l’identifiant, le titre propre, le titre de la collection, les dates de diffusion et d’enregistrement, le statut et la chaîne de diffusion, la durée et les descripteurs. Tous ces champs sont facilement extractibles. À cela s’ajoute le générique, dont voici un exemple : ```text REA,Billard Pierre ; PRO,Billard Pierre ; AUT,Frachet Pierre ; SON,Toursière Daniel ; INT,Valmy André (Bertholdi) ; INT,Michael Pierre (Félicien Pécuchet) ``` Le format est assez simple : des points-virgules séparent des couples indiquant le métier puis le nom des personnes impliquées, avec, dans le cas des interprètes, éventuellement le nom du personnage qu’ils incarnent. Cela s’extrait facilement à l’aide d’[expressions régulières](https://fr.wikipedia.org/wiki/Expression_r%C3%A9guli%C3%A8re). Reste à comprendre la signification des indicatifs métier. Si certains sont clairs, d’autres peuvent être plus difficiles à comprendre. Je n’ai pas trouvé de documentation explicite, mais en croisant les informations avec le site [madelen](https://madelen.ina.fr/), également de l’INA et reprenant une bonne partie de ses données, on peut identifier les intitulés exacts de ces rôles. À noter également que les noms des personnes sont écrits en commençant par le nom de famille. Dans un soucis de normalisation vis-à-vis des autres sources, j’ai voulu les remettre dans l’ordre, ce qui est simple lorsque le nom et le prénom sont chacun constitué d’un seul mot, mais qui se complique lorsque la tâche devient plus complexe. Il aura fallu un peu d’annotation manuelle pour terminer le travail. Mais ce n’est rien comparé au champ qui m’a donné le plus de fil à retordre : le résumé documentaire. ```text Pièce radiophonique policière proposée et réalisée par Pierre BILLARD, assisté de Suzanne David, "Mort de vingt-et un cyclistes" d'après un texte de Pierre FRACHET. - au début : générique des "Mystères de l'été" et annonce par un présentateur non identifié. - à 0'41 : l'industriel Bertholdi reçoit la visite d'un petit homme timide, écrasé par son propre ridicule, honteux de son propre nom -Pécuchet. Il est venu lui parler de sa femme, Marie-Claude, avec qui Bertholdi semble avoir eu une aventure, d'après les photos qu'il lui exhibe. Mais Bertholdi n'est pas homme à se soumettre à un chantage, ni à se laisser escroquer... - A 57'53 : générique de fin avec distribution et désannonce par un présentateur non identifié. Fin à 58'49. ``` Ce champ contient une description plus précise du contenu de l’épisode, dont des informations assez intéressantes pour mon objectif, comme la durée du générique de début, une accroche du scénario de l’épisode, la présence éventuelle de chroniques supplémentaires ou l’horodatage du générique de fin. Malheureusement, le formatage de ce champs varie beaucoup d’une notice à l’autre. Le format des horodatages change couramment de séparateur entre `'`, `h`, `:`, `''` ou `"`, parfois avec des espaces, parfois sans, parfois avec des mots intercalés. La phrase peut commencer par « Au début », « Début à », « Fin à » ou « À », normalement suivi de l’horodatage, mais parfois des mots se glissent entre les deux. Pire encore, dans l’exemple ci-dessus, les items de liste sont clairement identifiables grâce à un retour à la ligne. Eh bien, ce n’est pas toujours le cas. Il faut alors identifier les items grâce au tiret par lesquels ils commencent, malgré la présence fréquente de ces tirets dans le corps du texte. Un enfer pour s'y retrouver, donc. Cette extraction aura nécessité beaucoup d’allers-retours, pour détecter les erreurs d’extraction et les corriger le plus automatiquement possible, même si beaucoup d’efforts manuels ont été nécessaires. Pour télécharger le jeu de données complet, cf. [Mise à disposition des données](#mise-a-disposition-des-donnees).

madelen

Troisième source, le service de streaming de l’INA, [madelen](https://institut.ina.fr/offres-services/madelen). Parmi les contenus audios présents, on peut trouver des épisodes des séries *Faits divers*, *Les Maîtres du mystère*, *Les Mystères de l’été* et *Mystère, mystère*. Le catalogue est consultable en ligne, on peut donc facilement en extraire le contenu. Les données présentes sont sensiblement les mêmes que celles obtenues sur le site de l’Inathèque, hormis une présentation plus claire et plus orientée vers l’utilisateur – eg. les métiers, qui sont écrits en toutes lettres. Je peux donc réutiliser les mêmes outils d'extraction, et ainsi gagner beaucoup de temps. Enfin, il existe des pages listant les épisodes existant sur le site pour chaque série, ce qui permet d’être certain que l’on omet rien durant l’extraction. Cette source me permet de partiellement consolider les données que j’avais déjà, pour plus de 500 épisodes. Mais un autre apport précieux de ce site est la présence d’illustrations originales pour chaque série.

Illustrations originales sur madelen

Pour télécharger le jeu de données complet, cf. [Mise à disposition des données](#mise-a-disposition-des-donnees).

YouTube

La quatrième et dernière source : la plateforme de vidéos YouTube. Lors du projet précédent, j'avais déjà pu repérer des chaînes proposant certains épisodes. Après quelques recherches, une grande majorité des entrées présentes dans les sources précédentes y sont disponibles.

Chaîne Épisodes Vues totales
JL Linconi 732 9 628 994
Radio Madeleine / Pierre Bellemare 63 219 067
Phoniclib 54 278 485
Radio Minuit 1 721
Various Artists - Topic 1 85
Various Artists - Topic 1 71
Tables des chaînes YouTube présentes dans le jeu de données final ; certains épisodes sont disponibles sur plusieurs chaînes, auquel cas une seule occurrence figure dans les résultats ci-dessus

On notera l'importante contribution de [JL Linconi](https://www.youtube.com/channel/UCA1-BWDmFb1YyDslK2FAaoA), dont il existe [une interview](https://www.facebook.com/notes/353135115933903/) sur [une page Facebook tenue par des amateurs des *Maîtres du mystère*](https://www.facebook.com/lesmaitresdumysterefanpage/), page également citée dans les descriptions de ses vidéos. Malheureusement, cette recherche n'est que *probablement* complète, car il est difficile de faire confiance au moteur de recherche de YouTube pour nous donner exactement les résultats correspondant à notre requête, surtout s'il s'agit d'épisodes très peu vus. Afin de minimiser ces erreurs, j'effectue une recherche pour chaque épisode manquant en utilisant [l'API de recherche de YouTube](https://developers.google.com/youtube/v3/docs/search/list) – en plusieurs fois car les quotas ne permettent que 200 recherches par jour – pour finalement ne trouver que deux épisodes supplémentaires. Cette phase de recherches permet d'identifier un certain nombre de vidéos YouTube qui contiennent des épisodes des différentes séries en question. Grâce à l'outil [youtube-dl](https://youtube-dl.org/), je télécharge les métadonnées de chacune de ces vidéos, directement au format JSON, facilement exploitable donc. ```bash youtube-dl --write-info-json --skip-download --output "%(id)s.%(ext)s" "https://www.youtube.com/watch?v=UjxQHpwVIOc" ``` Voici un extrait de ces données : ```json { "dislike_count": 12, "categories": [ "Film & Animation" ], "description": "Les Maîtres du mystère - Le Parloir -\n\naudio 31 août 1965 - 01h 00min 24s…", "thumbnail": "https://i.ytimg.com/vi/UjxQHpwVIOc/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBLrrRLArWvbE1Xh6dUBW2LKdcAwA", "channel_url": "https://www.youtube.com/channel/UCA1-BWDmFb1YyDslK2FAaoA", "uploader_url": "http://www.youtube.com/user/Drakaar14140", "average_rating": 4.6220474, "uploader_id": "Drakaar14140", "display_id": "UjxQHpwVIOc", "view_count": 11297, "title": "Les Maîtres du mystère - Le Parloir -", "webpage_url": "https://www.youtube.com/watch?v=UjxQHpwVIOc", "channel_id": "UCA1-BWDmFb1YyDslK2FAaoA", "duration": 3625, "fulltitle": "Les Maîtres du mystère - Le Parloir -", "id": "UjxQHpwVIOc", "uploader": "JL Linconi", "like_count": 115, "fps": 30, "channel": "JL Linconi", "age_limit": 0, "upload_date": "20180715" } ``` J'effectue alors un peu d'extraction. Souvent, les titres des vidéos sont composés du titre de la série et du titre de l'épisode, séparés d'un tiret. Lorsque c'est le cas, je peux alors automatiquement renseigner ces champs. J'extrais également la date de diffusion – si elle est présente – depuis la description de la vidéo, à l'aide d'expressions régulières. Les métadonnées des vidéos YouTube étant portées principalement sur le référencement interne au site, ces informations ne me sont pas d'une grande utilité. Les intérêts majeurs de trouver les épisodes sur YouTube viendront plus tard, lorsqu'il s'agira d'analyser directement le contenu de l'épisode (cf. [Extraction d'informations](#extraction-d-informations)). Pour télécharger le jeu de données complet, cf. [Mise à disposition des données](#mise-a-disposition-des-donnees).

Création du jeu de données

Une fois les données de ces quatre sources réunies, je souhaite les fusionner en une seule base de données, dans laquelle chaque épisode apparaît une fois.

Alignement des sources

Aligner les sources, c'est trouver les correspondances entre leurs épisodes. Par exemple, l'épisode de l'Inathèque intitulé *Vocalises* et diffusé le 28 avril 1965 doit correspondre avec l'épisode intitulé *Les mystères de l'été - Vocalises* de YouTube. Et il faut faire cela pour chaque épisode et pour chaque source. Devant cette montagne de travail, il convient donc d'automatiser tâche. En première approche, je cherche donc des correspondances où le titre, la collection et la date de diffusion concordent, ce qui fonctionne pour une bonne partie des épisodes. Mais parfois, les données sont erronées, ou simplement manquante. J'essaye dans la mesure du possible de rechercher automatique certaines exceptions courantes, mais je finis par annoter manuellement les quelques dizaines d'épisodes vraiment trop particuliers. Le résultat de cette opération est disponible dans le fichier [alignment.csv](https://chalier.fr/les-mysteres-perces/data/alignment.tsv) (67 Ko). **Au total, 1368 épisodes sont répertoriés, dont 561 présents dans les quatre sources.**

Chevauchement entre les sources, diagramme de Venn
Chevauchement des sources

Source Nombre d'épisodes Épisodes uniques
Inathèque 1283 401
les-maitres-du-mystere.fr 954 81
YouTube 852 0
madelen 574 0
Nombre d'épisodes pour chaque source

Fusion des champs

Ultime étape pour la création du jeu de données. Chacun des 1368 épisodes est dorénavant identifié par un numéro unique (`doc_id`), auquel correspond au plus une entrée dans chacune des sources. Pour déterminer le titre d'un épisode, on choisit le titre dans une des sources dans laquelle ce titre est disponible : - si l'épisode n'est présent que dans une seule source, alors on y choisit le titre, - si l'épisode est présent dans plusieurs sources et que le titre y est toujours identique, alors on choisit ce titre, - mais si l'épisode est présent dans plusieurs sources et que les valeurs ne correspondent pas, il va falloir faire un choix. Le troisième cas est malheureusement très courant, notamment à cause des fautes de frappes et autres petites erreurs communes expliquées précédemment. Afin de consolider les résultats, la fusion des champs définit un ordre de priorité pour déterminer quelle source choisir. On commence par détecter s'il y a **une majorité de sources** qui proposent la même valeur. Si c'est le cas, on choisit cette valeur. S'il y a une égalité – ou si toutes les valeurs sont différentes – on choisit alors la valeur provenant de **la source la plus fiable**, cet ordre arbitraire étant défini comme : 1. Inathèque 2. madelen 3. YouTube 4. les-maitres-du-mystere.fr Il existe enfin une exception à cette façon de faire, concernant les champs à valeurs multiples, comme les listes des interprètes, des descripteurs, etc. Ici, on considère l'union de toutes les valeurs rencontrées dans les différentes sources. Durant cette phase de fusion, on peut donc détecter tous les conflits entre les champs des différentes sources, et garder un registre de ces conflits. Dans le cas des valeurs multiples, on reporte le complément de l'intersection des valeurs. La dernière analyse donne ainsi un nombre total de 1990 conflits.

Champ Nombre de conflits
beginning 2
collection 66
descriptors 132
diffusion_date 106
duration 1459
end 10
pitch 76
title 139
Répartition des conflits en fonction du champ ; les nombreuses erreurs de durées sont en grande majorité dues à la durée des vidéos YouTube étant différente de la durée reportée dans les données de l'INA

Pour télécharger le jeu de données complet, cf. [Mise à disposition des données](#mise-a-disposition-des-donnees).

Extraction d'informations

À ce stade du projet, je dispose d'à peu près toutes les données structurées que j'ai pu trouver sur Internet, dont principalement des données bibliographiques. Mais une des sources utilisées – YouTube, pour ne pas la nommer – donne également accès, pour une part importante des épisodes, à du contenu brut. En exploitant intelligemment ce contenu, on pourrait obtenir des informations nouvelles, pour consolider ou enrichir les données existantes. C'est un peu comme si, après avoir appris la liste des livres d'une bibliothèque, on les lisait tous : la qualité des conseils que l'on pourrait alors donner serait bien meilleure.

Sha-zoom

Je commence par analyser le contenu audio. André Popp est le compositeur de *Tempo di suspense*, la musique utilisée pour le très reconnaissable générique des *Maîtres du mystère*. En découvrant de nouveaux épisodes sur YouTube, je découvre aussi qu'il existe d'autres génériques, spécifiques à certaines séries. Je pense alors à catégoriser la musique du générique de chaque épisode afin de vérifier sa concordance avec sa supposée série d'appartenance. Mais je ne me sens pas d'écouter et d'annoter manuellement les centaines de fichiers audios obtenus sur Internet. Plutôt, je me penche vers une vidéo de la chaîne [Computerphile](https://www.youtube.com/user/Computerphile) :

How Shazam Works (Probably!) par Computerphile
« How Shazam Works (Probably!) » par Computerphile – YouTube

Dans cette vidéo, David Domminney Fowler présente un algorithme réalisant grossièrement l'objectif de [Shazam](https://www.shazam.com/), le logiciel de reconnaissance musicale. Cet algorithme présente deux phases. Premièrement, on calcule, pour chaque fichier audio, une empreinte numérique à partir des fréquences dominantes au cours du temps. Puis, on compare intelligemment ces empreintes afin de déterminer si deux fichiers audios représentent la même musique. Ainsi, à partir d'une base de données contenant les empreintes de tous les génériques possibles, on peut déterminer quel générique est utilisé dans chaque épisode. Je constitue donc en telle base. Je commence avec une liste des quelques génériques dont j'ai la connaissance, à laquelle j'ajoute petit à petit d'autres items lorsque aucun générique n'est détecté pour un épisode.
faits_divers_1 : « Chant du mystère » par André Popp
faits_divers_2
tempo_di_suspense : « Tempo di suspense » par André Popp
les_maitres_du_mystere_2
les_mysteres_de_lete_1 : « Running in the wind » par Roger Roger
les_mysteres_de_lete_2
les_mysteres_de_lete_3
lheure_du_mystere_1
lheure_du_mystere_2
lheure_du_mystere_3
Ci-dessous, quelques exemples d'empreintes audio. L'axe des abscisses représente le temps. L'axe des ordonnées représente la fréquence. L'importance d'une fréquence est représentée par sa couleur. Si la fréquence est inexistante, elle est représentée en mauve. Si elle est importante à un instant donné du morceau, la case correspondante est turquoise. Les fréquences sont divisées en six groupes. L'empreinte est constituée des fréquences les plus importantes de chaque groupe, ce qui est représenté en jaune.

Empreinte audio de faits_divers_1
Empreinte audio de faits_divers_1

Empreinte audio de tempo_di_suspense
Empreinte audio de tempo_di_suspense

L'implémentation en Python de cet algorithme est disponible sur GitHub Gist : [ychalier/shazoom.py](https://gist.github.com/ychalier/a5951a532e82ee0c6d5764279420e839). Une fois les génériques extraits, la comparaison entre le générique et la collection relève 13 erreurs : Titre | Collection | Générique --- | --- | --- [Ames qui vivent](https://www.youtube.com/watch?v=UOB5x3Xj0J4) | Faits divers | `tempo_di_suspense` [La Fine équipe](https://www.youtube.com/watch?v=vnjY5hHSxMw) | Faits divers | `tempo_di_suspense` [Le Chien des Baskerville](https://www.youtube.com/watch?v=z6UJdzun9WY) | Faits divers | `tempo_di_suspense` [Des orchidées pour Stepanich](https://www.youtube.com/watch?v=fgxVbCCtfTY) | Faits divers | `tempo_di_suspense` [Un soir de demi brume](https://www.youtube.com/watch?v=Zub_spjsj8k) | Faits divers | `tempo_di_suspense` [Manque de pot](https://www.youtube.com/watch?v=C9hacwOs_fo) | Faits divers | `tempo_di_suspense` [La Catastrophe de Mr Higginbotham](https://www.youtube.com/watch?v=yyxYn_I5Mig) | Les Maîtres du mystère | `les_mysteres_de_lete_2` [Au premier de ces messieurs](https://www.youtube.com/watch?v=BuoBFwzZHP8) | Les Maîtres du mystère | `les_mysteres_de_lete_3` [Coup de griffes](https://www.youtube.com/watch?v=Y5vi0Z6RJo0) | Les Maîtres du mystère | `les_mysteres_de_lete_2` [L'Enfant perdu](https://www.youtube.com/watch?v=R16iRx3CQLE) | Les Mystères de l'été | `tempo_di_suspense` [Une si charmante soirée](https://www.youtube.com/watch?v=GDmSkOVdErw) | Les Mystères de l'été | `tempo_di_suspense` [La Balle de match](https://www.youtube.com/watch?v=SCmVUF23xF0) | Les Mystères de l'été | `tempo_di_suspense` [Le Tricheur](https://www.youtube.com/watch?v=IbavpSdSm5U) | Mystère, mystère | `les_mysteres_de_lete_1` Malheureusement, il est assez difficile d'en conclure quelle est la véritable collection originale de ces épisodes. Les épisodes de *Faits divers* avec le générique *Tempo di suspense* sont peut-être des rediffusions, car leur date de diffusion correspond bien à la période de *Faits divers*. En ce qui concerne *Les Mystères de l'été*, il est aussi étrange que certains épisodes soient diffusés en plein mois de février, il s'agit peut-être également de rediffusions. Difficile de faire un choix. Mais pour les 839 autres épisodes, la correspondance entre la collection et le générique confirme bien que les données sont correctes.

Analyse de texte

Une des motivations pour ce projet était de permettre la sélection d'épisodes basée sur les thèmes qui y sont abordés. Pour extraire ces informations, il faut avoir accès au script des épisodes. Ces scripts n'étant pas publics, il est nécessaire de les obtenir à partir des fichiers audios. Cette tâche est bien connue en informatique : la [reconnaissance automatique de la parole](https://fr.wikipedia.org/wiki/Reconnaissance_automatique_de_la_parole) – ou *speech-to-text* (*STT*) en anglais. Malheureusement, les modèles gratuits en français sont rares. Les modèles gratuits en français *performants* le sont encore plus. Rajouter à cela que je dispose de plus de huit cent épisodes d'une heure chacun environ, le temps qu'il me faudrait pour obtenir ces transcriptions serait démentiel. Heureusement, une ruse est possible. Ces épisodes proviennent de YouTube. Or, notamment pour des raisons d'accessibilité, la plateforme de vidéos propose un service de sous-titrage automatique de toutes ses vidéos. Ces sous-titres sont générés automatiquement par l'intelligence artificielle de Google, [Speech-to-Text](https://cloud.google.com/speech-to-text?hl=fr), et depuis peu, en français ! Je n'ai donc nullement besoin de faire moi-même ces transcriptions, il me suffit de télécharger les sous-titres sur YouTube – disponibles pour la majorité des épisodes – et je dispose alors des scripts de beaucoup d'épisodes, générés par un des meilleurs outils grand public. Sur ce, je me lance dans trois analyses. En premier lieu, je dresse une liste de thèmes, à partir des thèmes récurrents que j'ai pu rencontrer dans certains épisodes. Ces thèmes incluent « enquête », « adultère », « meurtre », « chantage », etc. Pour chacun, je définis également une liste de mots ou expressions témoignant d'une référence à ce thème. Par exemple « fait chanter » indique que l'épisode contient du chantage. En pratique, j'utilise des expression régulières pour couvrir les différentes formulations possibles d'une même expression, comme « fait chanter », « faites chanter » ou « faire chanter ». Les définitions de ces thèmes et expressions sont disponibles dans le fichier [facets.json](https://chalier.fr/les-mysteres-perces/data/facets.json) (4 Ko). Pour chaque épisode, pour chaque thème, je compte le nombre de fois où les mots et expressions de ce thème apparaissent dans le script. Ce nombre d'occurrences rend grossièrement compte de l'importance du thème dans l'épisode.

Thème Nombre d'occurrences
Enquête 4
Adultère 0
Entreprise 1
Meurtre 2
Vol 0
Argent 2
Justice 0
Chantage 6
Accident 0
Suicide 4
Héritage 0
Dette 0
Mariage 3
Poison 0
Arme à feu 7
Arme blanche 0
Drogue 0
Enlèvement 0
Thèmes extraits de l'épisode Vocalises, dans lequel un triangle de chantage a lieu entre trois protagonistes, jusqu'à que l'un en tue un autre avec un revolver, avant de se faire tuer par le troisième, qui maquille cela en suicide.

Ensuite, je m'intéresse à une métrique fréquemment utilisée dans le domaine du [traitement du langage naturel](https://fr.wikipedia.org/wiki/Traitement_automatique_des_langues), [TF-IDF](https://fr.wikipedia.org/wiki/TF-IDF). Cette métrique mesure l'importance des termes d'un document relativement à un corpus de documents. Appliqué aux scripts des épisodes, cela revient à détecter, pour chaque épisode, quels en sont les termes les plus importants. Techniquement, il s'agit des termes les plus fréquents du document qui n'apparaissent que rarement dans les autres documents du corpus. Ici, il s'agit souvent des noms des personnages où des lieux qu'ils occupent. Par exemple, pour l'épisode *Vocalises*, on retrouve parmi ces termes importants les mots « musée », « musées » ou « jardins », lieux de rendez-vous pour les paiements des chantages. Enfin, j'essaye également d'utiliser cette métrique pour rendre compte de la structure narrative de l'épisode. En effet, les sous-titres automatiques de YouTube retranscrivent les moments où est détectée de la musique, hors les épisodes contiennent beaucoup d'interludes musicaux, pour marquer le changement entre deux scènes. Je découpe donc les épisodes en chapitres en fonction des horodatages des sous-titres contenant le terme « [Musique] », puis je calcule la métrique TF-IDF pour les termes des chapitres relativement aux autres chapitres de l'épisode. Le résultat devrait donc faire remonter les mots les plus représentatifs du chapitre ; en pratique, ces résultats ne sont pas vraiment de bonne qualité. Il faudra y passer plus de temps, certainement avec des approches plus fines pour obtenir un résultat véritablement exploitable.

0 min
bainsommesquittéschancepierre
5 min
caissetroupeinegrandscomble
10 min
rosedansecouleurmodélisteamie
14 min
gentiladmirablenuancesdélicatessetouche
15 min
doublemartinezreconnaissezvoixprédis
16 min
rapportenomtrouvelâchevit
20 min
foulepatriarchealexandrieavançaface
23 min
complexionaubierge100nagetendre
25 min
fonddrôledisentdisparuvisite
37 min
pucevoisdevionscontinuemâchoires
37 min
fous20h15quartscaratdilatoire
39 min
triplefinissons-enaccordallocontretemps
40 min
vieillepleinamoureuxexactvieux
44 min
berguespatronsdécouvertnotoirenouvelle
Chapitrage de l'épisode Vocalises ; en ayant connaissance de l'épisode, ces données semblent plutôt correctes, le problème est surtout qu'elles ne sont pas vraiment exploitables a priori

Analyse statistique

Après tous ces efforts pour acquérir et extraire ces données, il est enfin possible d'en regarder les aspects principaux. Voici donc quelques chiffres.

Épisodes et collections

Le jeu de données contient 1368 épisodes, pour une durée théorique de 950 heures. Voici la répartition par collection :
Collection Nombre d'épisodes
Le Jeu du mystère et de l'aventure 45
Faits divers 169
Les Maîtres du mystère 336
Les Mystères de l'été 67
Mystère, mystère 175
L'Heure du mystère 174
Les Nouveaux Maîtres du mystère 400
Et voici la chronologie de diffusion des épisodes :

Chronologie de la diffusion de épisodes
Chronologie de la diffusion de épisodes. Cliquer pour agrandir.

Statistiques des épisodes disponibles sur YouTube
Statistiques des épisodes disponibles sur YouTube. Cliquer pour agrandir.

Ressources humaines

Tout d'abord, les dix auteurs les plus adaptés dans ces épisodes : 1. Charles Maitre (60 œuvres) 2. Louis Thomas Cervioni (51 œuvres) 3. Jeannine Raylambert (48 œuvres) 4. Alain Franck (40 œuvres) 5. [Francis Didelot](https://fr.wikipedia.org/wiki/Francis_Didelot) (38 œuvres) 6. [Jean-Pierre Ferrière](https://fr.wikipedia.org/wiki/Jean-Pierre_Ferri%C3%A8re) (38 œuvres) 7. [Eric Assous](https://fr.wikipedia.org/wiki/%C3%89ric_Assous) (35 œuvres) 8. Georges-Gabriel Bomier (28 œuvres) 9. [Louis Rognoni](https://fr.wikipedia.org/wiki/Louis_Rognoni) (28 œuvres) 10. [Jean Marcillac](https://fr.wikipedia.org/wiki/Jean_Marcillac) (27 œuvres) Ces épisodes font intervenir 924 interprètes ; voici les plus récurrents : 1. [Gaétan Jor](https://fr.wikipedia.org/wiki/Ga%C3%ABtan_Jor) (182 apparitions) 2. Pierre Delbon (151 apparitions) 3. Jean-Pierre Lituac (143 apparitions) 4. [Jean Bolo](https://fr.wikipedia.org/wiki/Jean_Bolo) (138 apparitions) 5. [Geneviève Morel](https://fr.wikipedia.org/wiki/Genevi%C3%A8ve_Morel_(actrice)) (127 apparitions) 6. Marie-Jeanne Gardien (123 apparitions) 7. [Rosy Varte](https://fr.wikipedia.org/wiki/Rosy_Varte) (120 apparitions) 8. [Henri Poirier](https://fr.wikipedia.org/wiki/Henri_Poirier) (119 apparitions) 9. [André Var](https://fr.wikipedia.org/wiki/Andr%C3%A9_Var) (107 apparitions) 10. Lisette Lemaire (105 apparitions) Et voici les trois duos les plus fréquents : 1. Gaétan Jor et Jean Bolo (98 apparitions communes) 2. Gaétan Jor et Yves Duchateau (88 apparitions communes) 3. Gaétan Jor et Geneviève Morel (88 apparitions communes)

Graphe des interactions entre interprètes
Graphe des interactions entre interprètes. Ne sont représentés que les interprètes avec plus de dix épisodes à leur actif ; le diamètre des nœuds est proportionnel au nombre d'apparitions de l'interprète. Une arête entre deux interprètes témoigne de l'apparition commune dans un épisode ; l'épaisseur des arêtes est proportionnelle au nombre d'épisodes en commun. Cliquer pour agrandir.

Outre les interprètes, les génériques contiennent souvent les noms des scénaristes, des bruiteurs, des présentateurs, etc. Voici les dix noms les plus cités, hors réalisateurs et producteurs : 1. [Germaine Beaumont](https://fr.wikipedia.org/wiki/Germaine_Beaumont) (267 apparitions) 2. [Roger Régent](https://fr.wikipedia.org/wiki/Roger_R%C3%A9gent) (257 apparitions) 3. [Jean Bériac](https://fr.wikipedia.org/wiki/Jean_De_Briac) (122 apparitions) 4. [Maurice Renault](https://fr.wikipedia.org/wiki/Maurice_Renault) (89 apparitions) 5. [Pierre Véry](https://fr.wikipedia.org/wiki/Pierre_V%C3%A9ry) (84 apparitions) 6. [Jean Toscane](https://fr.wikipedia.org/wiki/Jean_Toscan) (42 apparitions) 7. Gabriel de Rivage (41 apparitions) 8. Jean Deloron (32 apparitions) 9. Charles Maitre (28 apparitions) 10. [Pierre Billard](https://fr.wikipedia.org/wiki/Pierre_Billard_(sc%C3%A9nariste)) (27 apparitions)

Thématiques abordées

Ci-dessous, les vingt descripteurs les plus communs – sans considérer les possibles précisions, ce qui regroupe par exemple tous les cas où l'épisode est tiré d'un roman policier dans le même descripteur, « roman policier » :
Rang Descripteur Occurrences
1 roman policier 237
2 film 229
3 meurtre 149
4 fait divers 122
5 enquête de police 107
6 adultère 53
7 chantage 45
8 héritage 34
9 crime 25
10 escroquerie 24
11 vengeance 24
12 jalousie 23
13 pièce de théâtre 22
14 argent 22
15 famille 20
16 amour 18
17 accident 17
18 suicide 16
19 vol-infraction 13
20 psychologie 13
Voici également les statistiques tirées de l'extraction des thèmes (voir [Analyse de texte](#analyse-de-texte)) :

Importance relative des facettes
Importance relative des facettes (ou « thèmes ») extraites, pour trois valeurs de seuil. Cliquer pour agrandir.

Le top des « mots importants » n'est malheureusement pas très évocateur, car leurs scores dépendent des épisodes desquels ils proviennent. Voici plutôt le top 20 des mots utilisés dans les titres des épisodes, dans lequel on retrouve beaucoup des descripteurs et des facettes :
Rang Mot Occurrences
1 mort 60
2 homme 19
3 deux 19
4 crime 17
5 monsieur 16
6 petit 13
7 nuit 13
8 affaire 13
9 rendez-vous 12
10 plus 12
11 meurtre 11
12 amour 11
13 morte 11
14 tête 10
15 dernière 10
16 vérité 9
17 madame 9
18 feu 9
19 rien 9
20 trois 9

Mise à disposition des données

Voilà, c'est la fin de cette aventure. Entre les recherches, les essais, les différentes étapes du projet et la rédaction de cet article, il aura fallu plus d'un mois pour arriver au bout. Voici un petit récapitulatif des jeux de données constitués lors de ce projet : - les données extraites de [les-maitres-du-mystere.fr](https://les-maitres-du-mystere.fr) : [lmdmfr.json](https://chalier.fr/les-mysteres-perces/data/lmdmfr.json) (JSON ; UTF8 ; 477 Ko ; [schéma](https://github.com/ychalier/les-mysteres-perces#lmdmfrjson)), - les données extraites du [catalogue de l'INA](http://inatheque.ina.fr/) : [inatheque.json](https://chalier.fr/les-mysteres-perces/data/inatheque.json) (JSON ; UTF8 ; 4,5 Mo ; [schéma](https://github.com/ychalier/les-mysteres-perces#inathequejson)), - les données extraites du [service de streaming de l'INA](https://madelen.ina.fr/) : [madelen.json](https://chalier.fr/les-mysteres-perces/data/madelen.json) (JSON ; UTF8 ; 1,6 Mo ; [schéma](https://github.com/ychalier/les-mysteres-perces#madelenjson)), - les données extraites de YouTube : [youtube.json](https://chalier.fr/les-mysteres-perces/data/youtube.json) (JSON ; UTF8 ; 12,5 Mo ; [schéma](https://github.com/ychalier/les-mysteres-perces#youtubejson)), - le jeu de données complet : [merger.min.json](https://chalier.fr/les-mysteres-perces/data/merger.min.json) (JSON ; UTF8 ; 5,66 Mo ; [schéma](https://github.com/ychalier/les-mysteres-perces#mergerjson)). Pour consulter agréablement les données complètes et effectuer des recherches, rendez-vous sur le site .