Détails de la méthode : Graph_clustering.pdf
Objectif
Détecter les auteurs d'oeuvres littéraires, sur la base du graphe d'interactions de leurs personnages
Les techniques classiques de stylométrie se basent sur une approche majoritairement statistique de l'analyse de texte. Ici, on cherche à étudier si - au delà de son style d'écriture - un auteur ne possède pas des caractéristiques qui lui sont propres dans la création d'une intrigue romanesque.
L'hypothèse générale est qu'un auteur aura tendance à créer des intrigues semblables, qu'on pourra représenter par les interactions entre personnages.
Ainsi, pour chaque roman, on construit la matrice de co-occurrences des interractions entre personnages. Sur cette base, on modélise les interractions sous forme d'un graphe non orienté, pondéré, pour lequel on calcule un ensemble de métriques, représentées sous forme d'un unique vecteur de features.
Enfin, nous appliquons des méthodes de clustering sur la matrice des données construire, afin de détecter automatique les auteurs des oeuvres considérées.
Les données sont des oeuvres littéraires françaises issues du Projet Gutenberg. On récupère 47 textes, produits par 6 auteurs différents.
Les données sont stockées dans le répertoire input
.
Cette matrice permet de retenir le nombre d'interactions des personnages dans une fenêtre de temps du récit. Le contenu de cette matrice permettra de pondérer le graphe construit dans les étapes suivantes, et donc de dégager l'intensité des échanges entre personnages du roman à instant
def count_occurences(text_window):
occurences_tot = {}
text_window_tmp = text_window
# Parcours de tous les personnages de la text window
for character in text_window_tmp:
remaining_chars = text_window_tmp
remaining_chars.remove(character)
occurences_perso = {}
for remaining_char in remaining_chars:
if remaining_char != character:
occurences_perso[remaining_char] = occurences_perso.get(remaining_char, 0) + 1
# On affecte toutes ses interractions au personnage
occurences_tot[character] = occurences_perso
return occurences_tot
La matrice de co-occurences permet de construire les graphes d'interactions des personnages (non orientés, pondérés).
Ci-dessous, les graphes d'interactions pour deux romans (à gauche, le "Comte de Monte Cristo" d'Alexandre Dumas, à droite, "Les malheurs de Sophie" par la comtesse de Segur)
Chaque roman est représenté sous la forme d'un vecteur contenant plusieurs métriques (22 au total) spécifiques aux objets graphes.
Une méthode de clustering (apprentissage non supervisé) est appliquée à l'ensemble de données, afin d'en détecter les auteurs.
Résultats
Deux métriques distinctes sont uilisées pour comparer les résultats obtenus :
- la pureté
- le F1-score
L'utilisation d'un algorithme de KMeans (avec Analyse en composante principale appliquée au préalable) permet d'obtenir un score de pureté de 66%.