Difference between revisions 14747086 and 14772918 on frwiktionary

[[Catégorie:JackBot]]
<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.
(contracted; show full)
			
		# Nettoyage
		if PageTemp.find(u'{{voir}}\n') != -1: PageTemp = PageTemp[0:PageTemp.find(u'{{voir}}\n')] + PageTemp[PageTemp.find(u'{{voir}}\n')+len(u'{{voir}}\n'):len(PageTemp)]
		if PageTemp.find(u'{{voir}}') != -1: PageTemp = PageTemp[0:PageTemp.find(u'{{voir}}')] + PageTemp[PageTemp.find(u'{{voir}}')+len(u'{{voir}}'):len(PageTemp)]
		
		# Encodage d'un fichier ASCII
		
while PageHS.find(u'&#32;') != -1:
			PageHS = PageHS[0:PageHS.find(u'&#32;')] + u'&nbsp;' + PageHS[PageHS.find(u'&#32;')+len(u'&#32;'):len(PageHS)]
		while PageHS.find(u'&#224;') != -1:
			PageHS = PageHS[0:PageHS.find(u'&#224;')] + u'à' + PageHS[PageHS.find(u'&#224;')+len(u'&#224;'):len(PageHS)]
		while PageHS.find(u'&#226;') != -1:
			PageHS = PageHS[0:PageHS.find(u'&#226;')] + u'â' + PageHS[PageHS.find(u'&#226;')+len(u'&#226;'):len(PageHS)]
		while PageHS.find(u'&#228;') != -1:
			PageHS = PageHS[0:PageHS.find(u'&#228;')] + u'ä' + PageHS[PageHS.find(u'&#228;')+len(u'&#228;'):len(PageHS)]
		while PageHS.find(u'&#233;') != -1:
			PageHS = PageHS[0:PageHS.find(u'&#233;')] + u'é' + PageHS[PageHS.find(u'&#233;')+len(u'&#233;'):len(PageHS)]
		while PageHS.find(u'&#232;') != -1:
			PageHS = PageHS[0:PageHS.find(u'&#232;')] + u'è' + PageHS[PageHS.find(u'&#232;')+len(u'&#232;'):len(PageHS)]
		while PageHS.find(u'&#234;') != -1:
			PageHS = PageHS[0:PageHS.find(u'&#234;')] + u'ê' + PageHS[PageHS.find(u'&#234;')+len(u'&#234;'):len(PageHS)]
		while PageHS.find(u'&#235;') != -1:
			PageHS = PageHS[0:PageHS.find(u'&#235;')] + u'ë' + PageHS[PageHS.find(u'&#235;')+len(u'&#235;'):len(PageHS)]
		while PageHS.find(u'&#238;') != -1:
			PageHS = PageHS[0:PageHS.find(u'&#238;')] + u'î' + PageHS[PageHS.find(u'&#238;')+len(u'&#238;'):len(PageHS)]
		while PageHS.find(u'&#239;') != -1:
			PageHS = PageHS[0:PageHS.find(u'&#239;')] + u'ï' + PageHS[PageHS.find(u'&#239;')+len(u'&#239;'):len(PageHS)]
		while PageHS.find(u'&#244;') != -1:
			PageHS = PageHS[0:PageHS.find(u'&#244;')] + u'ô' + PageHS[PageHS.find(u'&#244;')+len(u'&#244;'):len(PageHS)]
		while PageHS.find(u'&#246;') != -1:
			PageHS = PageHS[0:PageHS.find(u'&#246;')] + u'ö' + PageHS[PageHS.find(u'&#246;')+len(u'&#246;'):len(PageHS)]
		while PageHS.find(u'&#249;') != -1:
			PageHS = PageHS[0:PageHS.find(u'&#249;')] + u'ù' + PageHS[PageHS.find(u'&#249;')+len(u'&#249;'):len(PageHS)]
		while PageHS.find(u'&#251;') != -1:
			PageHS = PageHS[0:PageHS.find(u'&#251;')] + u'û' + PageHS[PageHS.find(u'&#251;')+len(u'&#251;'):len(PageHS)]
		while PageHS.find(u'&#252') != -1:
			PageHS = PageHS[0:PageHS.find(u'&#252;')] + u'ü' + PageHS[PageHS.find(u'&#252;')+len(u'&#252;'):len(PageHS)]
		while PageHS.find(u'&#231;') != -1:
			PageHS = PageHS[0:PageHS.find(u'&#231;')] + u'ç' + PageHS[PageHS.find(u'&#231;')+len(u'&#231;'):len(PageHS)]
		while PageHS.find(u'&#700;') != -1:
			PageHS = PageHS[0:PageHS.find(u'&#700;')] + u'ʼ' + PageHS[PageHS.find(u'&#700;')+len(u'&#700;'):len(PageHS)]
		while PageHS.find(u'&#241;') != -1:
			PageHS = PageHS[0:PageHS.find(u'&#241;')] + u'ñ' + PageHS[PageHS.find(u'&#241;')+len(u'&#241;'):len(PageHS)]
		while PageHS.find(u'&#243;') != -1:
			PageHS = PageHS[0:PageHS.find(u'&#243;')] + u'ó' + PageHS[PageHS.find(u'&#243;')+len(u'&#243;'):len(PageHS)]	
		while PageHS.find(u'&#237;') != -1:
			PageHS = PageHS[0:PageHS.find(u'&#237;')] + u'í' + PageHS[PageHS.find(u'&#237;')+len(u'&#237;'):len(PageHS)]		
		while PageHS.find(u'&#225;') != -1:
			PageHS = PageHS[0:PageHS.find(u'&#225;')] + u'á' + PageHS[PageHS.find(u'&#225;')+len(u'&#225;'):len(PageHS)]
		while PageHS.find(u'&#250;') != -1:
			PageHS = PageHS[0:PageHS.find(u'&#250;')] + u'ú' + PageHS[PageHS.find(u'&#250;')+len(u'&#250;'):len(PageHS)]	
	PageHS = PageHS.replace(u'&#32;', u'&nbsp;')
		PageHS = PageHS.replace(u'&#224;', u'à')
		PageHS = PageHS.replace(u'&#226;', u'â')
		PageHS = PageHS.replace(u'&#228;', u'ä')
		PageHS = PageHS.replace(u'&#233;', u'é')
		PageHS = PageHS.replace(u'&#232;', u'è')
		PageHS = PageHS.replace(u'&#234;', u'ê')
		PageHS = PageHS.replace(u'&#235;', u'ë')
		PageHS = PageHS.replace(u'&#235;', u'ë')
		PageHS = PageHS.replace(u'&#817;', u'e̱')
		PageHS = PageHS.replace(u'&#238;', u'î')
		PageHS = PageHS.replace(u'&#239;', u'ï')
		PageHS = PageHS.replace(u'&#244;', u'ô')
		PageHS = PageHS.replace(u'&#246;', u'ö')
		PageHS = PageHS.replace(u'&#249;', u'ù')
		PageHS = PageHS.replace(u'&#251;', u'û')
		PageHS = PageHS.replace(u'&#252;', u'ü')
		PageHS = PageHS.replace(u'&#231;', u'ç')
		PageHS = PageHS.replace(u'&#700;', u'\'')
		PageHS = PageHS.replace(u'&#241;', u'ñ')
		PageHS = PageHS.replace(u'&#243;', u'ó')
		PageHS = PageHS.replace(u'&#237;', u'í')
		PageHS = PageHS.replace(u'&#225;', u'á')
		PageHS = PageHS.replace(u'&#250;', u'ú')
		PageHS = PageHS.replace(u'&#35;', u'#')
		
		# Simplification des pages
		PageTemp = PageTemp.replace(u'}}&#32;[[', u'}} [[')
		PageTemp = PageTemp.replace(u'&#32;', u'&nbsp;')
		PageTemp = PageTemp.replace(u'&#224;', u'à')
		PageTemp = PageTemp.replace(u'&#226;', u'â')
		PageTemp = PageTemp.replace(u'&#228;', u'ä')
		PageTemp = PageTemp.replace(u'&#233;', u'é')
		PageTemp = PageTemp.replace(u'&#232;', u'è')
		PageTemp = PageTemp.replace(u'&#234;', u'ê')
		PageTemp = PageTemp.replace(u'&#235;', u'ë')
		PageTemp = PageTemp.replace(u'&#235;', u'ë')
		PageTemp = PageTemp.replace(u'&#817;', u'e̱')
		PageTemp = PageTemp.replace(u'&#238;', u'î')
		PageTemp = PageTemp.replace(u'&#239;', u'ï')
		PageTemp = PageTemp.replace(u'&#244;', u'ô')
		PageTemp = PageTemp.replace(u'&#246;', u'ö')
		PageTemp = PageTemp.replace(u'&#249;', u'ù')
		PageTemp = PageTemp.replace(u'&#251;', u'û')
		PageTemp = PageTemp.replace(u'&#252;', u'ü')
		PageTemp = PageTemp.replace(u'&#231;', u'ç')
		PageTemp = PageTemp.replace(u'&#700;', u'\'')
		PageTemp = PageTemp.replace(u'&#241;', u'ñ')
		PageTemp = PageTemp.replace(u'&#243;', u'ó')
		PageTemp = PageTemp.replace(u'&#237;', u'í')
		PageTemp = PageTemp.replace(u'&#225;', u'á')
		PageTemp = PageTemp.replace(u'&#250;', u'ú')
		PageTemp = PageTemp.replace(u'&#35;', u'#')
		
		if PageTemp.find(u'Catégorie:Périodes géologiques en français') != -1 and PageTemp.find(u'{{Temps géologiques') == -1:
			PageTemp = PageTemp.replace(u'{{-nom-pr-|fr}}',u'{{-nom-|fr}}')
			# Ajout de la période géologique
			''''pageTemps = Page(site,u'Modèle:Temps géologiques')
			if page.exists():
				try:
					PageTemps = pageTemps.get()
(contracted; show full)
		baratin = u'{{clé de tri|}}<!-- supprimer si le mot ne contient pas de caractères accentués ni de caractères typographiques (par ex. trait d’union ou apostrophe) ; sinon suivez les instructions à [[Modèle:clé de tri]] -->'
		PageTemp = PageTemp.replace(u'{{DEFAULTSORT:', u'{{clé de tri|')
		PageTemp = PageTemp.replace(u'{{CLEDETRI:', u'{{clé de tri|')
		PageTemp = PageTemp.replace(u'{{clef de tri|', u'{{clé de tri|')

		
		# à faire : en travaux
		if PageTemp.find(u'{{clé de tri') == -1:
			ClePage = CleDeTri(PageHS)
			if ClePage != u'' and ClePage != PageHS and ClePage.lower() != PageHS.lower():
				if debogage == True: print u' ajout'
				if PageTemp.rfind(u'\n\n[[') != -1:
					PageTemp2 = PageTemp[PageTemp.rfind(u'\n\n[['):len(PageTemp)]
					if PageTemp2[4:5] == u':' or PageTemp2[5:6] == u':':
(contracted; show full)
		if PageTemp.find(u'{{clé de tri|' + PageHS.lower() + u'}}') != -1 and PageTemp.find(u'{{-verb-pr-|fr}}') == -1:
			PageTemp = PageTemp[0:PageTemp.find(u'{{clé de tri|' + PageHS.lower() + u'}}')] + PageTemp[PageTemp.find(u'{{clé de tri|' + PageHS.lower() + u'}}')+len(u'{{clé de tri|' + PageHS.lower() + u'}}'):len(PageTemp)]
			summary = summary + u', {{clé de tri}} inutile'
		

		
		
		if debogage == True: print u'Remplacements des balises'
		PageTemp = re.sub(ur'\[\[Category:', ur'[[Catégorie:', PageTemp)
		while PageTemp.find(u'</br>') != -1:
			PageTemp = PageTemp[0:PageTemp.find(u'</br>')] + u'<br/>' + PageTemp[PageTemp.find(u'</br>')+len(u'</br>'):len(PageTemp)]
		while PageTemp.find(u'<sup/>') != -1:
(contracted; show full)			langue1 = PageTemp[PageTemp.find(u'{{T|')+4:PageTemp.find(u'}')]
			if langue1.find(u'|') != -1: langue1 = langue1[0:langue1.find(u'|')]
			if langue1 != u'':
				Langue1 = Page(site,u'Modèle:' + langue1)
				try: PageTemp2 = Langue1.get()
				except wikipedia.NoPage:
					print "NoPage l 1521 : " + langue1
					
returnbreak
				except wikipedia.IsRedirectPage:
					PageTemp2 = Langue1.getRedirectTarget().title() + u'<noinclude>'
				except wikipedia.ServerError:
					print "ServerError l 1527 : " + langue1
					returnbreak
				except wikipedia.BadTitle:
					print "BadTitle l 1530 : " + langue1
					returnbreak
				if PageTemp2.find(u'<noinclude>') != -1:
					langue = CleDeTri(PageTemp2[0:PageTemp2.find(u'<noinclude>')])
					langue2 = u'zzz'
					TradCourante = PageEnd[PageEnd.rfind(u'\n'):len(PageEnd)] + PageTemp[0:PageTemp.find(u'\n')]
					TradSuivantes = u''
					PageEnd = PageEnd[0:PageEnd.rfind(u'\n')]
					PageTemp = PageTemp[PageTemp.find(u'\n'):len(PageTemp)]
(contracted; show full)			
			# Comparaison avec chaque modèle connu dans Modele[p], pour identifier le traitement à effectuer
			for p in range(1,limit6):
				if Modele[p] == PageTemp[0:position]:
					if debogage == True: print (Modele[p].encode(config.console_encoding, 'replace'))
					
					# Modèles imbriqués (à sauter)
					
'''while PageTemp.find(u'{{') < PageTemp.find(u'}}') and PageTemp.find(u'{{') != -1 and PageTemp.find(u'}}') != -1:
						if debogage == True:
							print u'Modèle inclu dans '
							print PageTemp[:PageTemp.find(u'}}')].encode(config.console_encoding, 'replace')
						PageEnd = PageEnd + PageTemp[0:PageTemp.find(u'}}')+2]
						PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)]
						#raw_input(PageTemp.encode(config.console_encoding, 'replace'))
						# Fin du nom du modèle
						if PageTemp.find("|") > PageTemp.find("}}") or PageTemp.find("|") == -1:
							position = PageTemp.find("}}")
						else:
							position = PageTemp.find("|")
						if position == -1:
							if debogage == True: print u'Erreur ligne 2271 : modèle brisé'
							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
(contracted; show full)						EstCodeLangue = u'false'
						trad = u'true'
						PageEnd = PageEnd + Modele[p] + u'}}'
						PageTemp = PageTemp[PageTemp.find(u'}}')+2:len(PageTemp)]
						# Ajout de {{trad-début}}
						if PageTemp.find(u'{{') == PageTemp.find(u'{{T|'):
							PageTemp = u'\n{{trad-début}}' + PageTemp
							PageTemp2 =
   PageTemp[PageTemp.find(u'{{trad-début}}\n')+len(u'{{trad-début}}\n'):]
							if PageTemp2.find(u'\n') == -1:
								PageTemp = PageTemp + u'\n'
								PageTemp2 = PageTemp2 + u'\n'
							while PageTemp2.find(u'{{T|') < PageTemp2.find(u'\n') and PageTemp2.find(u'{{T|') != -1:
								PageTemp2 = PageTemp2[PageTemp2.find(u'\n')+1:]
							PageTemp = PageTemp[:len(PageTemp)-len(PageTemp2)] + u'{{trad-fin}}\n' + PageTemp[len(PageTemp)-len(PageTemp2):]
						break
					elif Modele[p] == u'trad' or Modele[p] == u'trad+' or Modele[p] == u'trad-' or Modele[p] == u'trad--':
						# Lettres spéciales à remplacer dans les traductions vers certaines langues
						if debogageLent == True: print u'Test des traductions'
						PageTemp2 = PageTemp[position+1:len(PageTemp)]
						if PageTemp2[0:PageTemp2.find(u'|')] == u'ro' or PageTemp2[0:PageTemp2.find(u'|')] == u'mo':
							while PageTemp.find(u'ş') != -1 and PageTemp.find(u'ş') < PageTemp.find(u'\n'):
								PageTemp = PageTemp[0:PageTemp.find(u'ş')] + u'ș' + PageTemp[PageTemp.find(u'ş')+1:len(PageTemp)]
(contracted; show full)
							Infinitif = PageTemp[PageTemp.find(u'[[')+2:PageTemp.find(u']]')]
						if Infinitif.find(u'|') != -1: Infinitif = Infinitif[Infinitif.find(u'|')+1:len(Infinitif)]
						try:
							page2 = Page(site,Infinitif)
							Page2 = page2.get()
						except wikipedia.NoPage:
							print "NoPage flex-verb : " + Infinitif.encode(config.console_encoding, 'replace')
							
returnbreak
						except wikipedia.SectionError:
							print "SectionError flex-verb : " + Infinitif.encode(config.console_encoding, 'replace')
							returnbreak
						except wikipedia.IsRedirectPage:
							print "Redirect page flex-verb : " + Infinitif.encode(config.console_encoding, 'replace')
							returnbreak
						# http://fr.wiktionary.org/w/index.php?title=Catégorie:Appels de modèles incorrects:fr-verbe-flexion incomplet
						PageTemp2 = PageTemp[PageTemp.find(u'fr-verbe-flexion')+len(u'fr-verbe-flexion'):len(PageTemp)]
						if PageTemp2.find(u'flexion=') != -1 and PageTemp2.find(u'flexion=') < PageTemp2.find(u'}}'):
							PageTemp3 = PageTemp2[PageTemp2.find(u'flexion='):len(PageTemp2)]
(contracted; show full)
								elif (PageEnd[i1:].find(u'{{pron') == -1 or PageEnd[i1:].find(u'{{pron') > PageEnd[i1:].find(u'\n')) and (PageEnd[i1:].find(u'{{conj') == -1 or PageEnd[i1:].find(u'{{conj') > PageEnd[i1:].find(u'\n')):
									PageEnd = PageEnd[:i1] + u' {{pron||' + langue + u'}} {{conj|grp=1|' + langue + u'}}' + PageEnd[i1:]
							except:
								print
 PageHS.encode(config.console_encoding, 'replace') + u' ' + langue.encode(config.console_encoding, 'replace') + u' sans {{pron}}'
						elif PageHS[len(PageHS)-len(premier):len(PageHS)] == deuxieme or PageHS[len(PageHS)-len(ppron):len(PageHS)] == dpron:
							try:
								i1 = re.search(u'{{\-verb[e]*\-[pr\-]*\|[ ]*' + langue + u'.*}}\n[^\[]*\'\'\'',PageEnd).end()
(contracted; show full)	if PageEnd != PageBegin:
		sauvegarde(page,PageEnd, summary)
	elif debogage == True:
		print "Aucun changement"
		

def CleDeTri(PageTitre):

	#PageTitre = PageTitre.encode(config.console_encoding, 'replace')
	#print PageTitre
	PageT = u''
	key = "false"
	for lettre in range(0,len(PageTitre)):
		# Latin
		if PageTitre[lettre:lettre+1] == u'à' or PageTitre[lettre:lettre+1] == u'Á' or PageTitre[lettre:lettre+1] == u'á' or PageTitre[lettre:lettre+1] == u'â' or PageTitre[lettre:lettre+1] == u'ä' or PageTitre[lettre:lettre+1] == u'ā' or PageTitre[lettre:lettre+1] == u'ă' or PageTitre[lettre:lettre+1] == u'ą' or PageTitre[lettre:lettre+1(contracted; show full)tre:lettre+1] == u'İ' or PageTitre[lettre:lettre+1] == u'Ɨ' or PageTitre[lettre:lettre+1] == u'Ǐ' or PageTitre[lettre:lettre+1] == u'Ȉ' or PageTitre[lettre:lettre+1] == u'Ȋ' or PageTitre[lettre:lettre+1] == u'ij' or PageTitre[lettre:lettre+1] == u'IJ' or PageTitre[lettre:lettre+1] == u'ì' or PageTitre[lettre:lettre+1] == u'Ì' or PageTitre[lettre:lettre+1] == u'ï' or PageTitre[lettre:lettre+1] == u'Ï'
 or PageTitre[lettre:lettre+1] == u'Lj' or PageTitre[lettre:lettre+1] == u'ị' or PageTitre[lettre:lettre+1] == u'Ị' or PageTitre[lettre:lettre+1] == u'í' or PageTitre[lettre:lettre+1] == u'Í':
			PageT = PageT + "i"
			key = "yes"
		elif PageTitre[lettre:lettre+1] == u'ĵ':
			PageT = PageT + "jx"
			key = "yes"
		elif PageTitre[lettre:lettre+1] == u'ǰ' or PageTitre[lettre:lettre+1] == u'ȷ' or PageTitre[lettre:lettre+1] == u'ɉ' or PageTitre[lettre:lettre+1] == u'Ĵ' or PageTitre[lettre:lettre+1] == u'Ɉ':
			PageT = PageT + "j"
(contracted; show full)tre:lettre+1] == u'ȴ' or PageTitre[lettre:lettre+1] == u'ɫ' or PageTitre[lettre:lettre+1] == u'Ɫ' or PageTitre[lettre:lettre+1] == u'Ĺ' or PageTitre[lettre:lettre+1] == u'Ļ' or PageTitre[lettre:lettre+1] == u'Ľ' or PageTitre[lettre:lettre+1] == u'Ŀ' or PageTitre[lettre:lettre+1] == u'Ł' or PageTitre[lettre:lettre+1] == u'Ƚ' or PageTitre[lettre:lettre+1] == u'lj' or PageTitre[lettre:lettre+1] == u'LJ'
 or PageTitre[lettre:lettre+1] == u'Lj' or PageTitre[lettre:lettre+1] == u'ị' or PageTitre[lettre:lettre+1] == u'Ị' or PageTitre[lettre:lettre+1] == u'í' or PageTitre[lettre:lettre+1] == u'Í':
			PageT = PageT + "l"
			key = "yes"
		elif PageTitre[lettre:lettre+1] == u'Ɯ':
			PageT = PageT + "m"
			key = "yes"
(contracted; show full)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'')
'''
# Modèles
Traitement
File = crawlerFile('articles_WTin.txt')
TraitementPage = modification(u'Utilisateur:JackBot/tesPage = 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)
TraitementRecherche = crawlerSearch(u'clé de tri')
TraitementUtilisateur = crawlerUser(u'Utilisateur:JackBot')
TraitementRedirections = crawlerRedirects()
TraitementTout = crawlerAll(u'')
while 1:
	TraitementRC = crawlerRC()
'''
</source>