Usuari:PereBot/robot arregla enllaços ambigus

De la Viquipèdia, l'enciclopèdia lliure

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()