Utilisateur:Seudo/LazareNettoieOCR.py

La bibliothèque libre.

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()