Difference between revisions 15131754 and 15148305 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.
(contracted; show full)		page = Page(site,PageHS.replace(u'’', u'\''))
		if not page.exists():
			if debogage == True: print u'Création d\'une redirection apostrophe'
			sauvegarde(page, u'#REDIRECT[[' + PageHS + ']]', u'Redirection pour apostrophe')
	
	page = Page(site,PageHS)
	if page.exists():
		if page.namespace() !=0 and page.namespace() != 100 and page.namespace() != 14 and PageHS
 != .find(u'Utilisateur:JackBot/test':') == -1:
			print u'Page non traitée'
			return
		else:
			try:
				PageBegin = page.get()
			except wikipedia.NoPage:
				print "NoPage l 1113"
				return
			except wikipedia.LockedPage: 
				print "Locked l 1116"
				return
			except wikipedia.IsRedirectPage: 
				PageBegin = page.get(get_redirect=True)
				TxtTmp = u'<!--\n  Redirection créée par le robot User:DaftBot.\n  La création automatique de la page ciblée est prévue prochainement.\n-->'
				if PageBegin.find(TxtTmp) != -1:
					summary = u'[[Catégorie:Redirections à remplacer]]'
					PageBegin = PageBegin[0:PageBegin.find(TxtTmp)] + summary + PageBegin[PageBegin.find(TxtTmp)+len(TxtTmp):len(PageBegin)]
					sauvegarde(page,  PageBegin, summary)
				else:
					print "IsRedirect l 1119"
				return
	else:
		print "NoPage l 1118"
		return
	PageTemp = PageBegin
	CleTri = CleDeTri.CleDeTri(PageHS)
	
	# if debogage == True: print u'Traductions des modèles des autres Wiktionnaires'
	for p in range(1,LimitTemplate):
		while PageTemp.find(Template[p]) != -1: PageTemp = PageTemp[0:PageTemp.find(Template[p])] + TemplateFR[p] + PageTemp[PageTemp.find(Template[p])+len(Template[p]):len(PageTemp)]
	
	if page.namespace() == 0 or PageHS == .find(u'Utilisateur:JackBot/test'') != -1:
		while PageTemp.find(u'{{ ') != -1:
			PageTemp = PageTemp[0:PageTemp.find(u'{{ ')+2] + PageTemp[PageTemp.find(u'{{ ')+3:len(PageTemp)]
		if PageTemp.find(u'{{formater') != -1 or PageTemp.find(u'{{SI') != -1 or PageTemp.find(u'{{supp|') != -1 or PageTemp.find(u'{{supp}}') != -1 or PageTemp.find(u'{{supprimer|') != -1 or PageTemp.find(u'{{supprimer}}') != -1 or PageTemp.find(u'{{supprimer ') != -1 or PageTemp.find(u'-erreur-') != -1 or PageTemp.find(u'-faute-') != -1:
			print "Page en travaux : non traitée"
			return
			
		# if debogage == True: print u'Ajout des {{voir}}'
		if PageTemp.find(u'{{voir|{{lc:{{PAGENAME}}}}}}') != -1:
			PageTemp = PageTemp[0:PageTemp.find(u'{{voir|{{lc:{{PAGENAME}}}}}}')+len(u'{{voir|')] + PageHS[0:1].lower() + PageHS[1:len(PageHS)] + PageTemp[PageTemp.find(u'{{voir|{{lc:{{PAGENAME}}}}}}')+len(u'{{voir|{{lc:{{PAGENAME}}}}'):len(PageTemp)]
			summary = summary + u', subst de {{lc:{{PAGENAME}}}}'
		if PageTemp.find(u'{{voir|{{ucfirst:{{PAGENAME}}}}}}') != -1:
(contracted; show full)
			if PagesCleTotal.find(CleTri) == -1: PagesCleTotal = PagesCleTotal + u'|' + CleTri	# exception ? and PageTemp.find(u'{{langue|eo}}') == -1
			# Filtre des pages de la liste "à voir"
			PagesCleRestant = PagesCleTotal + u'|'
			PagesCleTotal = u''
			PagesVoir = u''
			
while PagesCleRestant != u'':if debogage == True: print u' Recherche des clés...'
			while PagesCleRestant != u'':
				if debogageLent == True: print PagesCleRestant.encode(config.console_encoding, 'replace')
				HS = u'False'
				PageCourante = PagesCleRestant[0:PagesCleRestant.find(u'|')]
				PagesCleRestant = PagesCleRestant[PagesCleRestant.find(u'|')+1:len(PagesCleRestant)]
				PageCle = Page(site,PageCourante)
				try:
					PageTempCle = PageCle.get()
				except wikipedia.NoPage:
					HS = u'True'
				except wikipedia.IsRedirectPage:
					HS = u'True'
				if HS == u'False':
					if PagesCleTotal.find(PageCourante) == -1: PagesCleTotal = PagesCleTotal + u'|' + PageCourante
					if PageTempCle.find(u'{{voir|') != -1:
						PageTempCle2 = PageTempCle[PageTempCle.find(u'{{voir|')+len(u'{{voir|'):len(PageTempCle)]
						PagesVoir = PagesVoir + u'|' + PageTempCle2[0:PageTempCle2.find(u'}}')]
					elif PageTempCle.find(u'{{voir/') != -1:
						PageTempCle2 = PageTempCle[PageTempCle.find(u'{{voir/')+len(u'{{voir/'):len(PageTempCle)]
						PageTemp = u'{{voir/' + PageTempCle2[0:PageTempCle2.find(u'}}')+3] + PageTemp
						pageMod = Page(site,u'Modèle:voir/' + PageTempCle2[0:PageTempCle2.find(u'}}')])
						try:
							PageTempModBegin = pageMod.get()
						except wikipedia.NoPage:
							print u'no page'
							break
						except wikipedia.IsRedirectPage:
							print "Redirect page"
							break
						except wikipedia.LockedPage:
							print "Locked/protected page"
							break
						PageTempMod = PageTempModBegin
						if PageTempMod.find(PageHS) == -1: PageTempMod = PageTempMod[0:PageTempMod.find(u'}}')] + u'|' + PageHS + PageTempMod[PageTempMod.find(u'}}'):len(PageTempMod)]
						if PageTempMod.find(PageVoir) == -1: PageTempMod = PageTempMod[0:PageTempMod.find(u'}}')] + u'|' + PageVoir + PageTempMod[PageTempMod.find(u'}}'):len(PageTempMod)]
						if PageTempMod != PageTempModBegin: sauvegarde(pageMod,PageTempMod, summary)
						PagesCleRestant = u''
						break	
			#if debogage == True: print u'PagesCleRestant vide'
						break	
			if debogage == True: print u' Filtre des doublons...'
			if PagesVoir != u'':
				PagesVoir = PagesVoir + u'|'
				while PagesVoir.find(u'|') != -1:
					if PagesCleTotal.find(PagesVoir[0:PagesVoir.find(u'|')]) == -1: PagesCleTotal = PagesCleTotal + u'|' + PagesVoir[0:PagesVoir.find(u'|')]
					PagesVoir = PagesVoir[PagesVoir.find(u'|')+1:len(PagesVoir)]
			#raw_input(PagesCleTotal.encode(config.console_encoding, 'replace'))
			
			#if debogage == True: print u' Balayage de toutes les pages "à voir"...'
			if PagesCleTotal != u'':
				while PagesCleTotal[0:1] == u'|': PagesCleTotal = PagesCleTotal[1:len(PagesCleTotal)]
			if PagesCleTotal != PageHS:
				if debogage == True: print u'  Différent de la page courante'
				PagesCleRestant = PagesCleTotal + u'|'
				while PagesCleRestant.find(u'|') != -1:
					HS = u'False'
					PageCourante = PagesCleRestant[0:PagesCleRestant.find(u'|')]
					if PageCourante == u'':  
						if debogage == True: print u'PageCourante vide'
						break
					PagesCleRestant = PagesCleRestant[PagesCleRestant.find(u'|')+1:len(PagesCleRestant)]
					PageCle = Page(site,PageCourante)
					try:
						PageTempCleBegin = PageCle.get()
					except wikipedia.NoPage:
						HS = u'True'
					except wikipedia.IsRedirectPage:
(contracted; show full)
								PageTempCle = PageTempCle[0:PageTempCle.find(u'{{voir|')+len(u'{{voir|')] + PagesCleTotal[len(PageCourante):len(PagesCleTotal)] + PageTempCle[PageTempCle.find(u'{{voir|')+len(u'{{voir')+PageTempCle2.find(u'}}'):len(PageTempCle)]
							if PageTempCle != PageTempCleBegin:
								if PageCourante == PageHS:
									PageTemp = PageTempCle
								else:

									if debogage == True: print u'Première sauvegarde dédiée à {{voir}}'
									sauvegarde(PageCle,PageTempCle, summary)
						else:
							if PagesCleTotal.find(u'|' + PageCourante) != -1:
								PageTempCle = u'{{voir|' + PagesCleTotal[0:PagesCleTotal.find(u'|' + PageCourante)] + PagesCleTotal[PagesCleTotal.find(u'|' + PageCourante)+len(u'|' + PageCourante):len(PagesCleTotal)] + u'}}\n' + PageTempCle
							else:	# Cas du premier
								PageTempCle = u'{{voir' + PagesCleTotal[len(PageCourante):len(PagesCleTotal)] + u'}}\n' + PageTempCle
							if PageCourante == PageHS:
								PageTemp = PageTempCle
							else:							
								sauvegarde(PageCle,PageTempCle, summary)
				
		elif PageTemp.find(u'{{voir|') != -1:
			if debogage == True: print u'  Identique à la page courante'
			PageTemp2 = PageTemp[PageTemp.find(u'{{voir|'):len(PageTemp)]
			if PageTemp2.find(u'|' + PageHS + u'|') != -1 and PageTemp2.find(u'|' + PageHS + u'|') < PageTemp2.find(u'}}'):
				PageTemp = PageTemp[0:PageTemp.find(u'{{voir|') + PageTemp2.find(u'|' + PageHS + u'|')] + PageTemp[PageTemp.find(u'{{voir|') + PageTemp2.find(u'|' + PageHS + u'|')+len(u'|' + PageHS):len(PageTemp)]
			if PageTemp2.find(u'|' + PageHS + u'}') != -1 and PageTemp2.find(u'|' + PageHS + u'}') < PageTemp2.find(u'}}'):
				PageTemp = PageTemp[0:PageTemp.find(u'{{voir|') + PageTemp2.find(u'|' + PageHS + u'}')] + PageTemp[PageTemp.find(u'{{voir|') + PageTemp2.find(u'|' + PageHS + u'}')+len(u'|' + PageHS):len(PageTemp)]
		
		if PageTemp.find(u'{{voir|') != -1 and PageTemp.find(u'{{voir/') != -1:
			PageTemp2 = PageTemp[PageTemp.find(u'{{voir|'):len(PageTemp)]
			PageTemp = PageTemp[0:PageTemp.find(u'{{voir|') + PageTemp2.find(u'}}')+2] + PageTemp[PageTemp.find(u'{{voir|') + PageTemp2.find(u'}}')+2:len(PageTemp)]
			
		# Nettoyage
		if debogage == True: print u' Nettoyage des {{voir}}...'
		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)]
		PageTemp = HTMLUnicode.HTMLUnicode(PageTemp)
(contracted; show full)
		if PageTemp.find(u'{{Latn') == -1 and PageTemp.find(u'{{Grek') == -1 and PageTemp.find(u'{{Cyrl') == -1 and PageTemp.find(u'{{Armn') == -1 and PageTemp.find(u'{{Geor') == -1 and PageTemp.find(u'{{Hebr') == -1 and PageTemp.find(u'{{Arab') == -1 and PageTemp.find(u'{{Syrc') == -1 and PageTemp.find(u'{{Thaa
v') == -1 and PageTemp.find(u'{{Deva') == -1 and PageTemp.find(u'{{Hang') == -1 and PageTemp.find(u'{{Hira') == -1 and PageTemp.find(u'{{Kana') == -1 and PageTemp.find(u'{{Hrkt') == -1 and PageTemp.find(u'{{Hani') == -1 and PageTemp.find(u'{{Jpan') == -1 and PageTemp.find(u'{{Hans') == -1 and PageTemp.find(u'{{Hant') == -1 and PageTemp.find(u'{{zh-mot') == -1 and PageTemp.find(u'{{kohan') == -1 and PageTemp.find(u'{{ko-nom') == -1: and PageTemp.find(u'{{la-verb') == -1 and PageTemp.find(u'{{grc-verb') == -1 and PageTemp.find(u'{{polytonique') == -1:
			if debogage == True: print u'Ajout du mot vedette'
			PageTemp = re.sub(ur'([^d\-]+\-\|[a-z]+\}\}\n\{\{[^\n]*\n)\# *', ur"\1'''" + PageHS + ur"''' {{pron}}\n# ", PageTemp)
		while PageTemp.find(u'\n {') != -1:
			PageTemp = PageTemp[0:PageTemp.find(u'\n {')+1] + PageTemp[PageTemp.find(u'\n {')+2:len(PageTemp)]		
		while re.compile('{{T\|.*\n\n\*[ ]*{{T\|').search(PageTemp):
			i1 = re.search(u'{{T\|.*\n\n\*[ ]*{{T\|',PageTemp).end()
(contracted; show full)
		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}}')
		
		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|'):]
		while PageTemp.find(u'{{figuré}} {{métaphore|fr}}') != -1:
			PageTemp = PageTemp[0:PageTemp.find(u'{{figuré}} {{métaphore|fr}}')] + u'{{figuré|fr}}' + PageTemp[PageTemp.find(u'{{figuré}} {{métaphore|fr}}')+len(u'{{figuré}} {{métaphore|fr}}'):len(PageTemp)]
		while PageTemp.find(u'{{figuré|fr}} {{métaphore|fr}}') != -1:
(contracted; show full)					break
				except wikipedia.BadTitle:
					print "BadTitle l 1530 : " + langue1
					break
				if PageTemp2.find(u'<noinclude>') != -1:
					langue = CleDeTri.CleDeTri(PageTemp2[0:PageTemp2.find(u'<noinclude>')])
					langue2 = u'zzz'

					if PageEnd.rfind(u'\n') == -1 or PageTemp.find(u'\n') == -1: break
					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)
							if langue2 > langue:
								if debogageLent == True: langue2 + u' > ' + langue
								if PageEnd.rfind(u'\n') > PageEnd.rfind(u'trad-début'):
									TradSuivantes = PageEnd[PageEnd.rfind(u'\n'):len(PageEnd)] + TradSuivantes
									PageEnd = PageEnd[0:PageEnd.rfind(u'\n')]
									summary = summary + ', traduction ' + langue2 + u' > ' + langue
								el
seif PageEnd.rfind(u'\n') != -1:
									# Cas de la première de la liste
									TradCourante = PageEnd[PageEnd.rfind(u'\n'):len(PageEnd)] + TradCourante
									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
(contracted; show full)
				codelangue = u'conv'
				EstCodeLangue = u'false'
			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 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)]
(contracted; show full)
						EstCodeLangue = u'true'
				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'
					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
			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'
(contracted; show full)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>