# corrige un fichier livre.org afin de supprimer les erreurs de typographie courantes: # phrases sans majuscules # plus de deux sauts de ligne consécutifs # espaces manquants autour de certaines ponctuations. import re # Ouvrir le fichier livre.org en mode lecture with open('livre.org', 'r') as f: contenu = f.read() def corriger_typo(contenu): # Corriger les majuscules au début des phrases contenu = re.sub(r'(^|\.\s+|\n\s*)([a-z])', lambda x: x.group(1) + x.group(2).upper(), contenu) # Supprimer les sauts de ligne multiples contenu = re.sub(r'\n{3,}', '\n\n', contenu) # Ajouter des espaces autour de la ponctuation contenu = re.sub(r'([.,;:!?])([^\s])', r'\1 \2', contenu) # Corriger les entêtes orgmode (remplacer ": " par ":") contenu = re.sub(r"^(#\+[A-Z_]+): ", r"\1:", contenu, flags=re.MULTILINE) # Corriger les espaces manquants autour de certaines ponctuations contenu = re.sub(r"([.,;:!?])( )?", r"\1 ", contenu) contenu = re.sub(r"( )([.,;:!?])", r" \2", contenu) # replace demiquatratin by full quadratin contenu = contenu.replace('–', '—') contenu = contenu.replace(' ?', chr(160)+"?") contenu = contenu.replace(' !', chr(160)+"!") contenu = contenu.replace(' »', chr(160)+"»") contenu = contenu.replace('« ', "«"+chr(160)) contenu = contenu.replace('y’a', "y a") return contenu def comparer_textes(texte_original, texte_corrige): # Compare les deux textes et retourne le nombre de différences nb_sauts = len(re.findall(r'\n{3,}', texte_original)) - len(re.findall(r'\n{3,}', texte_corrige)) nb_entetes = len(re.findall(r"^#\+[A-Z_]+: ", texte_original)) - len(re.findall(r"^#\+[A-Z_]+: ", texte_corrige)) nb_espaces = len(re.findall(r"([.,;:!?])( )?", texte_original)) - len(re.findall(r"([.,;:!?])( )?", texte_corrige)) nb_espaces += len(re.findall(r"( )([.,;:!?])", texte_original)) - len(re.findall(r"( )([.,;:!?])", texte_corrige)) nb_maj = sum(1 for m in re.finditer(r"^([a-z])", contenu)) - sum(1 for m in re.finditer(r"^([a-z])", contenu_corrige)) if nb_maj > 0: print(f" Ajout de majuscules aux débuts de phrases : {nb_maj} modification(s)") # Afficher le rapport des modifications print("\nRapport des modifications :") print(f"- Sauts de ligne supprimés : {nb_sauts}") print(f"- Entêtes corrigées : {nb_entetes}") print(f"- Espacements corrigés : {nb_espaces}") print(f"Total des modifications : {nb_sauts + nb_entetes + nb_espaces}\n") return nb_maj, nb_sauts, nb_entetes, nb_espaces def sauvegarder_si_modifie(contenu_corrige, nb_maj, nb_sauts, nb_espaces): # Faire un rapport des modifications apportées if nb_maj == 0 and nb_sauts == 0 and nb_espaces == 0: print("🎉 Pas de modifications à apporter !") # Ne sauvegarder que s'il y a des modifications if nb_maj > 0 or nb_sauts > 0 or nb_espaces > 0: print("💾 Sauvegarde des modifications...") with open('livre.org', 'w') as f: f.write(contenu_corrige) else: print("Aucune modification à sauvegarder") if __name__ == "__main__": contenu_corrige = corriger_typo(contenu) nb_maj, nb_sauts, nb_entetes, nb_espaces = comparer_textes(contenu, contenu_corrige) sauvegarder_si_modifie(contenu_corrige, nb_maj, nb_sauts, nb_espaces)