Utilisateur:Daahbot/Historique/2007
Janvier 2007
[modifier le wikicode]Références
[modifier le wikicode]Suite à la création des modèles {{ref}} et {{REF}} (voir Wiktionnaire:Wikidémie/janvier 2007#Références), il faudrait rajouter une puce devant tous les modèles de références {{réf}}
et {{R:...}} dans les articles.
- liste : ref:Modèle:
{{réf}}
, Dump du 4 décembre 2006. Puis chaque modèle l'un après l'autre depuis la liste des modèles. - script : replace.py ; fix :
'references' : { 'regex' : True, 'msg' : { 'fr':u'Robot : format des références', }, 'replacements': [ (u"\n(\{\{réf\|.+?\}\})", r"\n* \1"), (u"\n(\{\{R:.+?\}\})", r"\n* \1"), (u"\{\{réf\|Littré(\|| )1863\}\}", r"{{R:Littr"+u"é"+"}}"), (u"\{\{réf\|Larousse du XX<sup>e</sup> siècle\|1926\}\}", r"{{R:LarousseXXe}}"), ], },
- Note : J'en profite pour mettre les références aux Littré avec
{{R:Littré}}
, idem pour le Larousse du XXe siècle. - Note 2 : J'ai mis dans tous les modèles de référence le modèle de base
{{réf}}
afin que la modification de la puce se répercute partout facilement. - Problèmes rencontrés : déconnexions trop fréquentes : le bot doit reprendre du début. Je change donc de la liste complète (dump) à la liste des modèles en les faisant un à un (moins automatique mais plus fiable).
Marquage des articles importés du DAF8 (avorté)
[modifier le wikicode]La méthode utilisée n'étant pas efficace (utilisation d'expressions rationnelles), je n'ai pas effectué les changements en attendant de développer quelque chose de plus simple : voir à février 2006 pour la suite.
Février 2007
[modifier le wikicode]Marquage des articles importés du DAF8 (reprise)
[modifier le wikicode]Après discussions sur la Wikidémie sur la nécessité de marquer les articles dont tout ou partie proviennent du DAF8 : Discussion et Mise en place du bot. La marque ajoutée est {{Import:DAF8}}
, sous les références des articles concernés.
- liste :
ref:Modèle:remplacé par une liste générée à partir du dump, plus facile à gérer (notamment en cas de déconnexion intempestive où on n'a pas besoin de tout reprendre du début){{R:DAF8}}
- script : version adaptée de replace.py avec le passage suivant qui correspond aux changements faits sur le texte (def DoReplacement) :
new_text = "" r = False rfait = False fr = False ; # On cherche si la page possède bien une référence R:DAF8, et si elle n'a pas déjà de marque d'import:DAF8 if re.search("\{\{R:DAF8\}\}", original_text) and not re.search("\{\{Import:DAF8\}\}", original_text): lignes = original_text.split('\r\n') for l in lignes: # On détecte la section des références if l == u"{{=fr=}}": fr = True ; if l == u"{{-réf-}}" and fr: r = True new_text += l+"\r\n" # Si on est dans la section des références... elif r == True and rfait == False and fr: # ...si on trouve un élément de référence on continue if re.search("^\* ", l): new_text += l+"\r\n" # sinon on est arrivé à la fin de la section et on ajoute la marque d'import else: new_text += l+'\r\n{{Import:DAF8}}\r\n\r\n' r = False rfait = True else: new_text += l+"\r\n" # On vérifie que la marque a bien été apposée ; # sinon c'est que la section de référence était en fin de page # et n'avait donc pas de ligne supplémentaire # On ajoute donc la marque à la fin if not rfait: new_text += '\r\n{{Import:DAF8}}\r\n\r\n' # Sinon aucun changement à effectuer else: new_text = original_text # FIN... return new_text
- problèmes rencontrés :
- accord : il y a plusieurs section de références, et le robot a donc créé deux modèle import:DAF8... J'ai donc changé
elif r == True:
- en
elif r == True and rfait == False:
- pour ne faire le changement qu'une seule fois : la première, qui est censée être le français.
- Dans l'éventualité où des sections non françaises se trouveraient avant (caractères et conventions internationales dans le standard), j'ai ajouté une condition (fr) qui vérifie qu'on est bien dans une section française (on n'est jamais trop prudent).
- Problème plus général (bug de pywikipedia) : quand dans le fichier file: utilisé il y a des articles dont le nom correspond à un code de langue, alors le code de langue est changé en ce nom-là et le titre d'article oublié, ce qui casse complètement la suite. Résolution : Pagegenerator.py:TextfilePageGenerator:ligne 204 :
if parts[i] in fam.langs and len(parts) > 1:
(ajout de la seconde condition).
- accord : il y a plusieurs section de références, et le robot a donc créé deux modèle import:DAF8... J'ai donc changé
- Terminé. Pas d'autre problèmes rencontrés.
Mars 2007
[modifier le wikicode]Catégorisation automatique
[modifier le wikicode]À partir du 8 mars. Nouveau passage :
- règles supplémentaires utilisées :
- tirets = espaces
- apostrophe supprimée
- Script utilisé : catauto.py mis à jour.
- Données utilisées : voir Liste ascii.
- Liste : Passage sur tous les articles
Problèmes rencontrés :
- Certains modèles de langue portent des paramètres, ce qui ne devrait pas être le cas (
{{=ln=}}
notamment) : Ce paramètre pose problème pour mon script qui utilise la partie droite =}} de ces modèles pour reconnaitre les langues, ce qui fait que le robot charcute finalement l'article.- Solution apportée : élimination des paramètres dans les modèles de langue avant traitement par le robot.
- Erreur dans la solution proposée précédemment (erreur d'expression rationnelle).
- Solution apportée : script corrigé, et articles mal traités corrigés.
- En examinant le log, j'ai trouvés des articles qui posaient problème pour mon script : ces articles possèdent plusieurs sections de langue pour une même langue (ce qui ne devrait pas être le cas). Le script n'en reconnaissant qu'une (table de hachage) réécrit la seconde dans la première.
- Solution apportée : correction des articles repérés dans le log, puis repérage et correction des articles dans ce cas (dans le dernier dump).
Alphabet latin terminé.
Avril 2007
[modifier le wikicode]Netoyage des catégories DAF1932
[modifier le wikicode]Les catégories Catégorie:Noms communs en français etc. sont "polluées" par les pages non fusionnées du DAF8. Mon bot passe sur l'ensemble de ces pages pour leur enlever toute catégorisation.
- liste : pages liées au modèle
{{DAF1932}}
- script : replace.py avec le fix suivant :
'nocatdaf' : { 'regex' : True, 'msg' : { 'fr':u'Robot : Suppression des catégories des pages du DAF8 non fusionnées', }, 'replacements': [ (u"\n\[\[Catégorie:.+? en français.*?\]\]", r""), (u"\n\[\[Catégorie:français.*?\]\]", r""), ], },
- Commentaire : j'ai ajouté un petit truc aux modèles de titre pour qu'ils ne catégorisent automatiquement que les articles qui sont dans l'espace principal (non Wiktionnaire, Utilisateur, Discuter, etc.). Même chose pour le modèle
{{=fr=}}
.
Novembre 2007
[modifier le wikicode]Élimination des sections vides
[modifier le wikicode]Certains articles comportent des sections vides (par exemple on a {{-adj-|fr}} suivi de {{-nom-|fr}}). Le bot élimine ces sections vides.
- liste : pages du type
"{{-type-}}\r\n\r?\n?{{-type-}}"
- nombre : un peu plus de 50
- script : replace.py :
s%\{\{-.+?-.*?\}\}\r\n(\r\n\{\{-)%\1%
- commentaire : « sections vides ôtées »
- Commentaires :
- une partie était du type
{{--}} {{-pron-}}
; j'ai dû réverté les modifs. - une partie était du type
{{-adj-}} {{-nom-}}
avec les informations d'adjectif et de nom mélangés ensuite. Il faut les reprendre un à un (ne respecte pas le format normal). - Il n'y a en fait pas d'erreurs de sections oubliées, plutôt des non-respects du format, ce qui est plus compliqué à corrigé (à la main).
- une partie était du type
Correction des o fermés/ouverts
[modifier le wikicode]Pas mal de mots ont une prononciation erronée, à cause d'un o fermé ou ouvert. En particulier, ils se répercutent dans les flexions. Un bot facilitera le changement (qui est mineur).
- liste : pages liées à des verbes en ô/au notés Erreur sur la langue ! au lieu de Erreur sur la langue !.
- script : replace.py :
s/ɔ/o/
(suivi)- correction (collision avec Erreur sur la langue !) : ajout de
s/õ/ɔ̃/
à la suite
- correction (collision avec Erreur sur la langue !) : ajout de
- commentaire : « o fermé »
- Remarques :
Nettoyage de modèles et formatage
[modifier le wikicode]Quelques modèles très courants sont à transformer, dont -etym-
. Comme je risque de passer sur tout le Wiktionnaire, j'en profite pour ajouter d'autres corrections.
- liste : mots contenant
-etym-
(entre autres) - script : replace.py, avec le code fix suivant :
'mod': { 'regex': True, 'msg': { 'fr': u'Bot: nettoyage modèles et format', }, 'replacements': [ # Espaces doubles ou en bout de lignes (u' +', ' '), (u' +\r', u'\r'), # R:DAF8 + Import:DAF8 = Import:DAF8 suffit (u'\r\n\*? ?\{\{R:DAF8\}\}[\r\n]+?(\{\{Import:DAF8\}\})', u'\r\n'+r'\1'), (u'\r\n\*? ?\{\{R:DAF8\}\}(\r\n.+?)[\r\n]+?(\{\{Import:DAF8\}\})', r'\1'+u'\r\n'+r'\2'), (u'\r\n\*? ?\{\{R:DAF8\}\}(\r\n.+?\r\n.+?)[\r\n]+?(\{\{Import:DAF8\}\})', r'\1'+u'\r\n'+r'\2'), (u'\r\n\*? ?\{\{R:DAF8\}\}(\r\n.+?\r\n.+?\r\n.+?)[\r\n]+?(\{\{Import:DAF8\}\})', r'\1'+u'\r\n'+r'\2'), (u'\r\n\*? ?\{\{R:DAF8\}\}(\r\n.+?\r\n.+?\r\n.+?\r\n.+?)[\r\n]+?(\{\{Import:DAF8\}\})', r'\1'+u'\r\n'+r'\2'), (u'\r\n\*? ?\{\{R:DAF8\}\}(\r\n.+?\r\n.+?\r\n.+?\r\n.+?\r\n.+?)[\r\n]+?(\{\{Import:DAF8\}\})', r'\1'+u'\r\n'+r'\2'), (u'\r\n\*? ?\{\{R:DAF8\}\}(\r\n.+?\r\n.+?\r\n.+?\r\n.+?\r\n.+?\r\n.+?)[\r\n]+?(\{\{Import:DAF8\}\})', r'\1'+u'\r\n'+r'\2'), # Dico Rivarol (u'\* Dictionnaire classique de la langue française - A\.C\. de Rivarol - 1827\.', u'* {{R:Rivarol}}'), # API -> pron ou éliminé si vide (toujours mieux que de laisser) (u'(\{\{-pron-\}\}\r\n)\* \{_{API\}\} : /(.+?)/\r\n\* \{\{SAMPA\}\} : /.+?/', r'\1* {{pron|\1}}'), (u'\r\n\{\{-pron-\}\}\r\n\{\{ébauche-pron\|.+\}\}\r\n\* \{\{API\}\} : //\r\n\* \{\{SAMPA\}\} : //\r\n\r\n', ''), # pron-rég accent (u'[\r\n]*\*? ?\{\{pron-r[eé]g\|', u'\r\n* {{pron-rég|'), # Espacement des sections (avant et/ou après) (u'(\{\{voir\|.+?\}\})[\r\n]*', r'\1'+u'\r\n\r\n'), (u'[\r\n]*\{\{-[eé]tym-\}\}', u'\r\n\r\n{{-étym-}}'), (u'[\r\n]*(\{\{[eé]bauche\|)', u'\r\n{{ébauche|'), (u'[\r\n]*(\{\{clé de tri)', u'\r\n\r\n\r\n'+r'\1'), (u'[\r\n]*\r\n(\{\{-.+?-)', u'\r\n\r\n'+r'\1'), (u'[\r\n]*\r\n(\{\{=.+?=)', u'\r\n\r\n'+r'\1'), # Espacements des tableaux des modèles ( - ) (u'(\{\{\(\}\})[\r\n]+', r'\1'+u'\r\n'), (u'[\r\n]+(\{\{\-\}\})[\r\n]+', u'\r\n'+r'\1'+u'\r\n'), (u'[\r\n]+(\{\{\)\}\})', u'\r\n'+r'\1'), # Espaces des listes (pas exhaustif je pense) (u'\n(#|\*|#:|\*\*|\#\*|\#:*) *(\[\[|\{\{|[a-zA-Z])', u'\n'+r'\1 \2'), # Pas de déterminant sur la ligne de forme svp (u'\n([Ll]es?|[Ll]a|[dD]er|[dD]ie|[dD]as) ?(\'\'\'.+?\'\'\')', u'\n'+r'\2'), # Mot vedette en gras svp, non en lien (u'(\n)\[\[(.+?)\]\](.*?\r\n#)', r"\1'''\2'''\3"), # Pas de : en fin de ligne de forme svp (u'(\n\'\'\'.+?\'\'\'.*?) ?:?(\r\n#)', r"\1\2"), # pron sur la ligne de forme en remplacement de // # (plusieurs fois au cas où) (u'(\n\'\'\'.+?\'\'\'.+?)/(.+?)/(.*?\r\n#)', r'\1{{pron|\2}}\3'), (u'(\n\'\'\'.+?\'\'\'.+?)/(.+?)/(.*?\r\n#)', r'\1{{pron|\2}}\3'), (u'(\n\'\'\'.+?\'\'\'.+?)/(.+?)/(.*?\r\n#)', r'\1{{pron|\2}}\3'), (u'(\n\'\'\'.+?\'\'\'.+?)/(.+?)/(.*?\r\n#)', r'\1{{pron|\2}}\3'), # pron avec un truc vide => {{pron|}} (u'\{\{pron\|(\.\.\.|\?|\-| )\}\}', r'{{pron|}}'), # Images # (à faire au cas par cas?) #(u'\[\[[iI]mage:(.+?)\|([^\|\r\n\}]+?)\]\]', r'[[Image:\1|thumb|\2\]\]'), # Lien ucf (majuscule en premier) avec lien vers section française (u'# ?\[\[(.+?)#Français\|(.+?)\]\]', r'# {{ucf|\1}}'), # Lien annexe avec modèle (u'\* \[\[Annexe:(.+?)\|'+r'\1\]\]', r'* {{Annexe|\1}}'), (u'\* \[\[Annexe:(.+?)\|(.+?)\]\]', r'* {{Annexe|\1|\2}}'), # Accord : accent (u'\{\{fr-accord-r[ée]g\|', u'{{fr-rég|'), (u'\{\{fr-reg\|', u'{{fr-rég|'), # Types de mots : accent (u'\{\{-adj-dem-', u'{{-adj-dém-'), (u'\{\{-adj-indef-', u'{{-adj-indéf-'), (u'\{\{-art-def-\}\}', u'{{-art-déf-'), (u'\{\{-art-indef-', u'{{-art-indéf-'), (u'\{\{-def-', u'{{-déf-'), (u'\{\{-flex-prep-', u'{{-flex-prép-'), (u'\{\{-loc-prep-', u'{{-loc-prép-'), (u'\{\{-pronom-dem-', u'{{-pronom-dém-'), # Niveau3 : accents #(u'\{\{-mero-', u'{{-méro-'), #(u'\{\{-pref-', u'{{-préf-'), (u'\{\{-prep-', u'{{-prép-'), # Terminologie : correction code et accent # Complets (namespace=0 en tout cas) #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{chi\}\}', r'\1'+u'{{chim}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{des\}\}', r'\1'+u'{{dés}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{ecolo\}\}', r'\1'+u'{{écol}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{econ\}\}', r'\1'+u'{{écon}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{electro\}\}', r'\1'+u'{{électro}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{erot\}\}', r'\1'+u'{{érot}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{femin\}\}', r'\1'+u'{{fémin}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{genet\}\}', r'\1'+u'{{génét}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{geog\}\}', r'\1'+u'{{géog}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{geol\}\}', r'\1'+u'{{géol}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{geom\}\}', r'\1'+u'{{géom}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{geoph\}\}', r'\1'+u'{{géoph}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{herald\}\}', r'\1'+u'{{hérald}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{med\}\}', r'\1'+u'{{méde}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{metaph\}\}', r'\1'+u'{{métaph}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{meton\}\}', r'\1'+u'{{méton}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{neo\}\}', r'\1'+u'{{néol}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{pec\}\}', r'\1'+u'{{pêch}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{pedo\}\}', r'\1'+u'{{pédo}}'), ##(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{pej\}\}', r'\1'+u'{{péj}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{poes\}\}', r'\1'+u'{{poés}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{poet\}\}', r'\1'+u'{{poét}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{pre\}\}', r'\1'+u'{{pré}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{pres\}\}', r'\1'+u'{{prés}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{refl\}\}', r'\1'+u'{{réfl}}'), #(u'(#.+?|\* ?\[\[.+?\]\] ?|\{\{.+?\}\},? ?)\{\{theol\}\}', r'\1'+u'{{théol}}'), # Lien création d'article (u'\{\{cree\}\}', u'{{créer}}'), (u'\{\{cree\|', u'{{créer|'), # WP, Wikilivre, etc. : puce (u'\n(\{\{(WP|)\}\})', u'\n* '+r'\1'), # Forme de l'étymologie : # majuscule au moins pour de/le (u'(\{\{-étym-\}\}\r\n):? ?d([ue])', r'\1: D\2'), (u'(\{\{-étym-\}\}\r\n):? ?l([ea])', r'\1: L\2'), # langue hors modèles (u'(\{\{-étym-\}\}\r\n):? ?(.+?)\{\{la\}\}', r'\1: \2latin'), (u'(\{\{-étym-\}\}\r\n):? ?(.+?)\{\{grc\}\}', r'\1: \2grec ancien'), (u'(\{\{-étym-\}\}\r\n):? ?(.+?)\{\{fr\}\}', r'\1: \2fran'+u'çais'), (u'(\{\{-étym-\}\}\r\n):? ?(.+?)\{\{en\}\}', r'\1: \2anglais'), (u'(\{\{-étym-\}\}\r\n):? ?(.+?)\{\{de\}\}', r'\1: \2allemand'), ], },
- Attention : changements dans replace.py pour ne pas changer les pages s'il n'y a que des sauts de page à insérer ou ajouter (ligne 303):
new_short = re.sub('[\r\n]+', '', new_text) ; old_short = re.sub('[\r\n]+', '', original_text) ; if new_text == original_text or new_short == old_short:
- avancement :
- entrainement, tests ;
- terminologies finis (namespace=0 en tout cas) ;
- -méro-, -préf-, -prép- faits.