Difference between revisions 14865244 and 14987322 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)
# 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=9708
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[818] = u'logistique'
Modele[819] = u'lutherie'
Modele[820] = u'pétanque'
Modele[821] = u'accord genre ?'
Modele[822] = u'supprimer-déf ?'
Modele[823] = u'hyperbole'
Modele[824] = u'idiotisme'
Modele[825] = u'indéfini'

Modele[826] = u'singulare tantum'
Modele[827] = u'plurale tantum'
Modele[828] = u'islam'
Modele[829] = u'judaïsme'
Modele[830] = u'bouddhisme'
Modele[831] = u'hindouisme'
Modele[832] = u'marbrerie'
Modele[833] = u'miroiterie'

limit4 = 82634	# code langue quoi qu'il arrive
Modele[8234] = u'ébauche-pron'
Modele[835] = u'ébauche-syn'
Modele[836] = u'note-gentilé'
Modele[8237] = u'ébauche-étym-nom-scientifique'
Modele[8238] = u'ébauche-trans'
Modele[8239] = u'ébauche-déf'
Modele[8340] = u'ébauche-étym'
Modele[8341] = u'ébauche-pron'
Modele[8342] = u'ébauche'
Modele[8343] = u'ébauche-exe'
Modele[834] = u'ébauche-pron'
Modele[835] = u'ébauche-syn'
'''
# 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 = 836
Modele[836] = u'Guinée'
Modele[837] = u'Guyane'
Modele[838] = u'Haïti'
Modele[839] = u'Honduras'
Modele[840] = u'Île-de-France'
Modele[841] = u'Inde'
Modele[842] = u'Irlande'
Modele[843] = u'Jamaïque'44
Modele[844] = u'Languedoc-Roussillon'
Modele[845] = u'Le Mans'
Modele[846] = u'Liban'
Modele[847] = u'Liechtenstein'
Modele[848] = u'Limousin'
Modele[849] = u'Louisiane'
Modele[850] = u'Lyonnais'
(contracted; show full)Modele[961] = u'États-Unis'
Modele[962] = u'Europe'
Modele[963] = u'France'
Modele[964] = u'Franche-Comté'
Modele[965] = u'Gascogne'
Modele[966] = u'Gaspésie'
Modele[967] = u'Guadeloupe'

Modele[968] = u'Guinée'
Modele[969] = u'Guyane'
Modele[970] = u'Haïti'
Modele[971] = u'Honduras'
Modele[972] = u'Île-de-France'
Modele[973] = u'Inde'
Modele[974] = u'Irlande'
Modele[975] = u'Jamaïque'
# Modèles de pronociation à synchroniser
Modele[9768] = 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)
		PageHS = HTMLUnicode.HTMLUnicode(PageHS)
		PageTemp = HTMLUnicode.HTMLUnicode(PageTemp)
		PageTemp = PageTemp.replace(u'}}&#32;[[', u'}} [[')
		PageTemp = PageTemp.replace(u']]&#32;[[', u']] [[')
					
		# Clés de tri
		if debogage == True: print u'Clés de tri'
		
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 = CleTri
			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':':
						PageTemp = PageTemp[0:PageTemp.rfind(u'\n\n[[')] + u'\n\n{{clé de tri|' + ClePage + u'}}' + PageTemp[PageTemp.rfind(u'\n\n[['):len(PageTemp)]
					else:
						PageTemp = PageTemp + u'\n\n{{clé de tri|' + ClePage + u'}}\n'
				else:
					PageTemp = PageTemp + u'\n\n{{clé de tri|' + ClePage + u'}}\n'
							
		else:
			if debogage == True: print u' existante'
			if PageTemp.find(u'{{clé de tri|') != -1:
				PageTemp2 = PageTemp[PageTemp.find(u'{{clé de tri|')+len(u'{{clé de tri|'):len(PageTemp)]
				ClePage = PageTemp2[0:PageTemp2.find(u'}}')]
				if CleTri != ClePage and (PageTemp.find(u'{{langue|fr}}') != -1 or PageTemp.find(u'{{langue|eo}}') != -1 or PageTemp.find(u'{{langue|en}}') != -1 or PageTemp.find(u'{{langue|es}}') != -1 or PageTemp.find(u'{{langue|de}}') != -1 or PageTemp.find(u'{{langue|pt}}') != -1 or PageTemp.find(u'{{langue|it}}') != -1):
					#print CleTri
					#print ClePage
					summary = summary + u', {{clé de tri}} corrigée'
					PageTemp = PageTemp[0:PageTemp.find(u'{{clé de tri|')+len(u'{{clé de tri|')] + CleTri + PageTemp[PageTemp.find(u'{{clé de tri|')+len(u'{{clé de tri|')+PageTemp2.find(u'}}'):len(PageTemp)]
		#if debogage == True: raw_input(PageTemp.encode(config.console_encoding, 'replace'))
		
		while PageTemp.find(u'\n{clé de tri') != -1:
			PageTemp = PageTemp[0:PageTemp.find(u'\n{clé de tri')+1] + u'{' + PageTemp[PageTemp.find(u'\n{clé de tri'):len(PageTemp)]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|')
		while PageTemp.find(u'\n{clé de tri') != -1:
			PageTemp = PageTemp[0:PageTemp.find(u'\n{clé de tri')+1] + u'{' + PageTemp[PageTemp.find(u'\n{clé de tri'):len(PageTemp)]
			
		ClePage = CleTri
		if PageTemp.find(u'{{clé de tri') == -1 and ClePage != u'' and ClePage.lower() != PageHS.lower():
				summary = summary + u', {{clé de tri}} ajoutée'
				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':':
						PageTemp = PageTemp[0:PageTemp.rfind(u'\n\n[[')] + u'\n\n{{clé de tri|' + ClePage + u'}}' + PageTemp[PageTemp.rfind(u'\n\n[['):len(PageTemp)]
					else:
						PageTemp = PageTemp + u'\n\n{{clé de tri|' + ClePage + u'}}\n'
				else:
					PageTemp = PageTemp + u'\n\n{{clé de tri|' + ClePage + u'}}\n'
							
		elif PageTemp.find(u'{{clé de tri|') != -1 and (PageTemp.find(u'{{langue|fr}}') != -1 or PageTemp.find(u'{{langue|eo}}') != -1 or PageTemp.find(u'{{langue|en}}') != -1 or PageTemp.find(u'{{langue|es}}') != -1 or PageTemp.find(u'{{langue|de}}') != -1 or PageTemp.find(u'{{langue|pt}}') != -1 or PageTemp.find(u'{{langue|it}}') != -1):
			if debogage == True: print u' vérification de clé existante pour alphabets connus'
			PageTemp2 = PageTemp[PageTemp.find(u'{{clé de tri|')+len(u'{{clé de tri|'):len(PageTemp)]
			ClePage = PageTemp2[0:PageTemp2.find(u'}}')]
			if CleTri.lower() != ClePage.lower():
				summary = summary + u', {{clé de tri}} corrigée'
				PageTemp = PageTemp[0:PageTemp.find(u'{{clé de tri|')+len(u'{{clé de tri|')] + CleTri + PageTemp[PageTemp.find(u'{{clé de tri|')+len(u'{{clé de tri|')+PageTemp2.find(u'}}'):len(PageTemp)]
			elif CleTri.lower() == PageHS.lower():
				summary = summary + u', {{clé de tri}} supprimée'
				PageTemp = PageTemp[0:PageTemp.find(u'{{clé de tri|')] + PageTemp[PageTemp.find(u'{{clé de tri|')+len(u'{{clé de tri|')+PageTemp2.find(u'}}')+2:len(PageTemp)]
		if debogageLent == True: raw_input(PageTemp.encode(config.console_encoding, 'replace'))
		
		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]] -->'
		if PageTemp.find(baratin) != -1:
			PageTemp = PageTemp[0:PageTemp.find(baratin)] + PageTemp[PageTemp.find(baratin)+len(baratin):len(PageTemp)]
			summary = summary + u', {{clé de tri|}} inutilsupprimée'
		if PageTemp.find(u'{{clé de tri|}}') != -1:
			PageTemp = PageTemp[0:PageTemp.find(u'{{clé de tri|}}')] + PageTemp[PageTemp.find(u'{{clé de tri|}}')+len(u'{{clé de tri|}}'):len(PageTemp)]
			summary = summary + u', {{clé de tri|}} inutilsupprimée'
		if PageTemp.find(u'{{clé de tri}}') != -1:
			PageTemp = PageTemp[0:PageTemp.find(u'{{clé de tri}}')] + PageTemp[PageTemp.find(u'{{clé de tri}}')+len(u'{{clé de tri}}'):len(PageTemp)]
			summary = summary + u', {{clé de tri}} inutilsupprimée'
		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}} inutilsupprimée'
		
		
		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)
			PageTemp = PageTemp[0:PageTemp.find(u'\n* {{SAMPA}}: //')] + PageTemp[PageTemp.find(u'\n* {{SAMPA}}: //')+len(u'\n* {{SAMPA}}: //'):len(PageTemp)]
		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}}')
		
		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'{{figuré}} {{métaphore|fr}}') != -1:
(contracted; show full)
		while PageTemp.find(u'|notat=1') != -1:
			PageTemp = PageTemp[0:PageTemp.find(u'|notat=1')] + u'|nocat=1' + PageTemp[PageTemp.find(u'|notat=1')+len(u'|notat=1'):len(PageTemp)]
		regex = u'\{\{trad\|([a-z][a-z]?[a-z])\|\}\}'
		if re.search(regex, PageTemp):
			PageTemp = re.sub(regex, ur'{{ébauche-trad|\1}}', PageTemp)

		regex = ur'\{\{ISBN\|([^\}]*)\}\}'
		if re.search(regex, PageTemp):
			PageTemp = re.sub(regex, ur'ISBN \1', PageTemp)
			
		'''PageTemp3 = u''
		while PageTemp.find(u'{{fr-accord-ot|') != -1:
			if PageHS[len(PageHS)-2:] == u'ot':
				PageTemp2 = PageTemp[PageTemp.find(u'{{fr-accord-ot|')+len(u'{{fr-accord-ot|'):]
				if PageTemp2.find(u'|') < PageTemp2.find(u'}}') and PageTemp2.find(u'|') != -1:
					PageTemp3 = PageTemp3 + PageTemp[:PageTemp.find(u'{{fr-accord-ot|')+len(u'{{fr-accord-ot|')]
					PageTemp = PageTemp[PageTemp.find(u'{{fr-accord-ot|')+len(u'{{fr-accord-ot|')+PageTemp2.find(u'|')+1:]
				else:
					PageTemp3 = PageTemp3 + PageTemp[:PageTemp.find(u'{{fr-accord-ot|')+len(u'{{fr-accord-ot|')]
					PageTemp = PageTemp[PageTemp.find(u'{{fr-accord-ot|')+len(u'{{fr-accord-ot|')+PageTemp2.find(u'}}'):]
			else:
				PageTemp3 = PageTemp3 + PageTemp[:PageTemp.find(u'{{fr-accord-ot|')+len(u'{{fr-accord-ot|')] + u'ms='
				PageTemp = PageTemp[PageTemp.find(u'{{fr-accord-ot|')+len(u'{{fr-accord-ot|'):]
				if PageTemp.find(u'|') < PageTemp.find(u'}}') and PageTemp.find(u'|') != -1:
					PageTemp3 = PageTemp3 + PageTemp[:PageTemp.find(u'|')] + u'ot'
					PageTemp = PageTemp[PageTemp.find(u'|'):]
				else:
					PageTemp3 = PageTemp3 + PageTemp[:PageTemp.find(u'}}')] + u'ot'
					PageTemp = PageTemp[PageTemp.find(u'}}'):]	
		PageTemp = PageTemp3 + PageTemp'''
		
		LimiteReg = 13
		ModRegion = range(1, LimiteReg)
		ModRegion[1] = u'AU'
		ModRegion[2] = u'AR'
		ModRegion[3] = u'AT'
		ModRegion[4] = u'BE'
		ModRegion[5] = u'BR'
(contracted; show full)
		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) < 
7: # sinon trop long ( > 1 h par page)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')
(contracted; show full)
	) and (PageTemp.find(u':Catégorie:Champignons') + 1 != PageTemp.rfind(u'Catégorie:Champignons'))):
							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'sexualité' or Modele[p] == u'sexe':
						if (EstCodeLangue == "false"
	) or (PageTemp.find(u'Catégorie:Positions sexuelles'
	) != -1 and (PageTemp.find(u'Catégorie:Positions sexuelles') < PageTemp.find(u'{{langue|') and PageTemp.find(u'{{langue|') != -1 or PageTemp.find(u'{{langue|') == -1
	) and (PageTemp.find(u':Catégorie:Positions sexuelles') + 1 != PageTemp.rfind(u'Catégorie:Positions sexuelles'))):
							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'chimie' or Modele[p] == u'chim':
						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
(contracted; show full)						if debogage == True: print u'Catégorisée quel que soit EstCodeLangue (ex : ébauches)'
						if codelangue:
							PageEnd = PageEnd + PageTemp[0:position] + "|" + codelangue + "}}"
						else:
							PageEnd = PageEnd + PageTemp[0:position] + "|nocat=1}}"		
					else:
						if debogage == True: print u'Paragraphe régional : non catégorisé dans la prononciation'

						if debogageLent == True: 
							print (PageEnd.encode(config.console_encoding, 'replace')[0:1000])
							raw_input (PageTemp.encode(config.console_encoding, 'replace'))
						if PageEnd.rfind(u'{{') != -1:
							PageEnd2 = PageEnd[0:PageEnd.rfind(u'{{')]
							if EstCodeLangue == "true" and (PageEnd2.rfind(u'{{') != PageEnd2.rfind(u'{{pron|') or PageEnd.rfind(u'{{pron|') < PageEnd.rfind(u'\n') or PageEnd2.rfind(u'{{pron|') == -1) and ((PageTemp.find(u'{{') != PageTemp.find(u'{{pron|') or PageTemp.find(u'{{pron|') > PageTemp.find(u'\n')) or PageTem(contracted; show full)			print "BadTitle en sauvegarde"
			return
		except AttributeError:
			print "AttributeError en sauvegarde"
			return
			
# Lancement
#TraitementLiens = crawlerLink(u'Modèle:
note-gentilé',u'')
ISBN',u'')
#TraitementLiens = crawlerLink(u'Modèle:conj-hbo',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)TraitementRecherche = crawlerSearch(u'clé de tri')
TraitementUtilisateur = crawlerUser(u'Utilisateur:JackBot')
TraitementRedirections = crawlerRedirects()
TraitementTout = crawlerAll(u'')
while 1:
	TraitementRC = crawlerRC()
'''
</source>