{"word_count": 817, "character_count": 5053}
« Écrire le roman par larges chapitres, logiquement construits : c’est-à-dire offrant par leur succession même une idée des phases du livre. Chaque chapitre, chaque masse doit être comme une force distincte qui pousse au dénouement. Voir ainsi un sujet par quelques grands tableaux, quelques grands chapitres (12 ou 15) ; au lieu de trop multiplier les scènes, en choisir un nombre restreint et les étudier à fond et avec étendue (...) Tout le monde en ce moment l’analyse de détail, il faut réagir par la construction solide des masses, des chapitres ; par la logique, la poussée de ces chapitres, se succédant comme des blocs superposés, se mordant l’un l’autre » ("Notes générales sur la nature de l’œuvre", 1868)C'est ce qui nous a mis sur la voie. Le chapitre est identifié à un "bloc", une "masse", une "force", cet effet de "puissance" étant obtenu par la "largeur" (=longueur ?). Y a-t-il des "profils rythmiques" en nombre fini que Zola utilise de manière récurrente ? Un exemple vraiment solide (certes pas très étonnant) est la fréquence de chapitres finaux significativement brefs. On trouve à plusieurs reprises dans les Rougon-Macquart un schéma où le premier chapitre est plutôt court, les autres globalement plus longs, sauf le dernier qui est non seulement court, mais surtout plus court que le premier. C'est sans doute un profil trivial, qui n'est pas propre à Zola (correspondant à des formes classiques : le dénouement foudroyant, l'épilogue). Mais serait-il possible de repérer des profils plus précis ? ou encore la répétition du même profil dans un roman (notamment dans les romans subdivisés en "parties" : retrouve-t-on dans chaque partie le même "profil" ?)Si cela est nettement concevable à l’œil humain, en théorie, qui s’attellera à sa tâche à l'intuition, il est plus difficile, mais bien possible, de faire mathématiquement cette opération. Comment ? Déterminer des profils de courbes, comment fait-on ? Les problèmes.Il faut pouvoir tenir compte du fait que les courbes n'ont pas la même longueur de données (certaines ont plus de chapitres, etc.). Il faut pouvoir définir un degré de similitude relatif (les profils ne seront pas les mêmes selon que l'on aura 2 ou 25 courbes). On appelle cela du "time series clustering", c'est à dire du "noyautage" de courbes. Pour plus d'informations sur le "time series clustering", voir ce PDF.En effet, il est facile de déterminer à peu près quels peuvent être les profils de courbes à l’œil, lorsque l'on a 5, 10 courbes de répartitions des masses à comparer. Avec 10 courbes, il est possible de voir qu'à telle période Zola raccourcit les chapitres finaux ou que le nombre de mots dans les chapitres liminaires est plus important. Mais dans le cas de Zola, nous ne sommes pas à 10 courbes, mais à 35, avec des ouvrages de longueur très variable. Il faut donc déterminer un moyen automatique de comparer ces courbes entre elles afin de voir quels sont les traits essentiels qui les distinguent. Les solutions techniques possibles.Le "clustering", c'est le partitionnement des données en des ensembles uniformes selon des critères déterminés. Il permet notamment de classer les éléments d'une base de données grâce à des caractéristiques communes. Le grand avantage du "clustering" automatique est qu'il repose sur un ou des critères objectifs invariants pour toutes les données (sauf éventuellement par variation proportionnelle), et qu'il peut se faire sur une masse de données quasiment sans limite (ou du moins très importante). Le "clustering" de courbes permet donc de déterminer des noyaux de courbes ayant des caractéristiques communes. Pour éviter les effets de trous avec les chapitres absents dans certaines œuvres et présents dans d'autres, nous avons mis les chapitres en %, ainsi que le nombre de mots (à tel pourcentage du roman, nous avons tant de pourcentage de paroles). Nous obtenons donc ainsi une base de données de ce type :Comment déterminer ensuite si une courbe est similaire à une autre ? Il faut déterminer une mesure de similarité. Les mesures de similarités employées dans les comparaisons de données sont des mesures de calcul de distances entre les données, comme le calcul de la distance Fréchet ou le calcul de la distance euclidienne. Nous avons opté pour la "Dynamic Time Warping", qui permet d'obtenir l'alignement optimal entre des séquences de données. Une fois qu'on mesure la distance par la DTW, on procède à la classification, au "clustering" à proprement parler, par l'algorithme k-NN (étant donné un nombre de voisins à considérer, on regroupe les plus proches voisins). Voici un exemple de KNN : Nous avons fait une implémentation en Python disponible sur ce dépôt : (à venir). L'algorithme proposé en python ici est potentiellement applicable à n'importe quel corpus en txt. Il est possible, dans l'implémentation faite, de déterminer le nombre de profils que nous souhaitons illustrer : il peut y avoir autant de profils que de courbes. Voici les résultats que nous obtenons pour Zola :&#160; Interprétations&#160;&#160;&#160;&#160;