2024-10-20 01:06:43 +02:00
|
|
|
|
# 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()
|
|
|
|
|
|
2025-01-03 23:19:57 +01:00
|
|
|
|
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)
|
2025-01-03 23:27:43 +01:00
|
|
|
|
# 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")
|
2025-01-03 23:19:57 +01:00
|
|
|
|
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
|
|
|
|
|
|
2024-10-20 01:06:43 +02:00
|
|
|
|
|
2025-01-03 23:19:57 +01:00
|
|
|
|
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)
|
|
|
|
|
|