Difference between revisions 13918449 and 14011399 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.
# 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.
# 5) Complète les flexions de verbes à vérifier.
# 6) Traduit les importations de en.wikt.
# 7) Gère des modèles {{voir}} en début de page.

# Importation des modules
import catlib, pagegenerators, os, codecs, urllib, re, collections, socket
from wikipedia import *

# Déclaration
language = "fr"
family = "wiktionary"
mynick = "JackBot"
site = getSite(language,family)

# Modèles du site à traiter
limit6=9237
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[759] = u'f'
Modele[760] = u'n'
Modele[761] = u'c'
Modele[762] = u'mf'
Modele[763] = u'mf?'
Modele[764] = u'impers'
Modele[765] = u'impersonnel'

#Modele[766] = u'région'
#Modele[767] = u'régio'
#Modele[767] = u'régional'
Modele[768] = u'CB'
Modele[769] = u'mah-jong'
Modele[770] = u'mahjong'
Modele[771] = u'majong'
Modele[772] = u'réseau'
Modele[773] = u'réseaux informatiques'
Modele[774] = u'déverbal'
Modele[775] = u'superlatif'
Modele[776] = u'combat'
Modele[777] = u'sports de combat'
Modele[778] = u'capoeira'
Modele[779] = u'aïkido'
Modele[780] = u'karaté'
Modele[781] = u'argot militaire'
Modele[782] = u'argot polytechnicien'
Modele[783] = u'ski alpin'
Modele[784] = u'ski de fond'
Modele[785] = u'réseau'
Modele[786] = u'canoë-kayak'
Modele[787] = u'canoë'
Modele[788] = u'scol'
Modele[789] = u'obsolète'
Modele[789] = u'surf'
Modele[790] = u'édition'
Modele[791] = u'fortification'
Modele[792] = u'dentisterie'
Modele[793] = u'artillerie'
Modele[794] = u'fonderie'
limit5 = 7915
# non traités
#Modele[] = u'spécialement' 
#Modele[] = u'T'

# Modèles régionaux, pb du nocat pour les prononciations
Modele[791] = u'Amérique latine'
Modele[792] = u'Anjou'
Modele[793] = u'Antilles'
Modele[794] = u'Aquitaine'
Modele[795] = u'Argentine'
Modele[796] = u'Australie'
Modele[797] = u'Autriche'
Modele[798] = u'Auvergne'
Modele[799] = u'Baléares'
Modele[800] = u'Belgique'
Modele[801] = u'Luxembourg'
Modele[802] = u'Bénin'
(contracted; show full)Modele[914] = u'Afrique'
Modele[915] = u'Afrique du Sud'
Modele[916] = u'Algérie'
Modele[917] = u'Allemagne'
Modele[918] = u'Alsace'
Modele[919] = u'Amérique centrale'
Modele[920] = u'Amérique du Nord'
Modele[921] = u'Amérique du Sud'

Modele[922] = u'Amérique latine'
Modele[923] = u'Anjou'
Modele[924] = u'Antilles'
Modele[925] = u'Aquitaine'

# Modèles des autres Wiktionnaires à convertir
LimitTemplate = 66
Template = range(1, LimitTemplate+1)
TemplateFR = range(1, LimitTemplate+1)
Template[1] = u'===Adjective==='
TemplateFR[1] = u'{{-adj-}}'
(contracted; show full)				return
	else:
		print "NoPage l 1118"
		return
	PageTemp = PageBegin
	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'{{supp') != -1:
		print "Page en suppressiontravaux"
		return				
	# 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)]
	# 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:
		PageTemp = PageTemp[0:PageTemp.find(u'{{voir|{{ucfirst:{{PAGENAME}}}}}}')+len(u'{{voir|')] + PageHS[0:1].upper() + PageHS[1:len(PageHS)] + PageTemp[PageTemp.find(u'{{voir|{{ucfirst:{{PAGENAME}}}}}}')+len(u'{{voir|{{ucfirst:{{PAGENAME}}}}'):len(PageTemp)]
		summary = summary + u', subst de {{ucfirst:{{PAGENAME}}}}'
	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:
		PageTemp = PageTemp[0:PageTemp.find(u'{{voir|{{UCFIRST:{{PAGENAME}}}}}}')+len(u'{{voir|')] + PageHS[0:1].upper() + PageHS[1:len(PageHS)] + PageTemp[PageTemp.find(u'{{voir|{{UCFIRST:{{PAGENAME}}}}}}')+len(u'{{voir|{{UCFIRST:{{PAGENAME}}}}'):len(PageTemp)]
		summary = summary + u', subst de {{UCFIRST:{{PAGENAME}}}}'	
	if PageTemp.find(u'{{voir|') == -1 and PageTemp.find(u'{{voir/') == -1:
		PageVoir = u''
		# Liste de toutes les pages potentiellement "à voir"
		PagesCleTotal = PageHS
		if PagesCleTotal.find(PageHS.lower()) == -1: PagesCleTotal = PagesCleTotal + u'|' + PageHS.lower()
		if PagesCleTotal.find(PageHS.upper()) == -1: PagesCleTotal = PagesCleTotal + u'|' + PageHS.upper()
(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)]
	
		
	# Clés de tri
	if PageTemp.find(u'{{clé de tri') == -1 and PageTemp.find(u'{{clef de tri') == -1:
		ClePage = CleDeTri(PageHS)
		if ClePage != u'' and ClePage != PageHS:
			if PageTemp.find(u'[[Catégorie:') != -1:
				PageTemp = PageTemp[0:PageTemp.find(u'[[Catégorie:')] + u'\n{{clé de tri|' + ClePage + u'}}\n' + PageTemp[PageTemp.find(u'[[Catégorie:'):len(PageTemp)]
			elif PageTemp.find(u'[[Category:') != -1:
				PageTemp = PageTemp[0:PageTemp.find(u'[[Category:')] + u'\n{{clé de tri|' + ClePage + u'}}\n' + PageTemp[PageTemp.find(u'[[Category:'):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{{clé de tri|' + ClePage + u'}}\n' + PageTemp[re.search(regex,PageTemp).end():len(PageTemp)]
						except:
							print u'pb regex interwiki'
					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:
		PageTemp2 = PageTemp[PageTemp.find(u'{{clé de tri'):len(PageTemp)]
		ClePage = PageTemp2[PageTemp2.find(u'|')+1:PageTemp2.find(u'}}')]
		if CleDeTri(PageHS) != ClePage:
			print (u'Fausse clé de tri dans :')
			print (PageHS.encode(config.console_encoding, 'replace'))
(contracted; show full)
	while PageTemp.find(u'&#700;') != -1:
		PageTemp = PageTemp[0:PageTemp.find(u'&#700;')] + u'ʼ' + PageTemp[PageTemp.find(u'&#700;')+len(u'&#700;'):len(PageTemp)]
	while PageTemp.find(u'<sup/>') != -1:
		PageTemp = PageTemp[0:PageTemp.find(u'<sup/>')] + u'</sup>' + PageTemp[PageTemp.find(u'<sup/>')+len(u'<sup/>'):len(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()
		PageTemp = PageTemp[:i1][0:PageTemp[:i1].rfind(u'\n')-1] + PageTemp[:i1][PageTemp[:i1].rfind(u'\n'):len(PageTemp[:i1])] + PageTemp[i1:]
	while PageTemp.find(u'&#700;') != -1:
(contracted; show full)
	while PageTemp.find(u'{{-réf-}}\n{{Import:DAF8}}') != -1:
		PageTemp = PageTemp[0:PageTemp.find(u'{{Import:DAF8}}')] + u'*' + PageTemp[PageTemp.find(u'{{Import:DAF8}}'):len(PageTemp)]
	while PageTemp.find(u'{{-réf-}}\n{{Import:Littré}}') != -1:
		PageTemp = PageTemp[0:PageTemp.find(u'{{Import:Littré}}')] + u'*' + PageTemp[PageTemp.find(u'{{Import:Littré}}'):len(PageTemp)]

	while PageTemp.find(u'[http://') != -1:
		PageTemp = PageTemp[0:PageTemp.find(u'[http://')+1] + PageTemp[PageTemp.find(u'[http://')+6:len(PageTemp)]	
	while PageTemp.find(u'[https://') != -1:
		PageTemp = PageTemp[0:PageTemp.find(u'[https://')+1] + PageTemp[PageTemp.find(u'[https://')+7:len(PageTemp)]	
		
	# Classement des traductions
	PageEnd = u''
	while PageTemp.find(u'{{T|') != -1:
		PageEnd = PageEnd + PageTemp[0:PageTemp.find(u'{{T|')]
		PageTemp = PageTemp[PageTemp.find(u'{{T|'):len(PageTemp)]
		# 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'}')]
(contracted; show full)			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 socket.gethostname() != u'willow':
		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)
				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

	# Remplacement des codes langues
	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'
(contracted; show full)	if source:
		PagesHS = open(source, 'r')
		while 1:
			PageHS = PagesHS.readline()
			fin = PageHS.find("\t")
			PageHS = PageHS[0:fin]
			if PageHS == '': break

			if PageHS.find(u'[[') != -1:
				PageHS = PageHS[PageHS.find(u'[[')+2:len(PageHS)]
			if PageHS.find(u']]') != -1:
				PageHS = PageHS[0:PageHS.find(u']]')]
			modification(PageHS)
		PagesHS.close()

# Traitement d'une catégorie
def crawlerCat(category,recursif,apres):
	modifier = u'False'
	cat = catlib.Category(site, category)
	pages = cat.articlesList(False)
(contracted; show full)TraitementRecherche = crawlerSearch(u'chinois')
TraitementUtilisateur = crawlerUser(u'Utilisateur:JackBot')
TraitementRedirections = crawlerRedirects()
TraitementTout = crawlerAll(u'')
while 1:
	TraitementRC = crawlerRC()
'''
</source>