Difference between revisions 15148305 and 15170926 on frwiktionary[[Catégorie:JackBot|{{SUBPAGENAME}}]] <source lang=python> #!/usr/bin/env python # coding: utf-8 ''' Ce script formate les pages du Wiktionnaire, tous les jours après minuit depuis le Toolserver : 1) Retire certains doublons de modèles et d'espaces. 2) Ajoute les clés de tris, prononciations vides, et certains liens vers les conjugaisons. 3) Met à jour les liens vers les traductions (modèles trad, trad+, trad-, trad-début et trad-fin), et les classe par ordre alphabétique. 4) Ajoute les codes langues appropriés dans les modèles du Wiktionnaire du namespace 0 et paragraphes appropriés (dont "nocat=1" si une catégorie le justifie). 5) Complète les flexions de verbes en français à vérifier. 6) Traduit les importations de en.wikt. 7) Gère des modèles {{voir}} en début de page. 8) Ajoute les anagrammes (pour les mots de sept lettres ou moins) 9) Teste les URL et indique si elles sont brisées avec {{lien brisé}}, et les transforme en modèle s'il existe pour leur site 10) Remplace les modèles catégorisés comme obsolètes 11) Créer des liens absents : http://fr.wiktionary.org/w/index.php?title=radiateur&diff=prev&oldid=14443668 12) Détecte les modèles à ajouter : http://fr.wiktionary.org/w/index.php?title=cl%C3%A9&diff=prev&oldid=14443625 13) Crée les redirection d'apostrophe dactylographique vers apostrophe typographique Testé ici : http://fr.wiktionary.org/w/index.php?title=Utilisateur%3AJackBot%2Ftest&diff=14533806&oldid=14533695 ''' # Importation des modules import catlib, pagegenerators, os, codecs, urllib, re, collections, socket import hyperlynx, CleDeTri, HTMLUnicode # Faits maison from wikipedia import * # Déclaration language = "fr" family = "wiktionary" mynick = "JackBot" site = getSite(language,family) debogage = False debogageLent = False TailleAnagramme = 7 # sinon trop long : 5 > 5 min, 8 > 1 h par page) # Modèles du site à traiter limit6=9834 Modele = range(1, limit6+1) # http://fr.wiktionary.org/wiki/Cat%C3%A9gorie:Mod%C3%A8les_de_type_de_mot_du_Wiktionnaire Modele[1] = u'-adj-' Modele[2] = u'-flex-adj-indéf-' Modele[3] = u'-adj-dém-' Modele[4] = u'-adj-excl-' Modele[5] = u'-adj-indéf-' (contracted; show full)Modele[831] = u'hindouisme' Modele[832] = u'marbrerie' Modele[833] = u'miroiterie' Modele[834] = u'fontainerie' Modele[835] = u'phonétique' Modele[836] = u'apiculture' Modele[837] = u'insecte' Modele[838] = u'poisson' ⏎ Modele[839] = u'électoraux' limit4 = 83940 # code langue quoi qu'il arrive Modele[839] = u'ébauche-déf'⏎ Modele[840] = u'ébauche-étym' Modele[841] = u'ébauche-pron' Modele[842] = u'ébauche' Modele[843] = u'ébauche-exe' Modele[844] = u'ébauche-pron' Modele[845] = u'ébauche-syn' Modele[846] = u'note-gentilé' Modele[847] = u'ébauche-étym-nom-scientifique' Modele[848] = u'ébauche-trans' Modele[849] = u'ébauche-déf'⏎ ''' # non traités Modele[] = u'spécialement' Modele[] = u'T' Modele[] = u'région' Modele[] = u'régio' Modele[] = u'régional' ''' # Modèles régionaux, pb du nocat pour les prononciations limit5 = 849 Modele[849] = u'Louisiane'50 Modele[850] = u'Lyonnais' Modele[851] = u'Madagascar' Modele[852] = u'Maghreb' Modele[853] = u'Mali' Modele[854] = u'Maroc' Modele[855] = u'Marseille' Modele[856] = u'Maurice' (contracted; show full)Modele[974] = u'Irlande' Modele[975] = u'Jamaïque' Modele[976] = u'Languedoc-Roussillon' Modele[977] = u'Le Mans' Modele[978] = u'Liban' Modele[979] = u'Liechtenstein' Modele[980] = u'Limousin' Modele[981] = u'Louisiane'⏎ # Modèles de pronociation à synchroniser Modele[9812] = u'en-conj-rég' #Modele[] = u'fr-rég' #Modele[] = u'fr-inv' # Modèles des autres Wiktionnaires à convertir LimitTemplate = 82 Template = range(1, LimitTemplate+1) TemplateFR = range(1, LimitTemplate+1) Template[1] = u'===Adjective===' TemplateFR[1] = u'{{-adj-}}' Template[2] = u'===Adverb===' (contracted; show full) PageTemp = PageTemp.replace(u'{{sexua|', u'{{sexe|') PageTemp = PageTemp.replace(u'{{conj-hbo}}', u'{{conjugaison|hbo}}') PageTemp = PageTemp.replace(u'{{-trad-}}\n{{trad-début}}\n{{trad-fin}}', u'') # trait gris PageTemp = PageTemp.replace(u'{|\n|}', u'') PageTemp = PageTemp.replace(u'{{auxiliaire être}}', u'{{note-auxiliaire|fr|être}}') PageTemp = PageTemp.replace(u'myt=scandinave', u'myt=nordique') PageTemp = PageTemp.replace(u'religion|rel=chrétienne', u'christianisme') PageTemp = PageTemp.replace(u'religion|rel=islamique', u'islam') PageTemp = PageTemp.replace(u'religion|rel=musulmane', u'islam') PageTemp = PageTemp.replace(u'religion|rel=boudhiste', u'boudhisme') PageTemp = PageTemp.replace(u'religion|rel=juive', u'judaïsme') PageTemp = PageTemp.replace(u'religion|spéc=chrétienne', u'christianisme') PageTemp = PageTemp.replace(u'religion|spéc=islamique', u'islam') PageTemp = PageTemp.replace(u'religion|spéc=musulmane', u'islam') PageTemp = PageTemp.replace(u'religion|spéc=boudhiste', u'boudhisme') PageTemp = PageTemp.replace(u'religion|spéc=juive', u'judaïsme') PageTemp = PageTemp.replace(u'religion|fr|rel=chrétienne', u'christianisme|fr') PageTemp = PageTemp.replace(u'religion|fr|rel=islamique', u'islam|fr') PageTemp = PageTemp.replace(u'religion|fr|rel=musulmane', u'islam|fr') PageTemp = PageTemp.replace(u'religion|fr|rel=boudhiste', u'boudhisme|fr') PageTemp = PageTemp.replace(u'religion|fr|rel=juive', u'judaïsme|fr') PageTemp = PageTemp.replace(u'religion|nocat=1|rel=chrétienne', u'christianisme|nocat=1') PageTemp = PageTemp.replace(u'religion|nocat=1|rel=islamique', u'islam|nocat=1') PageTemp = PageTemp.replace(u'religion|nocat=1|rel=musulmane', u'islam|nocat=1') PageTemp = PageTemp.replace(u'religion|nocat=1|rel=boudhiste', u'boudhisme|nocat=1') PageTemp = PageTemp.replace(u'religion|nocat=1|rel=juive', u'judaïsme|nocat=1')⏎ while PageTemp.find(u'}}: //\n') != -1: PageTemp = PageTemp[0:PageTemp.find(u'}}: //\n')] + PageTemp[PageTemp.find(u'}}: //\n')+len(u'}}: //'):len(PageTemp)] while PageTemp.find(u'num=1|num=') != -1: if debogage == True: print u'retrait d\'un double num' PageTemp = PageTemp[:PageTemp.find(u'num=1|num=')] + PageTemp[PageTemp.find(u'num=1|num=')+len(u'num=1|'):] (contracted; show full) while PageTemp.find(u'\n #:') != -1: PageTemp = PageTemp[0:PageTemp.find(u'\n #:')+1] + PageTemp[PageTemp.find(u'\n #:')+2:len(PageTemp)] while PageTemp.find(" }}") < PageTemp.find("}}") and PageTemp.find(" }}") != -1: PageTemp = PageTemp[0:PageTemp.find(" }}")] + PageTemp[PageTemp.find(" }}")+1:len(PageTemp)] ⏎ PageEnd = u'' while PageTemp.find(u' ') != -1: if debogage == True: print u'Espace insécable' PageEnd = PageEnd + PageTemp[:PageTemp.find(u' ')] PageTemp = PageTemp[PageTemp.find(u' '):] if PageEnd.rfind(u'{{') == -1 or PageEnd.rfind(u'{{') < PageEnd.rfind(u'}}'): PageTemp = u' ' + PageTemp[len(u' '):] else: PageEnd = PageEnd + PageTemp[:len(u' ')] PageTemp = PageTemp[len(u' '):] PageTemp = PageEnd + PageTemp PageEnd = u'' while PageTemp.find(u'\n#:') != -1: PageEnd = PageEnd + PageTemp[0:PageTemp.find(u'\n#:')+2] if PageEnd.rfind(u'{{langue|') == PageEnd.rfind(u'{{langue|fr}}'): PageTemp = u'*' + PageTemp[PageTemp.find(u'\n#:')+len(u'\n#:'):len(PageTemp)] else: PageTemp = u':' + PageTemp[PageTemp.find(u'\n#:')+len(u'\n#:'):len(PageTemp)] (contracted; show full) PageTemp = PageTemp[:PageTemp.find(u'\n')+PageTemp2.find(u'{{')+2] + u'T|' + PageTemp[PageTemp.find(u'\n')+PageTemp2.find(u'{{')+2:] # Rangement de la ligne de la traduction par ordre alphabétique de la langue dans PageEnd langue1 = PageTemp[PageTemp.find(u'{{T|')+4:PageTemp.find(u'}')] if langue1.find(u'|') != -1: langue1 = langue1[0:langue1.find(u'|')] #raw_input(PageEnd.encode(config.console_encoding, 'replace'))⏎ if langue1 != u'' and (PageEnd.find(u'<!--') == -1 or PageEnd.find(u'-->') != -1): # bug https://fr.wiktionary.org/w/index.php?title=Utilisateur:JackBot/test&diff=15092317&oldid=15090227 #if PageEnd.find(u'<!--') != -1: raw_input(PageEnd[0:PageEnd.rfind(u'\n')].encode(config.console_encoding, 'replace')) if debogageLent == True: print u'Langue 1 : ' + langue1 (contracted; show full) PageEnd = PageEnd[0:PageEnd.rfind(u'\n')] #print PageEnd[PageEnd.rfind(u'\n'):len(PageEnd)].encode(config.console_encoding, 'replace') else: break PageEnd = PageEnd + TradCourante + TradSuivantes elif debogage == True: print u'Ligne sans langue : ' + PageTemp2.encode(config.console_encoding, 'replace') elif PageTemp.find(u'\n') != -1: PageEnd = PageEnd + PageTemp[:PageTemp.find(u'\n')] PageTemp = PageTemp[PageTemp.find(u'\n'):] else: PageEnd = PageEnd + PageTemp PageTemp = u'' if debogageLent == True: print u'Ligne : ' + PageTemp[:PageTemp.find(u'\n')+1].encode(config.console_encoding, 'replace') PageEnd = PageEnd + PageTemp[0:PageTemp.find(u'\n')+1] PageTemp = PageTemp[PageTemp.find(u'\n')+1:len(PageTemp)] #print(PageEnd.encode(config.console_encoding, 'replace')) #print(PageTemp.encode(config.console_encoding, 'replace')) PageTemp = PageEnd + PageTemp PageEnd = u'' (contracted; show full) PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] else: if PageTemp.find(u'|nocat=1') != -1: PageTemp = PageTemp[0:PageTemp.find(u'|nocat=1')] + PageTemp[PageTemp.find(u'|nocat=1')+len(u'|nocat=1'):len(PageTemp)] PageTemp = u'|' + codelangue + PageTemp break elif Modele[p] == u'mythologie' or Modele[p] == u'myth ol' or Modele[p] == u'myth' or Modele[p] == u'fantastique' or Modele[p] == u'fanta': # Modèle à deux paramètres param = u''⏎ if (PageTemp.find("u'myt="') != -1 and PageTemp.find("myt=") < PageTemp.find("}}")):u'myt=') < PageTemp.find("}}")): param = u'myt=' elif (PageTemp.find(u'spéc=') != -1 and PageTemp.find(u'spéc=') < PageTemp.find("}}")): param = u'spéc=' elif (PageTemp.find(u'|') != -1 and PageTemp.find(u'|') < PageTemp.find("}}")): PageTemp2 = PageTemp[PageTemp.find(u'|')+1:] if (PageTemp.find("myt="2.find(u'|') != -1 and PageTemp2.find(u'|') < PageTemp2.find("}}")): # Présence d'un {{{2}}}, à ne pas retirer PageEnd = PageEnd + PageTemp[0:PageTemp.find(u'}}')+2] PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] break if param != u'': if PageTemp.find(param) > position+1: # myt= est après le code langue if (EstCodeLangue == "false" ) or (PageTemp.find(u'Catégorie:Animaux imaginaires' ) != -1 and (PageTemp.find(u':Catégorie:Animaux imaginaires') < PageTemp.find(u'{{langue|') and PageTemp.find(u'{{langue|') != -1 or PageTemp.find(u'{{langue|') == -1 ) and (PageTemp.find(u':Catégorie:Animaux imaginaires') + 1 != PageTemp.rfind(u'Catégorie:Animaux imaginaires')) ) or (PageTemp.find(u'Catégorie:Plantes imaginaires' ) != -1 and (PageTemp.find(u':Catégorie:Plantes imaginaires') < PageTemp.find(u'{{langue|') and PageTemp.find(u'{{langue|') != -1 or PageTemp.find(u'{{langue|') == -1 ) and (PageTemp.find(u':Catégorie:Plantes imaginaires') + 1 != PageTemp.rfind(u'Catégorie:Plantes imaginaires')) ) or (PageTemp.find(u'Catégorie:Divinités' ) != -1 and (PageTemp.find(u':Catégorie:Divinités') < PageTemp.find(u'{{langue|') and PageTemp.find(u'{{langue|') != -1 or PageTemp.find(u'{{langue|') == -1 ) and (PageTemp.find(u':Catégorie:Divinités') + 1 != PageTemp.rfind(u'Catégorie:Divinités'))): PageEnd = PageEnd + Modele[p] + u'|nocat=1|' + PageTemp[PageTemp.find("myt="param):PageTemp.find(u'}}')+2] PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] break else: PageEnd = PageEnd + Modele[p] + u'|' + codelangue + PageTemp[PageTemp.find("myt="param)-1:PageTemp.find(u'}}')+2] PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] break else: # myt= est avant un éventuel code langue PageTemp2 = PageTemp[position+1:len(PageTemp)] if (PageTemp2.find(u'|') != -1) and (PageTemp2.find(u'|') < PageTemp2.find(u'}}')): # il y a un code langue if EstCodeLangue == "false": (contracted; show full) PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] else: PageEnd = PageEnd + PageTemp[0:position] + "|" + codelangue + "}}" PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] break elif Modele[p] == u'religion' or Modele[p] == u'reli': # Modèle à deux paramètres param = u''⏎ if (PageTemp.find("rel=") != -1 and PageTemp.find("rel=") < PageTemp.find("}}")): param = u'rel=' elif PageTemp.find("rel="(PageTemp.find(u'spéc=') != -1 and PageTemp.find(u'spéc=') < PageTemp.find("}}")): param = u'spéc=' elif (PageTemp.find(u'|') != -1 and PageTemp.find(u'|') < PageTemp.find("}}")): PageTemp2 = PageTemp[PageTemp.find(u'|')+1:] if (PageTemp2.find(u'|') != -1 and PageTemp2.find(u'|') < PageTemp2.find("}}")): # Présence d'un {{{2}}}, à ne pas retirer PageEnd = PageEnd + PageTemp[0:PageTemp.find(u'}}')+2] PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] break if param != u'': if PageTemp.find(param) > position+1: # rel= est après le code langue if (EstCodeLangue == "false" ) or (PageTemp.find(u'Catégorie:Divinités' ) != -1 and (PageTemp.find(u':Catégorie:Divinités') < PageTemp.find(u'{{langue|') and PageTemp.find(u'{{langue|') != -1 or PageTemp.find(u'{{langue|') == -1 ) and (PageTemp.find(u':Catégorie:Divinités') + 1 != PageTemp.rfind(u'Catégorie:Divinités'))): PageEnd = PageEnd + Modele[p] + u'|nocat=1|' + PageTemp[PageTemp.find("rel="param):PageTemp.find(u'}}')+2] PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] break else: PageEnd = PageEnd + Modele[p] + u'|' + codelangue + PageTemp[PageTemp.find("rel="param)-1:PageTemp.find(u'}}')+2] PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] break else: # rel= est avant un éventuel code langue PageTemp2 = PageTemp[position+1:len(PageTemp)] if (PageTemp2.find(u'|') != -1) and (PageTemp2.find(u'|') < PageTemp2.find(u'}}')): # il y a un code langue if EstCodeLangue == "false": (contracted; show full) PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] else: PageEnd = PageEnd + PageTemp[0:position] + "|" + codelangue + "}}" PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] break elif Modele[p] == u'sport': if (PageTemp.find( "u'sport="') != -1 and PageTemp.find("u'sport="') < PageTemp.find("}}")): if PageTemp.find("u'sport="') > position+1: # sport= est après le code langue if (EstCodeLangue == "false" ) or (PageTemp.find(u'Catégorie:Sports' ) != -1 and (PageTemp.find(u':Catégorie:Sports') < PageTemp.find(u'{{langue|') and PageTemp.find(u'{{langue|') != -1 or PageTemp.find(u'{{langue|') == -1 ) and (PageTemp.find(u':Catégorie:Sports') + 1 != PageTemp.rfind(u'Catégorie:Sports'))): PageEnd = PageEnd + Modele[p] + u'|nocat=1|' + PageTemp[PageTemp.find("u'sport="'):PageTemp.find(u'}}')+2] PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] break else: PageEnd = PageEnd + Modele[p] + u'|' + codelangue + PageTemp[PageTemp.find("u'sport="')-1:PageTemp.find(u'}}')+2] PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] break else: # sport= est avant un éventuel code langue PageTemp2 = PageTemp[position+1:len(PageTemp)] if (PageTemp2.find(u'|') != -1) or (PageTemp2.find(u'|') < PageTemp2.find(u'}}')): # il y a un code langue if EstCodeLangue == "false": (contracted; show full) PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] else: PageEnd = PageEnd + PageTemp[0:position] + "|" + codelangue + "}}" PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] break elif Modele[p] == u'plante': if (PageTemp.find(u'spéc=') != -1 and PageTemp.find(u "'spéc="') < PageTemp.find("}}")): if PageTemp.find(u"'spéc="') > position+1: # spéc= est après le code langue if (EstCodeLangue == "false" ) or (PageTemp.find(u'Catégorie:Plantes' ) != -1 and (PageTemp.find(u':Catégorie:Plantes') < PageTemp.find(u'{{langue|') and PageTemp.find(u'{{langue|') != -1 or PageTemp.find(u'{{langue|') == -1 ) and (PageTemp.find(u':Catégorie:Plantes') + 1 != PageTemp.rfind(u'Catégorie:Plantes'))): PageEnd = PageEnd + Modele[p] + u'|nocat=1|' + PageTemp[PageTemp.find(u"'spéc="'):PageTemp.find(u'}}')+2] PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] break else: PageEnd = PageEnd + Modele[p] + u'|' + codelangue + PageTemp[PageTemp.find(u"'spéc="')-1:PageTemp.find(u'}}')+2] PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] break else: # spéc= est avant un éventuel code langue PageTemp2 = PageTemp[position+1:len(PageTemp)] if (PageTemp2.find(u'|') != -1) or (PageTemp2.find(u'|') < PageTemp2.find(u'}}')): # il y a un code langue if EstCodeLangue == "false": (contracted; show full) TraitementLiens = crawlerLink(u'Modèle:fémin',u'') TraitementLiens = crawlerLink(u'Modèle:femin',u'') TraitementLiens = crawlerLink(u'Modèle:sing',u'') TraitementLiens = crawlerLink(u'Modèle:plur',u'') TraitementLiens = crawlerLink(u'Modèle:pluri',u'') TraitementLiens = crawlerLink(u'Modèle:=langue=',u'') ''' #TraitementLiens = crawlerLink(u'Modèle:trad-',u'') #TraitementCategorie = crawlerCat(u'Catégorie:Wiktionnaire:Conjugaisons manquantes en français',True,u'') #TraitementCategorie = crawlerCat(u'Catégorie:Appels de modèles incorrects:pron conv',TruTraitementLiens = crawlerLink(u'Modèle:trad-',u'') TraitementCategorie = crawlerCat(u'Catégorie:Wiktionnaire:Conjugaisons manquantes en français',True,u'') TraitementCategorie = crawlerCat(u'Catégorie:Appels de modèles incorrects:pron conv',True,u'') TraitementCategorie = crawlerCat(u'Lexique en français de la mythologie',False,u'') TraitementCategorie = crawlerCat(u'Lexique en français de la religion',False,u'') # Modèles TraitementPage = modification(u'Utilisateur:JackBot/test') TraitementFile = crawlerFile('articles_WTin.txt') TraitementLiens = crawlerLink(u'Modèle:terme',u'') TraitementLiens = crawlerLink(u'Modèle:R:DAF8',u'') TraitementLiens = crawlerLink(u'Modèle:Import:DAF8',u'') TraitementLiensCategorie = crawlerCatLink(u'Modèles de code langue',u'') TraitementCategorie = crawlerCat(u'Catégorie:Appels de modèles incorrects',True,u'') TraitementRecherche = crawlerSearch(u'clé de tri') TraitementUtilisateur = crawlerUser(u'Utilisateur:JackBot') TraitementRedirections = crawlerRedirects() TraitementTout = crawlerAll(u'') while 1: TraitementRC = crawlerRC() # python delete.py -lang:fr -family:wiktionary -file:articles_WTin.txt ''' </source> All content in the above text box is licensed under the Creative Commons Attribution-ShareAlike license Version 4 and was originally sourced from https://fr.wiktionary.org/w/index.php?diff=prev&oldid=15170926.
![]() ![]() This site is not affiliated with or endorsed in any way by the Wikimedia Foundation or any of its affiliates. In fact, we fucking despise them.
|