SlideShare una empresa de Scribd logo
1 de 30
Descargar para leer sin conexión
B OTS EN W IKIPEDIA
                  I NTRODUCCIÓN A pywikipediabot

                               Emilio José Rodríguez Posada
                                    Noelia Sales Montes
                                        Universidad de Cádiz


                                              2010



E MILIO J. RODRÍGUEZ - N OELIA S ALES                          UCA
B OTS EN W IKIPEDIA
Q UÉ DEBERÍAS SABER


              Algo de Python
              Algo sobre edición de wikis (MediaWiki)
              Funcionamiento de una comunidad wiki
                       Consenso antes de hacer miles de cambios
                       Sin consenso quizás haya que deshacerlo todo
                               Doble trabajo
              Sopesar si el bot será rentable
                       Hay tareas que no pueden automatizarse bien
                       ¿Tasa aciertos >>>> tasa fallos? Entonces vale



E MILIO J. RODRÍGUEZ - N OELIA S ALES                                   UCA
B OTS EN W IKIPEDIA
¿Q UÉ ES UN BOT ?


              Un programa que hace muchos cambios, que sería
              tedioso hacer a mano
              Pueden ser:
                       Totalmente automáticos
                               Aún así conviene verificar los cambios
                       Pidan confirmación antes de actuar
                               Son más lentos pero más seguros
                               Ideales para pocos cambios (<1000) y que éstos
                               sean peligrosos de automatizar




E MILIO J. RODRÍGUEZ - N OELIA S ALES                                           UCA
B OTS EN W IKIPEDIA
¿Q UÉ ES pywikipediabot?


              Es un framework
                       Conjunto de funciones que permiten modificar
                       páginas MediaWiki
              Ha alcanzado madurez
                       Es el principal framework que se usa en Wikipedia
              Está hecho en Python
              Es software libre




E MILIO J. RODRÍGUEZ - N OELIA S ALES                                      UCA
B OTS EN W IKIPEDIA
I NSTALANDO pywikipediabot
      Supongo que estamos en Linux:
              Web: http://pywikipediabot.sourceforge.net/
              Instalación:
              > svn co http://svn.wikimedia.org/svn
              root/pywikipedia/trunk/pywikipedia
              Preferencias:
                       Crear user-config.py
                               Ejecutar
                               > python interwiki.py (y rellenar los datos)
                       Primera ejecución:
                               Ahora sí
                               > python interwiki.py A

E MILIO J. RODRÍGUEZ - N OELIA S ALES                                         UCA
B OTS EN W IKIPEDIA
F UNCIONES BÁSICAS (I)

      Primeras funciones...
              wikipedia.Site(): Constructor de sitio
              site = wikipedia.Site("es", "wikipedia")
              wikipedia.Page(): Constructor de página
              page = wikipedia.Page(site, u"Universidad de Cádiz")
              page.title(): Devuelve el título de la página
              wtitle = page.title()
              page.get(): Devuelve el contenido de la página
              wtext = page.get()
              page.put(): Modifica el contenido
              page.put(newtext, u"BOT - Arreglando lo que sea...")


E MILIO J. RODRÍGUEZ - N OELIA S ALES                          UCA
B OTS EN W IKIPEDIA
P RIMER BOT

              Crear un objeto página para el artículo
              “Universidad de Cádiz”, imprimir por pantalla su
              título y su contenido.
              Pistas:
                       Para usar las funciones hay que importarlas
                       import wikipedia
                       Usar constructor de sitio y de página
                       Capturar título en una variable (page.title())
                       Capturar texto en una variable (page.get())
                       Imprimir ambas variables por consola


E MILIO J. RODRÍGUEZ - N OELIA S ALES                                   UCA
B OTS EN W IKIPEDIA
P RIMER BOT

              Crear un objeto página para el artículo
              “Universidad de Cádiz”, imprimir por pantalla su
              título y su contenido.
              Pistas:
                       Para usar las funciones hay que importarlas
                       import wikipedia
                       Usar constructor de sitio y de página
                       Capturar título en una variable (page.title())
                       Capturar texto en una variable (page.get())
                       Imprimir ambas variables por consola


E MILIO J. RODRÍGUEZ - N OELIA S ALES                                   UCA
B OTS EN W IKIPEDIA
P RIMER BOT


      # -*- coding: utf-8 -*-
      import wikipedia

      site = wikipedia.Site("es", "wikipedia")
      page = wikipedia.Page(site, u"Universidad de Cádiz")
      wtitle = page.title()
      wtext = page.get()
      wikipedia.output(u"Título: %s" % wtitle)
      wikipedia.output(u"Texto: %s" % wtext)




E MILIO J. RODRÍGUEZ - N OELIA S ALES                        UCA
B OTS EN W IKIPEDIA
F UNCIONES BÁSICAS (II)


      Más funciones básicas...
              page.exists(): Comprueba si existe el artículo al
              que “page” apunta
              page.isRedirectPage(): Comprueba si es
              redirección
              page.isDisambig(): Comprueba si es
              desambiguación




E MILIO J. RODRÍGUEZ - N OELIA S ALES                             UCA
B OTS EN W IKIPEDIA
S EGUNDO BOT


              Cargar la página “Universidad de Cadiz” (ojo, sin
              acento), devolver su título, comprobar si es una
              redirección, y mostrar su contenido.
              Pistas:
                       Las redirecciones son “páginas especiales”.
                       Su contenido se carga con page.get(), pero
                       pasándole la variable get_redirect=True.




E MILIO J. RODRÍGUEZ - N OELIA S ALES                                UCA
B OTS EN W IKIPEDIA
S EGUNDO BOT


              Cargar la página “Universidad de Cadiz” (ojo, sin
              acento), devolver su título, comprobar si es una
              redirección, y mostrar su contenido.
              Pistas:
                       Las redirecciones son “páginas especiales”.
                       Su contenido se carga con page.get(), pero
                       pasándole la variable get_redirect=True.




E MILIO J. RODRÍGUEZ - N OELIA S ALES                                UCA
B OTS EN W IKIPEDIA
S EGUNDO BOT


      # -*- coding: utf-8 -*-
      import wikipedia

      site = wikipedia.Site("es", "wikipedia")
      page = wikipedia.Page(site, u"Universidad de Cadiz")
      wtitle = page.title()
      esredirect = page.isRedirectPage()
      wtext = page.get(get_redirect=True)
      wikipedia.output(u"Título: %s" % wtitle)
      wikipedia.output(u"Es redirección? %s" % esredirect)
      wikipedia.output(u"Texto: %s" % wtext)



E MILIO J. RODRÍGUEZ - N OELIA S ALES                        UCA
B OTS EN W IKIPEDIA
F UNCIONES BÁSICAS (III)



              page.interwiki(): Devuelve los interwikis
              page.categories(): Devuelve las categorías
              page.linkedPages(): Devuelve los [[enlaces]]
              page.imagelinks(): Devuelve las imágenes
      Todas estas funciones devuelven listas de objetos Page




E MILIO J. RODRÍGUEZ - N OELIA S ALES                          UCA
B OTS EN W IKIPEDIA
T ERCER BOT


              Para “Universidad de Cádiz”, mostrar los títulos
              de las categorías, el número de enlaces y número
              de interwikis.
              Pistas:
                       Es posible recorrer con un bucle for
                       page.categories() ¡Es una lista!
                       La longitud de una lista puede saberse con:
                       len(lista)




E MILIO J. RODRÍGUEZ - N OELIA S ALES                                UCA
B OTS EN W IKIPEDIA
T ERCER BOT


              Para “Universidad de Cádiz”, mostrar los títulos
              de las categorías, el número de enlaces y número
              de interwikis.
              Pistas:
                       Es posible recorrer con un bucle for
                       page.categories() ¡Es una lista!
                       La longitud de una lista puede saberse con:
                       len(lista)




E MILIO J. RODRÍGUEZ - N OELIA S ALES                                UCA
B OTS EN W IKIPEDIA
T ERCER BOT

      # -*- coding: utf-8 -*-
      import wikipedia

      site = wikipedia.Site("es", "wikipedia")
      page = wikipedia.Page(site, u"Universidad de Cádiz")
      wtitle = page.title()
      wikipedia.output(u"Título: %s" % wtitle)
      for cat in page.categories():
          wikipedia.output(cat.title())
      wikipedia.output(u"No. enlaces: %d" %
                       len(page.linkedPages()))
      wikipedia.output(u"No. interwikis: %d" %
                       len(page.interwiki()))


E MILIO J. RODRÍGUEZ - N OELIA S ALES                        UCA
B OTS EN W IKIPEDIA
PAGEGENERATORS
      Quizás nos interese recorrer todos los artículos de
      Wikipedia o una parte...
      Lo conseguimos con los pagegenerators:
              Importamos el módulo pagegenerators:
              import pagegenerators
              Hacemos:
              gen = pagegenerators.AllpagesPageGenerator(start=u“A”)

              Si no queremos analizar redirecciones, le pasamos el
              parámetro:
              includeredirects=False
              Precargamos el pagegenerator que hemos creado:
              preload = pagegenerators.PreloadingGenerator(gen)

E MILIO J. RODRÍGUEZ - N OELIA S ALES                                  UCA
B OTS EN W IKIPEDIA
C UARTO BOT


              Calcular la media en KiloBytes de los primeros
              100 artículos, a partir del comienzo “Be”.
              Pistas:
                       Crear un pagegenerator pasándole el parámetro
                       start=u“Be”
                       Evitamos cargar redirecciones
                       Ir acumulando los tamaños de los artículos:
                       len(page.get())




E MILIO J. RODRÍGUEZ - N OELIA S ALES                                  UCA
B OTS EN W IKIPEDIA
C UARTO BOT


              Calcular la media en KiloBytes de los primeros
              100 artículos, a partir del comienzo “Be”.
              Pistas:
                       Crear un pagegenerator pasándole el parámetro
                       start=u“Be”
                       Evitamos cargar redirecciones
                       Ir acumulando los tamaños de los artículos:
                       len(page.get())




E MILIO J. RODRÍGUEZ - N OELIA S ALES                                  UCA
B OTS EN W IKIPEDIA
C UARTO BOT
      # -*- coding: utf-8 -*-
      import wikipedia, pagegenerators

      gen = pagegenerators.AllpagesPageGenerator(start=u"Be",
                           includeredirects=False)
      preload = pagegenerators.PreloadingGenerator(gen)
      media = 0.0
      cont = 0
      limite = 100
      for page in preload:
          if cont == limite:
               break
          media += len(page.get())
          cont += 1
      media = (media/1024)/limite
      wikipedia.output(u"La media es: %.2f KB" % media)
E MILIO J. RODRÍGUEZ - N OELIA S ALES                     UCA
B OTS EN W IKIPEDIA
Q UINTO BOT

              Hacer un corrector ortográfico: que cambie
              ortográfico “avion” por “avión” y otras faltas que
              se os ocurran.
              Pistas:
                       Usar una estructura dictionary para almacenar los
                       pares de valores:
                       faltas={u“avion”:u“avión”, ...}
                       Recorrer el diccionario con un bucle:
                       for clave, valor in faltas.items():
                       Haciendo la sustitución en el texto así:
                       re.sub(clave, valor, textoarticulo)
                       ¡Importar módulo re!

E MILIO J. RODRÍGUEZ - N OELIA S ALES                                      UCA
B OTS EN W IKIPEDIA
Q UINTO BOT

              Hacer un corrector ortográfico: que cambie
              ortográfico “avion” por “avión” y otras faltas que
              se os ocurran.
              Pistas:
                       Usar una estructura dictionary para almacenar los
                       pares de valores:
                       faltas={u“avion”:u“avión”, ...}
                       Recorrer el diccionario con un bucle:
                       for clave, valor in faltas.items():
                       Haciendo la sustitución en el texto así:
                       re.sub(clave, valor, textoarticulo)
                       ¡Importar módulo re!

E MILIO J. RODRÍGUEZ - N OELIA S ALES                                      UCA
B OTS EN W IKIPEDIA
Q UINTO BOT


      # -*- coding: utf-8 -*-
      import wikipedia, re

      faltas = {u"avion":u"avión", u"dificil":u"difícil"}
      page = wikipedia.Page(wikipedia.Site("es", "wikipedia"),
                            u"Wikipedia:Zona de pruebas")
      newtext = page.get()
      for clave, valor in faltas.items():
          newtext = re.sub(clave, valor, newtext)
      page.put(newtext, u"Corrigiendo algunas faltas...")




E MILIO J. RODRÍGUEZ - N OELIA S ALES                     UCA
B OTS EN W IKIPEDIA
Q UINTO BOT


              Cosas que podríamos mejorar del corrector
              ortográfico:
                       Que muestre qué palabras va a corregir, y si no hay
                       falsos positivos, pulsar enter y guardar (bot
                       semiautomático)
                       Recorrer toda la wiki con un pagegenerator,
                       empezando por la A
                       Mejorar nuestro diccionario de faltas, y cargarlo
                       desde un fichero externo




E MILIO J. RODRÍGUEZ - N OELIA S ALES                                        UCA
B OTS EN W IKIPEDIA
E JEMPLOS DE BOTS FRECUENTES


      Algunos robots comunes:
              Interwikis
              Traslado de categorías
              Correctores ortográficos
              Desambiguadores




E MILIO J. RODRÍGUEZ - N OELIA S ALES   UCA
B OTS EN W IKIPEDIA
B OTS AVANZADOS

              Antivandalismo
                       En la española: AVBOT
                       En la inglesa: ClueBot
              Creación de artículos (botopedia)
                       Útiles (municipios): Rambot creó 30.000 municipios
                       de EEUU en la inglesa
                       Dudosos: asteroides...
              Actualización de datos
                       Cada año hay que actualizar cifras de población
                       según el INE


E MILIO J. RODRÍGUEZ - N OELIA S ALES                                       UCA
B OTS EN W IKIPEDIA
B UENAS PRÁCTICAS ( PARA FINALIZAR )


              Revisar los cambios
                       Casos no contemplados en el código provocan
                       ediciones erróneas
                       El usuario que lanza el bot es el único responsable
                       de lo que hace su bot
              Pedir permiso y alcanzar consenso
                       BotFlag: evita que los cambios salgan en la página
                       de cambios recientes y la inunden




E MILIO J. RODRÍGUEZ - N OELIA S ALES                                        UCA
B OTS EN W IKIPEDIA
WIKIPEDIA . OUTPUT ( U “F IN ”)




                                          ¿Dudas?
                                        ¿Reflexiones?

                            Gracias por su atención



E MILIO J. RODRÍGUEZ - N OELIA S ALES                  UCA
B OTS EN W IKIPEDIA
E STA PRESENTACIÓN ES LIBRE
      Copyright 2009 Emilio José Rodríguez Posada

      Este trabajo se publica bajo la siguiente licencia:
      Creative Commons Attribution-Share Alike License
      http://creativecommons.org/licenses/by-sa/2.5/

      Usted es libre de:
              copiar, distribuir y comunicar públicamente la obra
              hacer obras derivadas
      Bajo las condiciones siguientes:
       ATRIBUCIÓN Debes reconocer la autoría de la obra en los términos
                  especificados por el propio autor o licenciante.
      L ICENCIAMIENTO R ECÍPROCO Si alteras, transformas o creas una
                   obra a partir de esta obra, solo podrás distribuir la obra
                   resultante bajo una licencia igual a ésta.
E MILIO J. RODRÍGUEZ - N OELIA S ALES                                           UCA
B OTS EN W IKIPEDIA

Más contenido relacionado

Destacado

Temariointermedio
TemariointermedioTemariointermedio
Temariointermedio
erick
 
Presentación asefisa
Presentación asefisaPresentación asefisa
Presentación asefisa
victorabadia
 
Santiago del estero tierra de encuentros
Santiago del estero tierra de encuentrosSantiago del estero tierra de encuentros
Santiago del estero tierra de encuentros
celeyro
 
Cap a una comunitat d'aprenentatge
Cap a una comunitat d'aprenentatgeCap a una comunitat d'aprenentatge
Cap a una comunitat d'aprenentatge
Elisia fs
 

Destacado (20)

Internet
InternetInternet
Internet
 
Lady
LadyLady
Lady
 
Comegente
ComegenteComegente
Comegente
 
Robótica
RobóticaRobótica
Robótica
 
Temariointermedio
TemariointermedioTemariointermedio
Temariointermedio
 
Presentación asefisa
Presentación asefisaPresentación asefisa
Presentación asefisa
 
Exposicion Paul remy XV Simposio Internacional Peru 2021
Exposicion Paul remy  XV Simposio Internacional Peru 2021Exposicion Paul remy  XV Simposio Internacional Peru 2021
Exposicion Paul remy XV Simposio Internacional Peru 2021
 
Conociendo la computadora
Conociendo la computadoraConociendo la computadora
Conociendo la computadora
 
Santiago del estero tierra de encuentros
Santiago del estero tierra de encuentrosSantiago del estero tierra de encuentros
Santiago del estero tierra de encuentros
 
Anteproecto anghy
Anteproecto anghyAnteproecto anghy
Anteproecto anghy
 
Propiedades
PropiedadesPropiedades
Propiedades
 
Asistente de fiscal
Asistente de fiscalAsistente de fiscal
Asistente de fiscal
 
Exposicion Reintje van Haeringen, SNV
Exposicion Reintje van Haeringen, SNVExposicion Reintje van Haeringen, SNV
Exposicion Reintje van Haeringen, SNV
 
Encuentro en México 2010
Encuentro en México 2010Encuentro en México 2010
Encuentro en México 2010
 
Presentación1
Presentación1Presentación1
Presentación1
 
Hijospreferidos
HijospreferidosHijospreferidos
Hijospreferidos
 
Cap a una comunitat d'aprenentatge
Cap a una comunitat d'aprenentatgeCap a una comunitat d'aprenentatge
Cap a una comunitat d'aprenentatge
 
Orientaciones iniciales primera actividad moodle2
Orientaciones iniciales primera actividad moodle2Orientaciones iniciales primera actividad moodle2
Orientaciones iniciales primera actividad moodle2
 
Dubai
Dubai Dubai
Dubai
 
Mentefacto conceptual
Mentefacto conceptualMentefacto conceptual
Mentefacto conceptual
 

Similar a Bots en Wikipedia: Introducción a pywikipediabot

David diaz.. creacion de wikispace
David diaz.. creacion de wikispaceDavid diaz.. creacion de wikispace
David diaz.. creacion de wikispace
David29Diaz
 
Introducción a la tecnología WIKI
Introducción a la tecnología WIKIIntroducción a la tecnología WIKI
Introducción a la tecnología WIKI
seminario2.0
 
Adell Wikis Mec
Adell Wikis MecAdell Wikis Mec
Adell Wikis Mec
web20curso
 
Taller 3: wikis
Taller 3: wikisTaller 3: wikis
Taller 3: wikis
Alciavila
 
VíNculos , Multimedia Y PublicacióN De Diapositivas
VíNculos , Multimedia Y PublicacióN De DiapositivasVíNculos , Multimedia Y PublicacióN De Diapositivas
VíNculos , Multimedia Y PublicacióN De Diapositivas
lexvato
 

Similar a Bots en Wikipedia: Introducción a pywikipediabot (19)

Web 2.0 Diapositivas
Web 2.0 DiapositivasWeb 2.0 Diapositivas
Web 2.0 Diapositivas
 
Qué Es Un Wiki
Qué Es Un WikiQué Es Un Wiki
Qué Es Un Wiki
 
David diaz.. creacion de wikispace
David diaz.. creacion de wikispaceDavid diaz.. creacion de wikispace
David diaz.. creacion de wikispace
 
Introducción a la tecnología WIKI
Introducción a la tecnología WIKIIntroducción a la tecnología WIKI
Introducción a la tecnología WIKI
 
laboratorio
laboratoriolaboratorio
laboratorio
 
Adell Wikis Mec
Adell Wikis MecAdell Wikis Mec
Adell Wikis Mec
 
Herramientas tecnologicas
Herramientas tecnologicasHerramientas tecnologicas
Herramientas tecnologicas
 
Herramientas tecnologicas2
Herramientas tecnologicas2Herramientas tecnologicas2
Herramientas tecnologicas2
 
Miguel cancelas robles 4ºc Que mas tengo que poner?
Miguel cancelas robles 4ºc Que mas tengo que poner?Miguel cancelas robles 4ºc Que mas tengo que poner?
Miguel cancelas robles 4ºc Que mas tengo que poner?
 
Wiki
WikiWiki
Wiki
 
Conferencia sobre la Web 2.0
Conferencia sobre la Web 2.0Conferencia sobre la Web 2.0
Conferencia sobre la Web 2.0
 
Wikis
WikisWikis
Wikis
 
Wiki Vero
Wiki VeroWiki Vero
Wiki Vero
 
¿Qué es un wiki?
¿Qué es un wiki?¿Qué es un wiki?
¿Qué es un wiki?
 
Un paseo por wikidata
Un paseo por wikidataUn paseo por wikidata
Un paseo por wikidata
 
Taller 3: wikis
Taller 3: wikisTaller 3: wikis
Taller 3: wikis
 
Que es una wiki
Que es una wikiQue es una wiki
Que es una wiki
 
VíNculos , Multimedia Y PublicacióN De Diapositivas
VíNculos , Multimedia Y PublicacióN De DiapositivasVíNculos , Multimedia Y PublicacióN De Diapositivas
VíNculos , Multimedia Y PublicacióN De Diapositivas
 
Web20edu
Web20eduWeb20edu
Web20edu
 

Último

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 

Último (11)

PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 

Bots en Wikipedia: Introducción a pywikipediabot

  • 1. B OTS EN W IKIPEDIA I NTRODUCCIÓN A pywikipediabot Emilio José Rodríguez Posada Noelia Sales Montes Universidad de Cádiz 2010 E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 2. Q UÉ DEBERÍAS SABER Algo de Python Algo sobre edición de wikis (MediaWiki) Funcionamiento de una comunidad wiki Consenso antes de hacer miles de cambios Sin consenso quizás haya que deshacerlo todo Doble trabajo Sopesar si el bot será rentable Hay tareas que no pueden automatizarse bien ¿Tasa aciertos >>>> tasa fallos? Entonces vale E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 3. ¿Q UÉ ES UN BOT ? Un programa que hace muchos cambios, que sería tedioso hacer a mano Pueden ser: Totalmente automáticos Aún así conviene verificar los cambios Pidan confirmación antes de actuar Son más lentos pero más seguros Ideales para pocos cambios (<1000) y que éstos sean peligrosos de automatizar E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 4. ¿Q UÉ ES pywikipediabot? Es un framework Conjunto de funciones que permiten modificar páginas MediaWiki Ha alcanzado madurez Es el principal framework que se usa en Wikipedia Está hecho en Python Es software libre E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 5. I NSTALANDO pywikipediabot Supongo que estamos en Linux: Web: http://pywikipediabot.sourceforge.net/ Instalación: > svn co http://svn.wikimedia.org/svn root/pywikipedia/trunk/pywikipedia Preferencias: Crear user-config.py Ejecutar > python interwiki.py (y rellenar los datos) Primera ejecución: Ahora sí > python interwiki.py A E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 6. F UNCIONES BÁSICAS (I) Primeras funciones... wikipedia.Site(): Constructor de sitio site = wikipedia.Site("es", "wikipedia") wikipedia.Page(): Constructor de página page = wikipedia.Page(site, u"Universidad de Cádiz") page.title(): Devuelve el título de la página wtitle = page.title() page.get(): Devuelve el contenido de la página wtext = page.get() page.put(): Modifica el contenido page.put(newtext, u"BOT - Arreglando lo que sea...") E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 7. P RIMER BOT Crear un objeto página para el artículo “Universidad de Cádiz”, imprimir por pantalla su título y su contenido. Pistas: Para usar las funciones hay que importarlas import wikipedia Usar constructor de sitio y de página Capturar título en una variable (page.title()) Capturar texto en una variable (page.get()) Imprimir ambas variables por consola E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 8. P RIMER BOT Crear un objeto página para el artículo “Universidad de Cádiz”, imprimir por pantalla su título y su contenido. Pistas: Para usar las funciones hay que importarlas import wikipedia Usar constructor de sitio y de página Capturar título en una variable (page.title()) Capturar texto en una variable (page.get()) Imprimir ambas variables por consola E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 9. P RIMER BOT # -*- coding: utf-8 -*- import wikipedia site = wikipedia.Site("es", "wikipedia") page = wikipedia.Page(site, u"Universidad de Cádiz") wtitle = page.title() wtext = page.get() wikipedia.output(u"Título: %s" % wtitle) wikipedia.output(u"Texto: %s" % wtext) E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 10. F UNCIONES BÁSICAS (II) Más funciones básicas... page.exists(): Comprueba si existe el artículo al que “page” apunta page.isRedirectPage(): Comprueba si es redirección page.isDisambig(): Comprueba si es desambiguación E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 11. S EGUNDO BOT Cargar la página “Universidad de Cadiz” (ojo, sin acento), devolver su título, comprobar si es una redirección, y mostrar su contenido. Pistas: Las redirecciones son “páginas especiales”. Su contenido se carga con page.get(), pero pasándole la variable get_redirect=True. E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 12. S EGUNDO BOT Cargar la página “Universidad de Cadiz” (ojo, sin acento), devolver su título, comprobar si es una redirección, y mostrar su contenido. Pistas: Las redirecciones son “páginas especiales”. Su contenido se carga con page.get(), pero pasándole la variable get_redirect=True. E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 13. S EGUNDO BOT # -*- coding: utf-8 -*- import wikipedia site = wikipedia.Site("es", "wikipedia") page = wikipedia.Page(site, u"Universidad de Cadiz") wtitle = page.title() esredirect = page.isRedirectPage() wtext = page.get(get_redirect=True) wikipedia.output(u"Título: %s" % wtitle) wikipedia.output(u"Es redirección? %s" % esredirect) wikipedia.output(u"Texto: %s" % wtext) E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 14. F UNCIONES BÁSICAS (III) page.interwiki(): Devuelve los interwikis page.categories(): Devuelve las categorías page.linkedPages(): Devuelve los [[enlaces]] page.imagelinks(): Devuelve las imágenes Todas estas funciones devuelven listas de objetos Page E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 15. T ERCER BOT Para “Universidad de Cádiz”, mostrar los títulos de las categorías, el número de enlaces y número de interwikis. Pistas: Es posible recorrer con un bucle for page.categories() ¡Es una lista! La longitud de una lista puede saberse con: len(lista) E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 16. T ERCER BOT Para “Universidad de Cádiz”, mostrar los títulos de las categorías, el número de enlaces y número de interwikis. Pistas: Es posible recorrer con un bucle for page.categories() ¡Es una lista! La longitud de una lista puede saberse con: len(lista) E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 17. T ERCER BOT # -*- coding: utf-8 -*- import wikipedia site = wikipedia.Site("es", "wikipedia") page = wikipedia.Page(site, u"Universidad de Cádiz") wtitle = page.title() wikipedia.output(u"Título: %s" % wtitle) for cat in page.categories(): wikipedia.output(cat.title()) wikipedia.output(u"No. enlaces: %d" % len(page.linkedPages())) wikipedia.output(u"No. interwikis: %d" % len(page.interwiki())) E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 18. PAGEGENERATORS Quizás nos interese recorrer todos los artículos de Wikipedia o una parte... Lo conseguimos con los pagegenerators: Importamos el módulo pagegenerators: import pagegenerators Hacemos: gen = pagegenerators.AllpagesPageGenerator(start=u“A”) Si no queremos analizar redirecciones, le pasamos el parámetro: includeredirects=False Precargamos el pagegenerator que hemos creado: preload = pagegenerators.PreloadingGenerator(gen) E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 19. C UARTO BOT Calcular la media en KiloBytes de los primeros 100 artículos, a partir del comienzo “Be”. Pistas: Crear un pagegenerator pasándole el parámetro start=u“Be” Evitamos cargar redirecciones Ir acumulando los tamaños de los artículos: len(page.get()) E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 20. C UARTO BOT Calcular la media en KiloBytes de los primeros 100 artículos, a partir del comienzo “Be”. Pistas: Crear un pagegenerator pasándole el parámetro start=u“Be” Evitamos cargar redirecciones Ir acumulando los tamaños de los artículos: len(page.get()) E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 21. C UARTO BOT # -*- coding: utf-8 -*- import wikipedia, pagegenerators gen = pagegenerators.AllpagesPageGenerator(start=u"Be", includeredirects=False) preload = pagegenerators.PreloadingGenerator(gen) media = 0.0 cont = 0 limite = 100 for page in preload: if cont == limite: break media += len(page.get()) cont += 1 media = (media/1024)/limite wikipedia.output(u"La media es: %.2f KB" % media) E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 22. Q UINTO BOT Hacer un corrector ortográfico: que cambie ortográfico “avion” por “avión” y otras faltas que se os ocurran. Pistas: Usar una estructura dictionary para almacenar los pares de valores: faltas={u“avion”:u“avión”, ...} Recorrer el diccionario con un bucle: for clave, valor in faltas.items(): Haciendo la sustitución en el texto así: re.sub(clave, valor, textoarticulo) ¡Importar módulo re! E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 23. Q UINTO BOT Hacer un corrector ortográfico: que cambie ortográfico “avion” por “avión” y otras faltas que se os ocurran. Pistas: Usar una estructura dictionary para almacenar los pares de valores: faltas={u“avion”:u“avión”, ...} Recorrer el diccionario con un bucle: for clave, valor in faltas.items(): Haciendo la sustitución en el texto así: re.sub(clave, valor, textoarticulo) ¡Importar módulo re! E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 24. Q UINTO BOT # -*- coding: utf-8 -*- import wikipedia, re faltas = {u"avion":u"avión", u"dificil":u"difícil"} page = wikipedia.Page(wikipedia.Site("es", "wikipedia"), u"Wikipedia:Zona de pruebas") newtext = page.get() for clave, valor in faltas.items(): newtext = re.sub(clave, valor, newtext) page.put(newtext, u"Corrigiendo algunas faltas...") E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 25. Q UINTO BOT Cosas que podríamos mejorar del corrector ortográfico: Que muestre qué palabras va a corregir, y si no hay falsos positivos, pulsar enter y guardar (bot semiautomático) Recorrer toda la wiki con un pagegenerator, empezando por la A Mejorar nuestro diccionario de faltas, y cargarlo desde un fichero externo E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 26. E JEMPLOS DE BOTS FRECUENTES Algunos robots comunes: Interwikis Traslado de categorías Correctores ortográficos Desambiguadores E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 27. B OTS AVANZADOS Antivandalismo En la española: AVBOT En la inglesa: ClueBot Creación de artículos (botopedia) Útiles (municipios): Rambot creó 30.000 municipios de EEUU en la inglesa Dudosos: asteroides... Actualización de datos Cada año hay que actualizar cifras de población según el INE E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 28. B UENAS PRÁCTICAS ( PARA FINALIZAR ) Revisar los cambios Casos no contemplados en el código provocan ediciones erróneas El usuario que lanza el bot es el único responsable de lo que hace su bot Pedir permiso y alcanzar consenso BotFlag: evita que los cambios salgan en la página de cambios recientes y la inunden E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 29. WIKIPEDIA . OUTPUT ( U “F IN ”) ¿Dudas? ¿Reflexiones? Gracias por su atención E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA
  • 30. E STA PRESENTACIÓN ES LIBRE Copyright 2009 Emilio José Rodríguez Posada Este trabajo se publica bajo la siguiente licencia: Creative Commons Attribution-Share Alike License http://creativecommons.org/licenses/by-sa/2.5/ Usted es libre de: copiar, distribuir y comunicar públicamente la obra hacer obras derivadas Bajo las condiciones siguientes: ATRIBUCIÓN Debes reconocer la autoría de la obra en los términos especificados por el propio autor o licenciante. L ICENCIAMIENTO R ECÍPROCO Si alteras, transformas o creas una obra a partir de esta obra, solo podrás distribuir la obra resultante bajo una licencia igual a ésta. E MILIO J. RODRÍGUEZ - N OELIA S ALES UCA B OTS EN W IKIPEDIA