Difference between revisions 15170926 and 15195624 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 moinpetits mots) 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 = 75 # sinon trop long : 5 > 5 min, 8 > 1 h par page) # Modèles du site à traiter limit6=9848 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[74] = u'-nom-' Modele[75] = u'-nom-fam-' Modele[76] = u'-nom-ni-' Modele[77] = u'-nom-nu-' Modele[79] = u'-nom-nn-' Modele[79] = u'-nom-npl-' Modele[80] = u'-nom-pr-' Modele[81] = u'-nom- sciencespropre-' Modele[82] = u'-numér-' Modele[83] = u'-part-' Modele[84] = u'-post-' Modele[85] = u'-préf-' Modele[87] = u'-prép-' Modele[88] = u'-pronom-' Modele[89] = u'-pronom-adj-' Modele[90] = u'-pronom-dém-' Modele[91] = u'-pronom-indéf-' Modele[92] = u'-pronom-int-' Modele[93] = u'-pronom-pers-' Modele[94] = u'-pronom-pos-' Modele[95] = u'-pronom-rel-' Modele[96] = u'-prov-' Modele[97] = u'-racine-' Modele[98] = u'-radical-' Modele[99] = u'-rimes-' Modele[100] = u'-sigle-' Modele[101] = u'-signe-' Modele[102] = u'-subst-pron-pers-' Modele[103] = u'-suf-' Modele[104] = u'-flex-suf-' Modele[105] = u'-var-typo-' Modele[106] = u'-verb-' Modele[107] = u'-verb-pr-' Modele[108] = u'-verbe-' Modele[109] = u'-adjectif-' Modele[110] = u'-adverbe-' Modele[111] = u'-locution-' Modele[112] = u'-préfixe-' Modele[113] = u'-suffixe-' Modele[114] = u'-symb-' Modele[115] = u'-inf-' Modele[116] = u'-onoma-' Modele[117] = u'-onoma-' Modele[118] = u'-flex-loc-verbe-' Modele[119] = u'-class-' Modele[120] = u'-sinogramme-' Modele[121] = u'-prénom-' Modele[122] = u'-flex-prénom-' Modele[123] = u'-num-' Modele[124] = u'-nom-sciences-'⏎ limit1 = 1245 # Paragraphes avec modèle catégorisant # http://fr.wiktionary.org/wiki/Cat%C3%A9gorie:Mod%C3%A8les_de_contexte Modele[124] = u'-exp-'⏎ Modele[125] = u'-faux-amis-' Modele[126] = u'-gent-' Modele[127] = u'-hist-' Modele[128] = u'-holo-' Modele[129] = u'-homo-' Modele[130] = u'-hyper-' Modele[131] = u'-hypo-' Modele[132] = u'-image-' Modele[133] = u'-méro-' Modele[134] = u'-note-' #notes Modele[135] = u'-var-ortho-' Modele[136] = u'-ortho-arch-' Modele[137] = u'-paro-' Modele[138] = u'-vidéo-' Modele[139] = u'-q-syn-' Modele[140] = u'-réf-' Modele[141] = u'-sino-dico-' Modele[142] = u'-sous-esp-' Modele[143] = u'-syll-' Modele[144] = u'-syn-' Modele[145] = u'-noms-vern-' Modele[146] = u'-tran-' Modele[147] = u'-trans-' Modele[148] = u'-translit-' Modele[149] = u'-tropo-' Modele[150] = u'-var-' Modele[151] = u'-voc-' Modele[152] = u'-voir-' Modele[153] = u'-pron-' Modele[154] = u'-abrév-' Modele[155] = u'-anagr-' Modele[156] = u'-ant-' Modele[157] = u'-apr-' Modele[158] = u'-cit-' Modele[159] = u'-compos-' Modele[160] = u'-conjug-' Modele[161] = u'-décl-' Modele[162] = u'-dial-' Modele[163] = u'-trad-' Modele[164] = u'-drv-int-' Modele[165] = u'-étym-' Modele[166] = u'-abréviation-' Modele[167] = u'-dimin-' Modele[168] = u'-drv-'⏎ Modele[169] = u'-exp-' limit2 = 16970 # Paragraphes sans modèle catégorisant, {{voir| et {{voir/ sont gérés individuellement Modele[169] = u'PàS'⏎ Modele[170] = u'vérifier' Modele[171] = u'voir' Modele[172] = u'(' Modele[173] = u')' Modele[174] = u'trad-début' Modele[175] = u'trad-fin' Modele[176] = u'titre alt' Modele[177] = u'titre mis en forme' Modele[178] = u'trad' Modele[179] = u'trad+' Modele[180] = u'trad-' Modele[181] = u'trad--' Modele[182] = u'préciser' Modele[183] = u'?' Modele[184] = u'doute' Modele[185] = u'm' Modele[186] = u'f' Modele[187] = u'titre incorrect' Modele[188] = u'formater' Modele[189] = u'suppression' Modele[190] = u'supp' Modele[191] = u'SI' Modele[192] = u'supprimer ?'⏎ ⏎ limit25 = 193 Modele[193] = u'moins courant'PàS' limit25 = 194 Modele[194] = u'plus rare' Modele[195] = u'beaucoup plus courant' Modele[196] = u'beaucoup moins courant' Modele[197] = u'pl-cour' Modele[198] = u'm-cour' Modele[199] = u'pl-rare' Modele[200] = u'b-pl-cour' Modele[201] = u'b-m-cour' Modele[202] = u'n' Modele[203] = u'c' Modele[204] = u'mf' Modele[205] = u'mf?' Modele[206] = u'fm ?' Modele[207] = u'plus courant'⏎ Modele[208] = u'moins courant' limit3 = 2089 # Paragraphes sans modèle catégorisant pouvant contenir des modèles # http://fr.wiktionary.org/wiki/Cat%C3%A9gorie:Mod%C3%A8les_de_domaine_d%E2%80%99utilisation Modele[208] = u'joaillerie'⏎ Modele[209] = u'informel' Modele[210] = u'injurieux' Modele[211] = u'interjection' Modele[212] = u'ironique' Modele[213] = u'litote' Modele[214] = u'littéraire' Modele[215] = u'péjoratif' Modele[216] = u'mélioratif' Modele[217] = u'métaphore' Modele[218] = u'métonymie' Modele[219] = u'mot-valise' Modele[220] = u'néologisme' Modele[221] = u'néol litt' Modele[222] = u'anglicisme' Modele[223] = u'antiquité' Modele[224] = u'ordinal' Modele[225] = u'palindrome' Modele[226] = u'archaïque' Modele[227] = u'poissons' Modele[228] = u'virologie' Modele[229] = u'viticulture' Modele[230] = u'zoologie' Modele[231] = u'plaisanterie' Modele[232] = u'poétique' Modele[233] = u'populaire' Modele[234] = u'propre' Modele[235] = u'proverbial' Modele[236] = u'rare' Modele[237] = u'sigle' Modele[238] = u'soutenu' Modele[239] = u'désuet' Modele[240] = u'saccusatifinsecte' Modele[241] = u'sdatifpoisson' Modele[242] = u'très familier' Modele[243] = u'vieilli' Modele[244] = u'vulgaire' Modele[245] = u'wiki' Modele[246] = u'popu' Modele[247] = u'vx' Modele[248] = u'dés' (contracted; show full)Modele[830] = u'bouddhisme' 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électoraux' Modele[838] = u'poissonjoaillerie' Modele[839] = u'électoraux' limit4 = 840 # code langue quoi qu'il arrivesaccusatif' Modele[840] = u'ébauche-étymsdatif' Modele[841] = u'ébauche-pronsinstrumental' Modele[842] = u'ébauche' Modele[843] = u'ébauche-exe'généralement indénombrable' Modele[843] = u'bibliothéconomie' limit4 = 844 # code langue quoi qu'il arrive 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' Modele[850] = u'ébauche-étym' Modele[851] = u'ébauche-pron' Modele[852] = u'ébauche' Modele[853] = u'ébauche-exe'⏎ ''' # 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 = 850 Modele[850] = u'Lyonnais' Modele[851] = u'Madagascar' Modele[852] = u'Maghreb' Modele[853] = u'Mali'4 Modele[854] = u'Maroc' Modele[855] = u'Marseille' Modele[856] = u'Maurice' Modele[857] = u'Mayotte' Modele[858] = u'Mexique' Modele[859] = u'Midi' Modele[860] = u'Midi toulousain' (contracted; show full)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' Modele[982] = u'Lyonnais' Modele[983] = u'Madagascar' Modele[984] = u'Maghreb' Modele[985] = u'Mali'⏎ # Modèles de pronociation à synchroniser Modele[9826] = 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) (contracted; show full) PageTemp = PageTemp.replace(u'\n* {{SAMPA}} :\n', u'\n') PageTemp = PageTemp.replace(u'{{Massorète}}:', u'{{Massorète}} :') PageTemp = PageTemp.replace(u'{{pron||hbo}}:', u'API :') PageTemp = PageTemp.replace(u'{{SAMPA}}:', u'{{SAMPA}} :') PageTemp = PageTemp.replace(u'{{sexua|', u'{{sexe|') PageTemp = PageTemp.replace(u'{{conj-hbo}}', u'{{conjugaison|hbo}}') PageTemp = PageTemp.replace(u'{{conj-fro}}', u'{{conjugaison|fro}}') PageTemp = PageTemp.replace(u'{{conj-frm}}', u'{{conjugaison|frm}}') PageTemp = PageTemp.replace(u'{{conj-fr}}', u'{{conjugaison|fr}}') PageTemp = PageTemp.replace(u'{{conj-en}}', u'{{conjugaison|en}}') PageTemp = PageTemp.replace(u'{{conj-es}}', u'{{conjugaison|es}}') PageTemp = PageTemp.replace(u'{{conj-de}}', u'{{conjugaison|de}}')⏎ 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') (contracted; show full) PageEnd = PageEnd + PageTemp PageTemp = u'' #print(PageEnd.encode(config.console_encoding, 'replace')) #print(PageTemp.encode(config.console_encoding, 'replace')) PageTemp = PageEnd + PageTemp PageEnd = u''""" # Ajout des anagrammes francophones (prévoir si {{lien|}} pour les autres) if debogage == True: print u'Anagrammes' if debogage == False and socket.gethostname() != "willow" and socket.gethostname() != "yarrow" and socket.gethostname() != "nightshade" and PageHS != u'six' and PageTemp.find(u'-erreur-') == -1: if PageTemp.find(u'{{-anagr-}}') == -1 and PageHS.find(u' ') == -1 and PageTemp.find(u'{{langue|fr}}') != -1 and len(PageHS) < TailleAnagramme: #print socket.gethostname() anagrammes = anagram(PageHS) ListeAnagrammes = u'' for anagramme in anagrammes: if anagramme != PageHS: pageAnagr = Page(site,anagramme) #print anagramme.encode(config.console_encoding, 'replace') if pageAnagr.exists(): if pageAnagr.namespace() !=0 and anagramme != u'Utilisateur:JackBot/test': return else: try: PageTempAnagr = pageAnagr.get() except wikipedia.NoPage: return except wikipedia.IsRedirectPage: return except wikipedia.LockedPage: return if PageTempAnagr.find(u'{{langue|fr}}') != -1: ListeAnagrammes = ListeAnagrammes + u'* [[' + anagramme + u']]\n' if ListeAnagrammes != u'': position = PageTemp.find(u'{{langue|fr}}')+len(u'{{langue|fr}}') PageTemp2 = PageTemp[position:len(PageTemp)] if PageTemp2.find(u'{{-voir-}}') != -1 and ((PageTemp2.find(u'{{langue|') != -1 and PageTemp2.find(u'{{-voir-}}') < PageTemp2.find(u'{{langue|')) or PageTemp2.find(u'{{langue|') == -1): PageTemp = PageTemp[0:position+PageTemp2.find(u'{{-voir-}}')] + u'{{-anagr-}}\n' + ListeAnagrammes + u'\n' + PageTemp[position+PageTemp2.find(u'{{-voir-}}'):len(PageTemp)] elif PageTemp2.find(u'{{-réf-}}') != -1 and ((PageTemp2.find(u'{{langue|') != -1 and PageTemp2.find(u'{{-réf-}}') < PageTemp2.find(u'{{langue|')) or PageTemp2.find(u'{{langue|') == -1): PageTemp = PageTemp[0:position+PageTemp2.find(u'{{-réf-}}')] + u'{{-anagr-}}\n' + ListeAnagrammes + u'\n' + PageTemp[position+PageTemp2.find(u'{{-réf-}}'):len(PageTemp)] elif PageTemp2.find(u'== {{langue|') != -1 and ((PageTemp2.find(u'[[Catégorie:') != -1 and PageTemp2.find(u'== {{langue|') < PageTemp2.find(u'[[Catégorie:')) or PageTemp2.find(u'[[Catégorie:') == -1): PageTemp = PageTemp[0:position+PageTemp2.find(u'== {{langue|')] + u'{{-anagr-}}\n' + ListeAnagrammes + u'\n' + PageTemp[position+PageTemp2.find(u'== {{langue|'):len(PageTemp)] elif PageTemp2.find(u'=={{langue|') != -1 and ((PageTemp2.find(u'[[Catégorie:') != -1 and PageTemp2.find(u'=={{langue|') < PageTemp2.find(u'[[Catégorie:')) or PageTemp2.find(u'[[Catégorie:') == -1): PageTemp = PageTemp[0:position+PageTemp2.find(u'=={{langue|')] + u'{{-anagr-}}\n' + ListeAnagrammes + u'\n' + PageTemp[position+PageTemp2.find(u'=={{langue|'):len(PageTemp)] elif PageTemp2.find(u'{{clé de tri') != -1: PageTemp = PageTemp[0:position+PageTemp2.find(u'{{clé de tri')] + u'{{-anagr-}}\n' + ListeAnagrammes + u'\n' + PageTemp[position+PageTemp2.find(u'{{clé de tri'):len(PageTemp)] elif PageTemp2.find(u'[[Catégorie:') != -1: PageTemp = PageTemp[0:position+PageTemp2.find(u'[[Catégorie:')] + u'{{-anagr-}}\n' + ListeAnagrammes + u'\n' + PageTemp[position+PageTemp2.find(u'[[Catégorie:'):len(PageTemp)] else: # Avant interwikis if PageTemp.find(u'[[en:') or PageTemp.find(u'[[ko:') or PageTemp.find(u'[[vi:') != -1: regex = ur'\[\[(.+?)(?:\]\]\n)' # copié de pywikipedia mais pas infaillible, d'où le [[en:... if re.compile(regex).search(PageTemp): try: PageTemp = PageTemp[0:re.search(regex,PageTemp).end()] + u'\n{{-anagr-}}\n' + ListeAnagrammes + u'\n' + PageTemp[re.search(regex,PageTemp).end():len(PageTemp)] except: print u'pb regex interwiki' else: PageTemp = PageTemp + u'\n\n{{-anagr-}}\n' + ListeAnagrammes else: PageTemp = PageTemp + u'\n\n{{-anagr-}}\n' + ListeAnagrammes if PageTemp.find(u'<!-- pas d’{{-anagr-}} -->\n') != -1: PageTemp = PageTemp[0:PageTemp.find(u'<!-- pas d’{{-anagr-}} -->\n')] + PageTemp[PageTemp.find(u'<!-- pas d’{{-anagr-}} -->\n')+len(u'<!-- pas d’{{-anagr-}} -->\n'):len(PageTemp)]⏎ ⏎ # Remplacement des codes langues if debogage == True: print u'Remplacement des anciens codes langue' while PageTemp.find(u'=prv=') != -1: PageTemp = PageTemp[0:PageTemp.find(u'=prv=')] + u'langue|oc' + PageTemp[PageTemp.find(u'=prv=')+len(u'=prv='):len(PageTemp)] AncienModele = range(1, 13) NouveauModele = range(1, 13) AncienModele[1] = u'ko-hanja' NouveauModele[1] = u'ko-Hani' (contracted; show full) while PageTemp.find(u'{{WP|lang=sgs') != -1: PageTemp = PageTemp[0:PageTemp.find(u'{{WP|lang=sgs')] + u'{{WP|lang=bat-smg' + PageTemp[PageTemp.find(u'{{WP|lang=sgs')+len(u'{{WP|lang=sgs'):len(PageTemp)] # Ajouts des codes langues if debogage == True: print (u'Gestion des codes langues dans les modèles') EstCodeLangue = u'false' if debogage == True: print " EstCodeLangue = " + EstCodeLangue⏎ trad = u'false' codelangue = None position = 1 p = 1 while position > -1: # On sauvegarde la partie traitée d'une page provisoire dans une page finale jusqu'à disparition de la première #print(PageEnd.encode(config.console_encoding, 'replace')[0:1000]) #print(PageTemp.encode(config.console_encoding, 'replace')[0:1000]) if debogageLent == True: (contracted; show full) # Recherche de chaque modèle position = PageTemp.find(u'{{') if position < 0: break if position == PageTemp.find(u'{{caractère}}'): codelangue = u'conv' EstCodeLangue = u'false' if debogage == True: print " EstCodeLangue = " + EstCodeLangue⏎ elif position == PageTemp.find(u'{{='): PageTemp2 = PageTemp[position+3:len(PageTemp)] if PageTemp2.find("}}") < PageTemp2.find("|") or PageTemp2.find("|") == -1: if PageTemp.find("{{=") < PageTemp.find("=}}"): codelangue = PageTemp[PageTemp.find("{{=")+3:PageTemp.find("=}}")] # RegexCodeLangue = ur'[a-b]+\-*[a-b]*' if codelangue.find(u'=') != -1: PageEnd = u'{{formater|Code langue inexistant : ' + codelangue + u'}}\n' + PageBegin summary = u'Page à formater manuellement' sauvegarde(page, PageEnd, summary) return EstCodeLangue = u'true' if debogage == True: print " EstCodeLangue = " + EstCodeLangue⏎ if codelangue == u'fr': # Nettoyage de la ponctuation en français if PageTemp.find(u'{{langue|') != -1: while PageTemp.find(u' ,') != -1 and PageTemp.find(u' ,') < PageTemp.find(u'{{langue|'): PageTemp = PageTemp[0:PageTemp.find(u' ,')] + PageTemp[PageTemp.find(u' ,')+1:len(PageTemp)] while PageTemp.find(u' .') != -1 and PageTemp.find(u' ,') < PageTemp.find(u'{{langue|'): PageTemp = PageTemp[0:PageTemp.find(u' .')] + PageTemp[PageTemp.find(u' .')+1:len(PageTemp)] else: while PageTemp.find(u' ,') != -1: PageTemp = PageTemp[0:PageTemp.find(u' ,')] + PageTemp[PageTemp.find(u' ,')+1:len(PageTemp)] while PageTemp.find(u' .') != -1: PageTemp = PageTemp[0:PageTemp.find(u' .')] + PageTemp[PageTemp.find(u' .')+1:len(PageTemp)] else: print u'Problème de section dans ' + PageHS.encode(config.console_encoding, 'replace') return else: codelangue = PageTemp[PageTemp.find("{{=")+3:PageTemp.find("{{=")+3+PageTemp2.find("=|")] EstCodeLangue = u'true' if debogage == True: print " EstCodeLangue = " + EstCodeLangue⏎ PageTemp = PageTemp[0:position+2] + u'langue|' + codelangue + PageTemp[position+3+PageTemp2.find("}}"):len(PageTemp)] summary = summary + ', {{=' + codelangue + u'=}} -> {{langue|' + codelangue + u'}}' position = PageTemp.find("{{") elif position == PageTemp.find(u'{{langue|'): #print (PageEnd.encode(config.console_encoding, 'replace')[0:1000]) #raw_input (PageTemp[0:position].encode(config.console_encoding, 'replace')) if debogage == True: print u'Nouveau code langue'⏎ PageTemp2 = PageTemp[position+len(u'{{langue|'):] if PageTemp2.find("}}") < PageTemp2.find("|") or PageTemp2.find("|") == -1: if PageTemp.find(u'{{langue|') < PageTemp.find(u'}}'): if debogage == True: print u'Nouveau code langue simple' codelangue = PageTemp[PageTemp.find(u'{{langue|')+len(u'{{langue|'):PageTemp.find("}}")] EstCodeLangue = u'true' if debogage == True: print " EstCodeLangue = " + EstCodeLangue⏎ else: if debogage == True: print u'Nouveau code langue après fin de modèle(s) (imbriqués)' PageTemp2 = PageTemp[PageTemp.find(u'{{langue|')+len(u'{{langue|'):] codelangue = PageTemp2[:PageTemp2.find(u'}}')] EstCodeLangue = u'true' if debogage == True: print " EstCodeLangue = " + EstCodeLangue⏎ else: if debogage == True: print u'Nouveau code langue multi-paramètres' codelangue = PageTemp[PageTemp.find(u'{{langue|')+len(u'{{langue|'):PageTemp.find(u'{{langue|')+len(u'{{langue|')+PageTemp2.find("}}")] EstCodeLangue = u'true' if debogage == True: print " EstCodeLangue = " + EstCodeLangue⏎ position = PageTemp.find("{{") if debogage == True: print u'Nouveau code langue trouvé : ' + codelangue if codelangue.find(u'=') != -1: PageEnd = u'{{formater|Code langue inexistant : ' + codelangue + u'}}\n' + PageBegin summary = u'Page à formater manuellement' sauvegarde(page, PageEnd, summary) return ⏎ # Ajout des anagrammes pour cette nouvelle langue détectée if debogage == True: print u' Anagrammes pour ' + codelangue if debogageLent == True: print socket.gethostname() if socket.gethostname() != "willow" and socket.gethostname() != "yarrow" and socket.gethostname() != "nightshade" and PageTemp.find(u'-erreur-') == -1 and PageHS != u'six': if PageTemp.find(u'{{-anagr-}}') == -1 and PageHS.find(u' ') == -1 and len(PageHS) < TailleAnagramme: anagrammes = anagram(PageHS) ListeAnagrammes = u'' for anagramme in anagrammes: if anagramme != PageHS: if debogage == True: print anagramme.encode(config.console_encoding, 'replace') pageAnagr = Page(site,anagramme) if pageAnagr.exists(): if pageAnagr.namespace() !=0 and anagramme != u'Utilisateur:JackBot/test': return else: try: PageTempAnagr = pageAnagr.get() except wikipedia.NoPage: return except wikipedia.IsRedirectPage: return except wikipedia.LockedPage: return if PageTempAnagr.find(u'{{langue|' + codelangue + u'}}') != -1: ListeAnagrammes = ListeAnagrammes + u'* {{lien|' + anagramme + u'|' + codelangue + u'}}\n' if debogage == True: print u' trouvé' if ListeAnagrammes != u'': position = PageTemp.find(u'{{langue|' + codelangue + u'}}')+len(u'{{langue|' + codelangue + u'}}') PageTemp2 = PageTemp[position:len(PageTemp)] if PageTemp2.find(u'{{-voir-}}') != -1 and ((PageTemp2.find(u'{{langue|') != -1 and PageTemp2.find(u'{{-voir-}}') < PageTemp2.find(u'{{langue|')) or PageTemp2.find(u'{{langue|') == -1): PageTemp = PageTemp[0:position+PageTemp2.find(u'{{-voir-}}')] + u'{{-anagr-}}\n' + ListeAnagrammes + u'\n' + PageTemp[position+PageTemp2.find(u'{{-voir-}}'):len(PageTemp)] elif PageTemp2.find(u'{{-réf-}}') != -1 and ((PageTemp2.find(u'{{langue|') != -1 and PageTemp2.find(u'{{-réf-}}') < PageTemp2.find(u'{{langue|')) or PageTemp2.find(u'{{langue|') == -1): PageTemp = PageTemp[0:position+PageTemp2.find(u'{{-réf-}}')] + u'{{-anagr-}}\n' + ListeAnagrammes + u'\n' + PageTemp[position+PageTemp2.find(u'{{-réf-}}'):len(PageTemp)] elif PageTemp2.find(u'== {{langue|') != -1 and ((PageTemp2.find(u'[[Catégorie:') != -1 and PageTemp2.find(u'== {{langue|') < PageTemp2.find(u'[[Catégorie:')) or PageTemp2.find(u'[[Catégorie:') == -1): PageTemp = PageTemp[0:position+PageTemp2.find(u'== {{langue|')] + u'{{-anagr-}}\n' + ListeAnagrammes + u'\n' + PageTemp[position+PageTemp2.find(u'== {{langue|'):len(PageTemp)] elif PageTemp2.find(u'=={{langue|') != -1 and ((PageTemp2.find(u'[[Catégorie:') != -1 and PageTemp2.find(u'=={{langue|') < PageTemp2.find(u'[[Catégorie:')) or PageTemp2.find(u'[[Catégorie:') == -1): PageTemp = PageTemp[0:position+PageTemp2.find(u'=={{langue|')] + u'{{-anagr-}}\n' + ListeAnagrammes + u'\n' + PageTemp[position+PageTemp2.find(u'=={{langue|'):len(PageTemp)] elif PageTemp2.find(u'{{clé de tri') != -1: PageTemp = PageTemp[0:position+PageTemp2.find(u'{{clé de tri')] + u'{{-anagr-}}\n' + ListeAnagrammes + u'\n' + PageTemp[position+PageTemp2.find(u'{{clé de tri'):len(PageTemp)] elif PageTemp2.find(u'[[Catégorie:') != -1: PageTemp = PageTemp[0:position+PageTemp2.find(u'[[Catégorie:')] + u'{{-anagr-}}\n' + ListeAnagrammes + u'\n' + PageTemp[position+PageTemp2.find(u'[[Catégorie:'):len(PageTemp)] else: # Avant interwikis if PageTemp.find(u'[[en:') or PageTemp.find(u'[[ko:') or PageTemp.find(u'[[vi:') != -1: regex = ur'\[\[(.+?)(?:\]\]\n)' # copié de pywikipedia mais pas infaillible, d'où le [[en:... if re.compile(regex).search(PageTemp): try: PageTemp = PageTemp[0:re.search(regex,PageTemp).end()] + u'\n{{-anagr-}}\n' + ListeAnagrammes + u'\n' + PageTemp[re.search(regex,PageTemp).end():len(PageTemp)] except: print u'pb regex interwiki' else: PageTemp = PageTemp + u'\n\n{{-anagr-}}\n' + ListeAnagrammes else: PageTemp = PageTemp + u'\n\n{{-anagr-}}\n' + ListeAnagrammes if PageTemp.find(u'<!-- pas d’{{-anagr-}} -->\n') != -1: PageTemp = PageTemp[0:PageTemp.find(u'<!-- pas d’{{-anagr-}} -->\n')] + PageTemp[PageTemp.find(u'<!-- pas d’{{-anagr-}} -->\n')+len(u'<!-- pas d’{{-anagr-}} -->\n'):len(PageTemp)]⏎ ⏎ elif position == PageTemp.find(u'{{langue}}'): # Recherche d'un codelangue à préciser PageTemp2 = PageTemp[PageTemp.find(u'}}')+2:len(PageTemp)] PageTemp2 = PageTemp[PageTemp.find(u'{{')+2:len(PageTemp)] PageTemp2 = PageTemp[0:PageTemp.find(u'}}')] if PageTemp2.find("|") != -1: codelangue = PageTemp2[PageTemp2.find("|")+1:len(PageTemp2)] EstCodeLangue = u'true' if debogage == True: print " EstCodeLangue = " + EstCodeLangue⏎ PageTemp = PageTemp[0:PageTemp.find(u'{{langue}}')] + u'{{langue|' + codelangue + u'}}' + PageTemp[PageTemp.find(u'{{langue}}')+len(u'{{langue}}'):len(PageTemp)] position = PageTemp.find("{{") position = position + 2 PageEnd = PageEnd + PageTemp[0:position] # Transfert vers la page finale de l'article jusqu'au modèle en traitement exclu PageTemp = PageTemp[position:len(PageTemp)] # Fin du nom du modèle (contracted; show full) return PageEnd = PageEnd + PageTemp[0:PageTemp.find(u'}}')+2] PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] #break # pb https://fr.wiktionary.org/w/index.php?title=ordre&curid=343&diff=14727763&oldid=14725107''' # Si on est dans un modèle spécial, le traiter, sinon par catégorie de génériques if not codelangue and (p < limit1 or p >= limit3) and Modele[p] != u'ébauche': # pb -nom-|fro}} # '''hazard''' {{pron||fro}} {{m}} # # {{variante de|hazart|fro}}.⏎ PageEnd = u'{{formater|Code langue manquant dans ' + Modele[p] + u' après le caractère ' + str(len(PageEnd)) + u'}}\n' + PageBegin summary = u'Page à formater manuellement' sauvegarde(page, PageEnd, summary) return ⏎ if Modele[p] == u'-nom-' and (codelangue == 'fr' or codelangue == 'es' or codelangue == 'pt' or codelangue == 'it' or codelangue == 'de'): if debogage == True: print u'Recherche du genre manquant' if PageTemp.find(u'\n\'\'\'' + PageHS + u'\'\'\'') != -1 and PageTemp.find(u'\n\'\'\'' + PageHS + u'\'\'\'') < 100: PageTemp2 = PageTemp[PageTemp.find(u'\n\'\'\'' + PageHS + u'\'\'\'')+len(u'\n\'\'\'' + PageHS + u'\'\'\''):] if (PageTemp2.find(u'{{genre') > PageTemp2.find(u'\n') or PageTemp2.find(u'{{genre') == -1) and (PageTemp2.find(u'{{m') > PageTemp2.find(u'\n') or PageTemp2.find(u'{{m') == -1) and (PageTemp2.find(u'{{f') > PageTemp2.find(u'\n') or PageTemp2.find(u'{{f') == -1) and (PageTemp2.find(u'{{n') > PageTemp2.find(u'\n') or PageTemp2.find(u'{{n') == -1): PageTemp = PageTemp[:PageTemp.find(u'\n\'\'\'' + PageHS + u'\'\'\'')+len(u'\n\'\'\'' + PageHS + u'\'\'\'')+PageTemp2.find(u'\n')] + u' {{genre|' + codelangue + u'}}' + PageTemp[PageTemp.find(u'\n\'\'\'' + PageHS + u'\'\'\'')+len(u'\n\'\'\'' + PageHS + u'\'\'\'')+PageTemp2.find(u'\n'):]⏎ if Modele[p] == u'term' or Modele[p] == u'terme' or Modele[p] == u'term_lien' or Modele[p] == u'régio' or Modele[p] == u'région': ModeleT = PageTemp[PageTemp.find("|")+1:PageTemp.find("}}")] for p2 in range(1,limit6): if Modele[p2] == ModeleT or Modele[p2] == ModeleT[0:1].lower() + ModeleT[1:len(ModeleT)]: if EstCodeLangue == "false": (contracted; show full) ) 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:Créatures' ) != -1 and (PageTemp.find(u':Catégorie:Créatures') < PageTemp.find(u'{{langue|') and PageTemp.find(u'{{langue|') != -1 or PageTemp.find(u'{{langue|') == -1 ) and (PageTemp.find(u':Catégorie:Créatures') + 1 != PageTemp.rfind(u'Catégorie:Créatures'))⏎ ⏎ ) 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(param):PageTemp.find(u'}}')+2] (contracted; show full) # 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:Édifices religieux' ) != -1 and (PageTemp.find(u':Catégorie:Édifices religieux') < PageTemp.find(u'{{langue|') and PageTemp.find(u'{{langue|') != -1 or PageTemp.find(u'{{langue|') == -1 ) and (PageTemp.find(u':Catégorie:Édifices religieux') + 1 != PageTemp.rfind(u'Catégorie:Édifices religieux'))⏎ ⏎ ) 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(param):PageTemp.find(u'}}')+2] (contracted; show full) ) and (PageTemp.find(u':Catégorie:Jeux') + 1 != PageTemp.rfind(u'Catégorie:Jeux'))): PageEnd = PageEnd + PageTemp[0:position] + "|nocat=1}}" else: PageEnd = PageEnd + PageTemp[0:position] + "|" + codelangue + "}}" PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] break elif Modele[p] == u'architecture' or Modele[p] == u'archi' or Modele[p] == u'fortification': if (EstCodeLangue == "false" ) or (PageTemp.find(u'Catégorie:Édifices' ) != -1 and (PageTemp.find(u':Catégorie:Édifices') < PageTemp.find(u'{{langue|') and PageTemp.find(u'{{langue|') != -1 or PageTemp.find(u'{{langue|') == -1 ) and (PageTemp.find(u':Catégorie:Édifices') + 1 != PageTemp.rfind(u'Catégorie:Édifices'))): PageEnd = PageEnd + PageTemp[0:position] + "|nocat=1}}" else: PageEnd = PageEnd + PageTemp[0:position] + "|" + codelangue + "}}" PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] break⏎ ⏎ elif Modele[p] == u'réseaux' or Modele[p] == u'réseaux informatiques': if (EstCodeLangue == "false" ) or (PageTemp.find(u'Catégorie:Protocoles réseau' ) != -1 and (PageTemp.find(u':Catégorie:Protocoles réseau') < PageTemp.find(u'{{langue|') and PageTemp.find(u'{{langue|') != -1 or PageTemp.find(u'{{langue|') == -1 (contracted; show full) ) and (PageTemp.find(u':Catégorie:Océans') + 1 != PageTemp.rfind(u'Catégorie:Océans')) ) or (PageTemp.find(u'Catégorie:Rivières' ) != -1 and (PageTemp.find(u':Catégorie:Rivières') < PageTemp.find(u'{{langue|') and PageTemp.find(u'{{langue|') != -1 or PageTemp.find(u'{{langue|') == -1 ) and (PageTemp.find(u':Catégorie:Rivières') + 1 != PageTemp.rfind(u'Catégorie:Rivières')) ) or (PageTemp.find(u'Catégorie:Cours d’eau' ) != -1 and (PageTemp.find(u':Catégorie:Cours d’eau') < PageTemp.find(u'{{langue|') and PageTemp.find(u'{{langue|') != -1 or PageTemp.find(u'{{langue|') == -1 ) and (PageTemp.find(u':Catégorie:Cours d’eau') + 1 != PageTemp.rfind(u'Catégorie:Cours d’eau'))⏎ ⏎ ) or (PageTemp.find(u'Catégorie:Îles' ) != -1 and (PageTemp.find(u':Catégorie:Îles') < PageTemp.find(u'{{langue|') and PageTemp.find(u'{{langue|') != -1 or PageTemp.find(u'{{langue|') == -1 ) and (PageTemp.find(u':Catégorie:Îles') + 1 != PageTemp.rfind(u'Catégorie:Îles')) ) or (PageTemp.find(u'Catégorie:Localités' (contracted; show full) if (EstCodeLangue == "false" ) or (PageTemp.find(u'Catégorie:Éléments chimique' ) != -1 and (PageTemp.find(u'Catégorie:Éléments chimique') < PageTemp.find(u'{{langue|') and PageTemp.find(u'{{langue|') != -1 or PageTemp.find(u'{{langue|') == -1 ) and (PageTemp.find(u':Catégorie:Éléments chimique') + 1 != PageTemp.rfind(u'Catégorie:Éléments chimique')) ) or (PageTemp.find(u'Catégorie:Symboles des éléments chimiques' ) != -1 and (PageTemp.find(u'Catégorie:Symboles des éléments chimiques') < PageTemp.find(u'{{langue|') and PageTemp.find(u'{{langue|') != -1 or PageTemp.find(u'{{langue|') == -1 ) and (PageTemp.find(u':Catégorie:Symboles des éléments chimiques') + 1 != PageTemp.rfind(u'Catégorie:Symboles des éléments chimiques'))⏎ ⏎ ) or (PageTemp.find(u'Catégorie:Métaux' ) != -1 and (PageTemp.find(u'Catégorie:Métaux') < PageTemp.find(u'{{langue|') and PageTemp.find(u'{{langue|') != -1 or PageTemp.find(u'{{langue|') == -1 ) and (PageTemp.find(u':Catégorie:Métaux') + 1 != PageTemp.rfind(u'Catégorie:Métaux')) ) or (PageTemp.find(u'Catégorie:Alliages' (contracted; show full) PageEnd = PageEnd + PageTemp[0:position] + "|nocat=1}}" else: PageEnd = PageEnd + PageTemp[0:position] + "|" + codelangue + "}}" PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] break elif Modele[p] == u'-trad-': EstCodeLangue = u'false' if debogage == True: print " EstCodeLangue = " + EstCodeLangue⏎ trad = u'true' PageEnd = PageEnd + Modele[p] + u'}}' PageTemp = PageTemp[PageTemp.find(u'}}')+2:len(PageTemp)] # Ajout de {{trad-début}} si {{T| en français if PageTemp.find(u'{{') == PageTemp.find(u'{{T|') and codelangue == 'fr': PageTemp = u'\n{{trad-début}}' + PageTemp PageTemp2 = PageTemp[PageTemp.find(u'{{trad-début}}\n')+len(u'{{trad-début}}\n'):] (contracted; show full) PageEnd = PageEnd + u'trad-fin' else: PageEnd = PageEnd + u')' PageTemp = PageTemp[position:len(PageTemp)] break if p < limit1: # Si on est dans le paragraphe définition EstCodeLangue = "true" if debogage == True: print " EstCodeLangue = " + EstCodeLangue⏎ # Tous ces modèles peuvent facultativement contenir |clé= et |num=, les prénoms et -flex-prénom- |genre= if position == PageTemp.find(u'}'): PageTemp = PageTemp[0:position] + u'|' + codelangue + PageTemp[position:len(PageTemp)] PageTemp2 = PageTemp[position+1:len(PageTemp)] position2 = 0 while PageTemp2.find(u'|') != -1 and PageTemp2.find(u'|') < PageTemp2.find(u'}}'): (contracted; show full) PageTemp = PageTemp[0:PageTemp.find(u'}}')] + u'|clé=' + TitreTemp + PageTemp[PageTemp.find(u'}}'):len(PageTemp)] PageEnd = PageEnd + PageTemp[0:PageTemp.find(u'}}')+2] elif p < limit2: # Paragraphe sans code langue if debogage == True: print "limit2" EstCodeLangue = "false" if debogage == True: print " EstCodeLangue = " + EstCodeLangue⏎ trad = u'false' PageEnd = PageEnd + PageTemp[0:position] + "}}" elif p < limit25: # Paragraphe sans code langue contenant un texte if debogage == True: print "limit25" EstCodeLangue = "false" if debogage == True: print " EstCodeLangue = " + EstCodeLangue⏎ #trad = u'false' if PageTemp.find(u'}}') > PageTemp.find(u'{{') and PageTemp.find(u'{{') != -1: PageTemp2 = PageTemp[PageTemp.find(u'}}')+2:len(PageTemp)] PageEnd = PageEnd + PageTemp[0:PageTemp.find(u'}}')+2+PageTemp2.find(u'}}')+2] PageTemp = PageTemp[PageTemp.find(u'}}')+2+PageTemp2.find(u'}}')+2:len(PageTemp)] break else: (contracted; show full) print "BadTitle en sauvegarde" return except AttributeError: print "AttributeError en sauvegarde" return # Lancement #TraitementCategorie = crawlerCat(u'Catégorie:Noms communs en italien',False,u'affondamento') #TraitementCategorie = crawlerCat(u'Catégorie:Noms communs en portugais',False,u'aglomeração') #TraitementCategorie = crawlerCat(u'Catégorie:Noms communs en allemand',False,u'Auswahl') #TraitementCategorie = crawlerCat(u'Catégorie:Noms communs en français',False,u'')⏎ ⏎ # Quotidiennement : TraitementCategorie = crawlerCat(u'Catégorie:Wiktionnaire:Codes langue manquants',True,u'') TraitementCategorie = crawlerCat(u'Catégorie:Wiktionnaire:Flexions à vérifier',True,u'') TraitementCategorie = crawlerCat(u'Catégorie:Appels de modèles incorrects:fr-verbe-flexion incomplet',False,u'') TraitementLiens = crawlerLink(u'Modèle:trad',u'') (contracted; show full) 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',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=15195624.
![]() ![]() 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.
|