Usuari:PereBot/robot arregla enllaços ambigus
Aparença
Aquest programa té tres versions:
- La primera agafa els articles que enllacen a una pàgina de desambiguació i mira de triar entre dos significats amb una expressió regular.
- La segona aplica uns mateixos canvis a tots els articles d'una categoria, si tenen el text a canviar. El mateix programa podria servir per qualsevol altre canvi de text.
- La tercera és més senzilla i canvia un enllaç ambigu concret que sortia en unes infotaules.
Compte que només el tercer està actualitzat a core, tot i que no hi hauria d'haver gaires canvis.
# -*- coding: utf-8 -*-
# Robot que arregla els enllaços que apunten a una pàgina de desambiguació,
# aplicant dos expressions regulars per decidir entre dos significats
import sys
sys.path.append('C:\pywikipedia')
import wikipedia,catlib,pagegenerators,urllib2
import re
# El programa comença aquí.
site=wikipedia.getSite('ca') #Canviar aquí per canviar de Viquipèdia
tpagdes=u"cartutx" # pàgina de desambiguació (canviar)
pagdes=wikipedia.Page(site,tpagdes)
for page in pagegenerators.ReferringPageGenerator(pagdes,followRedirects=True):
art=page
print page
# primer mira de filtrar els casos en que els enllaços ambigus són correctes
if art.namespace()<>0:
print u"No espai principal"
continue
plants=art.templates()
if art.isRedirectPage():
continue
elif u'Confusió' in plants or u'Confondre' in plants or u'Distingir' in plants:
print u'Confusió'
continue
elif u'Polisèmia' in plants or u'Nota disambigua' in plants or u'Other uses' in plants or u'Altres usos' in plants:
print u'Polisèmia'
continue
elif u'Redirecció' in plants or u'Redirect' in plants:
print u'Redirecció'
continue
elif u'Vegeu' in plants or u'Polisèmia descripció' in plants or u'Homonímia' in plants:
print u'Vegeu'
continue
elif u'Vegeu (des)' in plants or u'Vegeu (desambiguació)' in plants:
print u'Vegeu (des)'
continue
elif u'Vegeu lliure' in plants or u'Hatnote' in plants:
print u'Vegeu (des)'
continue
elif u'Vegeu3' in plants or u'Otheruses4' in plants:
print u'Vegeu3'
continue
elif u'Desambigua' in plants or u'Desambiguació' in plants or u'Disambig' in plants or u'DesambiCurta' in plants or u'Acrònim' in plants or u'Onomàstica' in plants or u'Biografies' in plants:
print u'pàgina de desambiguació'
continue
# tria si és un dels dos casos
text=page.get()
canvis=0
tvellm=tpagdes[0].upper()+tpagdes[1:]
if re.search(u"programa|ordinador|consola|videojoc|jugador",text): # primer filtre (canviar)
tnou=u"cartutx (maquinari)"
text=text.replace(u"[["+tpagdes+"]]",u"[["+tnou+"|"+tpagdes+"]]") # primer canvi (canviar)
text=text.replace(u"[["+tpagdes+"|",u"[["+tnou+"|") # primer canvi (canviar)
text=text.replace(u"[["+tvellm+"]]",u"[["+tnou+"|"+tvellm+"]]") # primer canvi (canviar)
text=text.replace(u"[["+tvellm+"|",u"[["+tnou+"|") # primer canvi (canviar)
canvis=canvis+1
tres=tnou
if re.search(u"fusell|rifle|bales|carregador",text): # segon filtre (canviar)
tnou=u"cartutx (armes de foc)"
text=text.replace(u"[["+tpagdes+"]]",u"[["+tnou+"|"+tpagdes+"]]") # primer canvi (canviar)
text=text.replace(u"[["+tpagdes+"|",u"[["+tnou+"|") # primer canvi (canviar)
text=text.replace(u"[["+tvellm+"]]",u"[["+tnou+"|"+tvellm+"]]") # primer canvi (canviar)
text=text.replace(u"[["+tvellm+"|",u"[["+tnou+"|") # primer canvi (canviar)
canvis=canvis+1 # posar +1 si el segon cas és per fer canvis
tres=tnou
if canvis==0:
print u"Cap dels casos"
elif canvis==1:
page.put(text,u"Robot substituint enllaç ambigu a [["+tpagdes+"]] per [["+tres+"]]")
elif canvis>1:
print u"Tots els casos. No es pot decidir."
wikipedia.stopme()
# -*- coding: utf-8 -*-
# Robot que canvia un text per un altre, dins dels articles d'una categoria.
# Adaptat per arreglar desambiguacions.
import sys
sys.path.append('C:\pywikipedia')
import wikipedia,catlib,pagegenerators,urllib2
import re
# Retorna les categories i articles d'una categoria, subcategories incloses.
# No torna a mirar les categories que ja ha mirat.
# Filtra pels noms de les categories fent servir una expressió regular.
def miracatfiltre(cat,catprevies=[],filtre=u""):
articles=cat.articlesList(recurse=False)
categories=cat.subcategoriesList(recurse=False)
for scat in categories:
print scat
# print u"Títol",scat.title()
if scat not in catprevies:
catprevies.append(scat)
if filtre==u"":
nopassa=False
print u"Filtre desactivat"
else:
nopassa=re.search(filtre,scat.title())
if not nopassa:
print u"Sí que es llegeix", scat
noucats,nouarts=miracatfiltre(scat,catprevies+categories,filtre)
categories=categories+noucats
articles=articles+nouarts
else:
print u"No es llegeix", scat
else:
print u"Aquesta ja la tinc vista"
categories=catlib.unique(categories)
articles=catlib.unique(articles)
print u"Llegits",len(categories),u"categories i",len(articles),u"articles a",cat
return categories, articles
# El programa comença aquí.
site=wikipedia.getSite('ca') #Canviar aquí per canviar de Viquipèdia
catbuscar=u"Geografia d'Astúries" #Posar aquí la categoria que es revisarà
categoria = catlib.Category(site,catbuscar)
filtrecats=u"Persones" # categories grans que ja estan fetes i no cal repetir
mirasubcategories=True #False per no mirar subcategories; True per mirar-les
if mirasubcategories:
cats, asc = miracatfiltre(categoria,filtre=filtrecats)
# asc=cats+asc
else:
asc=categoria.articlesList(recurse=False)
comptapotencial=len(asc)
print "Articles a la categoria",comptapotencial
#l=l[:2]
for page in pagegenerators.PreloadingGenerator(asc):
text=page.get()
text0=text
print page
if u"[[concejo]]" in text:
text=text.replace(u"[[concejo]]",u"[[concejo (Astúries)|concejo]]")
if u"[[Belmonte]]" in text:
text=text.replace(u"[[Belmonte]]",u"[[Belmonte de Miranda|Belmonte]]")
if text<>text0:
page.put(text,u"Robot arreglant una desambiguació")
wikipedia.stopme()
# -*- coding: utf-8 -*-
import sys
sys.path.append('C:\core')
import re
import pywikibot
from pywikibot import pagegenerators
from pywikibot.compat import catlib
#El programa comença aquí
site=pywikibot.getSite('ca')
titcat=u"Municipis de Noruega"
cat=catlib.Category(site,titcat)
comptador=0
llistafets=[]
for pag in pagegenerators.PreloadingGenerator(pagegenerators.CategorizedPageGenerator(cat,recurse=True)):
if pag in llistafets:
continue
else:
llistafets.append(pag)
comptador=comptador+1
print comptador,pag
text=pag.get()
if re.search(u"\{\{[Ii]nfotaula de municipi",text):
print comptador,pag.title(),u"té infotaula de municipi"
if re.search(u"admin_tipus2 *= *\[\[Comtat\]\]",text):
textnou=re.sub(u"admin_tipus2 *= *\[\[Comtat\]\]",u"admin_tipus2 = [[Comtats de Noruega|Comtat]]",text)
pag.put(textnou,u"Bot resolent desambiguació [[Comtats de Noruega|Comtat]]")
pywikibot.stopme()