# prend le fichier personnages.org, détermine les noms des personnages selon les entêtes orgmode, et va ensuite lire le fichier livre.org et parcourir ses entêtes qui sont les chapitres du livre. # générer un fichier csv qui listera les chapitres et les personnages en colonnes, pour compter 1 à chaque chapitre lorsque le nom du personnage est retrouvé dedans # les personnages que l'on recherche dans le livre ne sont pas mentionnés dans la ligne d'entête; mais dans les lignes entre deux entêtes, dans les corps de texte import csv import re # Remplacer par les chemins vers les fichiers Org-mode fichier_personnages = 'personnages.org' fichier_livre = 'livre.org' # Expressions régulières pour extraire les noms des personnages et les titres des chapitres regex_personnage = r"\*\* (.*)" regex_chapitre = r'\*\* (.+)' # Dictionnaire pour stocker les occurrences de personnages dans chaque chapitre occurrences_personnages = {} # Ouvrir le fichier personnages.org et extraire les noms des personnages with open(fichier_personnages, 'r', encoding='utf-8') as fichier_personnages: personnages = [re.sub( "\*\* ","",ligne.strip()) for ligne in fichier_personnages if re.match(regex_personnage, ligne)] print('personnages: ', personnages) def contains_any_of_these_words(line: str, words: list[str]) -> bool: for word in words: if word in line: return True return False # Ouvrir le fichier livre.org et le fichier CSV with open(fichier_livre, 'r', encoding='utf-8') as livre, open('occurrences_personnages.csv', 'w', newline='', encoding='utf-8') as fichier_csv: content = livre.read() csv_writer = csv.writer(fichier_csv) # Écrire les en-têtes dans le fichier CSV csv_writer.writerow(['Chapitre'] + personnages) occurrences_chapitre = {personnage: 0 for personnage in personnages} chapitre = '(chapitre not found)' # Parcourir chaque ligne du fichier livre.org for ligne in content.strip().split("\n"): # Rechercher le titre du chapitre match_chapitre = re.search(regex_chapitre, ligne) if match_chapitre: chapitre = match_chapitre.group(1) chapitre = re.sub( ":title:", "", chapitre) print(chapitre) # Initialiser le dictionnaire d'occurrences pour chaque chapitre occurrences_chapitre = {personnage: 0 for personnage in personnages} # Parcourir chaque personnage et rechercher son nom dans la ligne for personnage in personnages: if personnage in ligne: occurrences_chapitre[personnage] += 1 print(chapitre,' - ',personnage,' : ', ligne) # Ajouter les occurrences du chapitre au dictionnaire global occurrences_personnages[chapitre] = occurrences_chapitre # Écrire les occurrences des personnages dans le fichier CSV for chapitre, occurrences in occurrences_personnages.items(): csv_writer.writerow([chapitre] + [occurrences[personnage] for personnage in personnages])