Utilisateur:Seudo/LazareNettoieOCR.py
Ceci est, pour information, un script que j’utilise pour nettoyer le code OCR des pages du Dictionnaire administratif et historique des rues de Paris et de ses monuments des frères Lazare. Il peut être utilisé dans Notepad++ à l'aide de l’extension Python Script.
# coding=utf-8 import re import unicodedata editor.beginUndoAction() # Au début de la page editor.insertText(0, "<noinclude>__NOTOC__</noinclude>\r\n## s1 ##\r\n") # Remplacements divers def str2ancre(str): str = unicodedata.normalize('NFKD', str.decode('UTF-8')).encode('ascii', 'ignore') ancre = re.sub(r"[^a-zA-Z]", "-", str.lower()) return ancre def formatdesc(desc): desc = re.sub(r"\r\n", " ", desc).strip() return desc # Majuscule Au-Début-De-Chaque-Mot def capitalizeWords(s): return re.sub(r'[A-ZÀÂÉÈÊÎÔÛ]+', lambda m:m.group(0).capitalize(), s) def newrue(m): nom = capitalizeWords(m.group(1)) type = m.group(2).lower() type = re.sub("^nue ", "rue ", type) desc = m.group(3) ancre = str2ancre(nom) + "_" + str2ancre(type) return '\r\n##' + ancre + '##\r\n{{LazareRue|' + ancre + '|' + nom + '|' + type + '|' + formatdesc(desc) + '}}\r\n' def siecle2maj(m): return m.group(1).upper() editor.rereplace( r"\r\n([A-ZÀÂÉÈÊÎÔÛ'-]+)\s\(([^\)]+)\)\.?\s*(?:\r\n\s*|)((?:\r\n.+)+)\r\n", newrue) # Typographie editor.rereplace( r"\sn[°o,]\s?(\d)", r" n{{e|o}} \1") editor.rereplace( r"\sn[°o,\"][Ss]\s?(\d)", r" n{{e|os}} \1") # À entre deux mesures editor.rereplace( r"\b([mc])\. À (\d+)", r"\1. à \2") # Siècle et autres ordinaux romains editor.rereplace( r"\{\{sc\|([ivx]+)\}\}", siecle2maj) editor.rereplace( r"\b([IVX]+)[°e]\ssiècle", r"\1{{e}} siècle") editor.rereplace( r"Ier", r"I{{e|er}}") editor.rereplace( r"\b([IVX]+)e\b", r"\1{{e}}") # Arrondissement editor.rereplace( r"\b1(\"|er) arrondissement", r"— 1{{e|er}} arrondissement") editor.rereplace( r"(\d+)[e°c] arrondissement", r"— \1{{e}} arrondissement") # Tirets automatiques editor.rereplace( r"[EÉ]go[ûu]t", r"Égout") editor.rereplace( r"(Bassin d.égout|Égout|Conduite d|Éclairage|Une décision)", r"— \1") editor.rereplace( r"—(\w)", r"— \1") # Pas d'espace à l'intérieur d'une unité editor.rereplace( r"\b(\d+)\s(m|c)\b", r"\1 \2") # Divers espaces insécables editor.rereplace( r"\b(\d+)\s(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor)\b", r"\1 \2") editor.rereplace( r"\b([aA]n)\s([IVX]+)\b", r"\1 \2") editor.rereplace( r"\b(\d+)\s(bis|ter)\b", r"\1 \2") editor.rereplace( r"\b(Article|Art\.) [1l]er\b", r"\1 1{{e|er}}") editor.rereplace( r"\b(Article|Art\.) ([0-9]+)\b", r"\1 \2") editor.rereplace( r"\b(Louis|Henri|Charles|François) ([IVX]+)\b", r"\1 \2") editor.rereplace( r"\bd\. (\w)", # les d. lettres-patentes... r"d. \1") editor.rereplace( r"\b(M+)\. ", r"\1. ") # Compagnie de gaz editor.rereplace( r"\bcomp[°0e]\s", r"comp{{e}} ") # Apostrophe editor.rereplace( r"\b([lL])'", r"\1’") # Erreurs de transcription courantes editor.rereplace( r"lettrès-patentes", r"lettres-patentes") editor.rereplace( r"\betc.", r"etc…") editor.rereplace( r" ̃", # Bizarrerie r"") editor.rereplace( r"(—[—-]+|[—-]+—", r"—") # End the undo action, so Ctrl-Z will undo the above actions editor.endUndoAction()