User:MS BOT/v1.3

From OpenStreetMap Wiki
Jump to navigation Jump to search

Plus de modifications prises en compte sauf en cas d'erreur. Dans ce cas le critère sera retiré et ré-étudié dans la prochaine version. --Marcussacapuces91 00:00 2 February 2009 (UTC)

Mise en place d'expression régulières ou expression rationnelle.

Plusieurs corrections pourront se cumulées sur un même champ name=*, mais chaque correction ne s'applique qu'une seule fois.

Modifications encodées

Voici un extrait de mon code. Il s'agit d'un tableau composé de 2 colonnes. La première contient le critère de sélection sous la forme d'une expression régulière, la seconde le texte qui remplace la sélection. Je copie ce tableau directement dans la page sans autre mise en forme, mais en UTF-8.

Inutile de modifier cette liste je ne la mettrais à jour que depuis mon source.

Quelques explications sur la syntaxe utilisée ici :

  • "\\" est nécessaire pour échapper "\", puisqu'il s'agit ici de chaînes C.
  • "\\b" indique une limite de mot, s'il est présent avant et après une chaîne, cela empêche d'attraper les sous-mots ("\\bEcole\\b" n'attrape pas "Ecoles") ;
  • "(a|ab|cd)" est un groupe d'options exclusives (XOR) de longueur variable mais non vide.
  • "x?" 0 ou 1 itération de x.
  • "x+" 1 ou plusieurs itérations de x.
  • "." 1 caractère quelconque (joker).
  • Les parenthèses permettent de former un groupe sur lequel s'applique un autre signe.
  • "^x" x commence la phrase.
  • "x$" x termine la phrase.

À noter que ma version de PCRE n'est pas "UTF-8 compliant" (pas compilé avec la bonne option) et donc je dois un peu jongler car les accentués ne sont pas reconnus comme des lettres et/ou faisant partie d'un mot (cf. École, ci-dessous). Cela fait partie des "TODO" des prochaines versions.

J'avais oublié de préciser que les expressions ne sont pas sensibles à la casse. --Marcussacapuces91 19:37, 3 February 2009 (UTC)

const string HighwayName::substitutions[][2] = { // Typographie des espaces et apostrophes

   {"^ +",     ""},    // Suppression des espaces en entete
   {" +$",     ""},    // Suppression des espaces de fin.
   {"  +",     " "},   // Suppression des espaces doubles.

// Accents erronnes (erreurs de conversion en UTF-8)

   {"é",    "é"},
   {"É",   "É"},
   {"è",    "è"},
   {"È",    "È"},
   {"ê",    "ê"},
   {"Ã ",     "à"},

// {"' +", "'"}, Non !

// En debut de phrase

   {"^acc(e|è)s ",              "Accès "},
   {"^all(e|é)e? ",             "Allée "},
   {"^aire ",                   "Aire "},
   {"^autoroute ",              "Autoroute "},
   {"^av(enue)?\\.? ",          "Avenue "},
   {"^b(ou)?l(evar|v)?d\\.? ",  "Boulevard "},
   {"^carrefour ",              "Carrefour "},
   {"^champ ",                  "Champ "},
   {"^ch(emin)?\\.? ",          "Chemin "},
   {"^chem\\.? ",               "Chemin "},
   {"^cit(e|é) ",               "Cité "},
   {"^clos ",                   "Clos "},
   {"^col ",                    "Col "},
   {"^c(o|ô)te ",               "Côte "},
   {"^cour ",                   "Cour "},
   {"^cours ",                  "Cours "},
   {"^escalier ",               "Escalier "},
   {"^esplanade ",              "Esplanade "},
   {"^faubourg ",               "Faubourg "},
   {"^giratoire ",              "Giratoire "},
   {"^imp(asse)?\\.? ",         "Impasse "},
   {"^la ",                     "La "},
   {"^le ",                     "Le "},
   {"^les ",                    "Les "},
   {"^mail ",                   "Mail "},
   {"^passage ",                "Passage "},
   {"^place ",                  "Place "},
   {"^pont ",                   "Pont "},
   {"^porte ",                  "Porte "},
   {"^quai ",                   "Quai "},
   {"^r(e|é)sidence ",          "Résidence "},
   {"^rocade ",                 "Rocade "},
   {"^rond[- ][Pp]oint ",       "Rond-Point "},
   {"^r(ou)?te\\.? ",           "Route "},
   {"^rue ",                    "Rue "},
   {"^ruelle ",                 "Ruelle "},
   {"^sente ",                  "Sente "},
   {"^sentier ",                "Sentier "},
   {"^square ",                 "Square "},
   {"^villa ",                  "Villa "},
   {"^voie ",                   "Voie "},

// Noms communs (ou pas !) en pleine phrase

   {"\\b2i?(e|e)me (division blind(e|é)e|DB)\\b",  "2ᵉ Division Blindée"},  // Unicode 1D49 

// {"\\babb(e|é)\\b", "Abbé"}, // risque de conflit "Ernst Abbe"

   {"\\ba(e|é)ropostale\\b",                       "Aéropostale"},
   {"\\bandr(e|é) gide\\b",                        "André Gide"},
   {"\\baquitaine\\b",                             "Aquitaine"},
   {"\\bbal(e|é)ares\\b",                          "Baléares"},
   {"\\bcerise\\b",                                "Cerise"},
   {"\\bchateau\\b",                               "Château"},
   {"\\bchateaubriand\\b",                         "Chateaubriand"},
   {"\\bcolonn?el\\b",                             "Colonel"},
   {"\\bcommandant\\b",                            "Commandant"},

// {"\\bcypr(e|è)s\\b", "Cyprès"}, // premature

   {"\\bde gaulle\\b",                             "de Gaulle"},
   {"\\bde ?lattre de tassigny\\b",                "de Lattre de Tassigny"},
   {"\\bd(e|é)portation\\b",                       "Déportation"},
   {"\\bd(e|é)port(e|é)s\\b",                      "Déportés"},

// {"\\bdr\\.?\\b", "Docteur"}, // Risque conflit avec Dr. (DE)

   {"\\bd(o|ô)me\\b",                              "Dôme"},
   {"\\bdu g(e|é)n(e|é)ral\\b",                    "du Général"},
   {"\\bdu mar(e|é)chal\\b",                       "du Maréchal"},
   {"\\bl'(e|é)cluse\\b",                          "l'Écluse"},
   {"\\b (e|é)cole\\b",                            " École"},
   {"\\bl'(e|é)cole\\b",                           "l'École"},
   {"\\b (e|é)coles\\b",                           " Écoles"},
   {"\\bdes (e|é)coliers\\b",                      "des Écoliers"},
   {"\\bdes (e|é)crins\\b",                        "des Écrins"},

// {"\\bl'(e|é)cureuil\\b", "l'Écureuil"}, // premature

   {"\\b (e|é)glise\\b",                           " Église"},
   {"\\bl'(e|é)glise\\b",                          "l'Église"},
   {"\\b (e|é)douard\\b",                          " Édouard"},
   {"\\b (e|é)mile\\b",                            " Émile"},

// {"\\bl'(e|é)rable\\b", "l'Érable"}, // premature // {"\\bdes (e|é)rables\\b", "des Érables"}, // premature

   {"\\besp(e|é)rance\\b",                         "Espérance"},
   {"\\b (e|é)tienne\\b",                          " Étienne"},
   {"\\b (e|é)variste\\b",                         " Évariste"},
   {"\\bfran(c|ç)ais\\b",                          "Français"},
   {"\\bfran(c|ç)aise\\b",                         "Française"},
   {"\\bfran(c|ç)ois\\b",                          "François"},
   {"\\bg(e|é)n(e|é)ral\\b",                       "Général"},
   {"\\bgeorges cl(e|é)menceau\\b",                "Georges Clemenceau"},
   {"\\bgeorges sand\\b",                          "Georges Sand"},
   {"\\bh(o|ô)tel\\b",                             "Hôtel"},
   {"\\bl(e|é)o lagrange\\b",                      "Léo Lagrange"},
   {"\\blouise michel\\b",                         "Louise Michel"},
   {"\\bman(œ|oe)uvre\\b",                         "Manœuvre"},
   {"\\bman(œ|oe)uvres\\b",                        "Manœuvres"},
   {"\\bmar(e|é)chal\\b",                          "Maréchal"},
   {"\\bm(e|é)daille\\b",                          "Médaille"},
   {"\\bm(e|é)dit(e|é)rr?ann?(e|é)e?\\b",          "Méditerranée"},
   {"\\bm(e|é)rite\\b",                            "Mérite"},
   {"\\bmonnaie\\b",                               "Monnaie"},
   {"\\boradour(-| )sur(-| )glane\\b",             "Oradour-sur-Glane"},
   {"\\bouv(e|é)a\\b",                             "Ouvéa"},
   {"\\bpaul verlaine\\b",                         "Paul Verlaine"},
   {"\\bpr(e|é)sident\\b",                         "Président"},
   {"\\bprosp(e|è)r(te)? m(e|é)rim(e|é)e?\\b",     "Prosper Mérimée"},
   {"\\bren(e|é) cassin\\b",                       "René Cassin"},
   {"\\br(e|é)publique\\b",                        "République"},
   {"\\br(e|é)sistance\\b",                        "Résistance"},
   {"\\br(e|é)volution\\b",                        "Révolution"},
   {"\\bsaint(-| )(e|E)xup(e|é|É)ry\\b",           "Saint-Exupéry"},
   {"\\bsaint(-| )jean\\b",                        "Saint-Jean"},
   {"\\bsaint(-| )joseph\\b",                      "Saint-Joseph"},
   {"\\bsoeur\\b",                                 "Sœur"},

// Mois de l'annee en pleine phrase

   {"\\bjanvier\\b",               "Janvier"},
   {"\\bf(e|é)vrier\\b",          "Février"},
   {"\\bmars\\b",                  "Mars"},
   {"\\bavril\\b",                 "Avril"},
   {"\\bmai\\b",                   "Mai"},
   {"\\bjuin\\b",                  "Juin"},
   {"\\bjuillet\\b",               "Juillet"},
   {"\\bao(u|û)t\\b",             "Août"},
   {"\\bseptembre\\b",             "Septembre"},
   {"\\boctobre\\b",               "Octobre"},
   {"\\bnovembre\\b",              "Novembre"},
   {"\\bd(e|é)cembre\\b",         "Décembre"}

};

Dernier log de test : log 16.13, 04 February 2009 (UTC).txt