Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
B OTS EN W IKIPEDIA
                  I NTRODUCCIÓN A pywikipediabot

                               Emilio José Rodríguez...
Q UÉ DEBERÍAS SABER


              Algo de Python
              Algo sobre edición de wikis (MediaWiki)
              Fun...
¿Q UÉ ES UN BOT ?


              Un programa que hace muchos cambios, que sería
              tedioso hacer a mano
      ...
¿Q UÉ ES pywikipediabot?


              Es un framework
                       Conjunto de funciones que permiten modifica...
I NSTALANDO pywikipediabot
      Supongo que estamos en Linux:
              Web: http://pywikipediabot.sourceforge.net/
 ...
F UNCIONES BÁSICAS (I)

      Primeras funciones...
              wikipedia.Site(): Constructor de sitio
              sit...
P RIMER BOT

              Crear un objeto página para el artículo
              “Universidad de Cádiz”, imprimir por pant...
P RIMER BOT

              Crear un objeto página para el artículo
              “Universidad de Cádiz”, imprimir por pant...
P RIMER BOT


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

      site = wikipedia.Site("es", "wikipedia")
      p...
F UNCIONES BÁSICAS (II)


      Más funciones básicas...
              page.exists(): Comprueba si existe el artículo al
 ...
S EGUNDO BOT


              Cargar la página “Universidad de Cadiz” (ojo, sin
              acento), devolver su título, ...
S EGUNDO BOT


              Cargar la página “Universidad de Cadiz” (ojo, sin
              acento), devolver su título, ...
S EGUNDO BOT


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

      site = wikipedia.Site("es", "wikipedia")
      ...
F UNCIONES BÁSICAS (III)



              page.interwiki(): Devuelve los interwikis
              page.categories(): Devue...
T ERCER BOT


              Para “Universidad de Cádiz”, mostrar los títulos
              de las categorías, el número de...
T ERCER BOT


              Para “Universidad de Cádiz”, mostrar los títulos
              de las categorías, el número de...
T ERCER BOT

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

      site = wikipedia.Site("es", "wikipedia")
      pa...
PAGEGENERATORS
      Quizás nos interese recorrer todos los artículos de
      Wikipedia o una parte...
      Lo conseguim...
C UARTO BOT


              Calcular la media en KiloBytes de los primeros
              100 artículos, a partir del comie...
C UARTO BOT


              Calcular la media en KiloBytes de los primeros
              100 artículos, a partir del comie...
C UARTO BOT
      # -*- coding: utf-8 -*-
      import wikipedia, pagegenerators

      gen = pagegenerators.AllpagesPageG...
Q UINTO BOT

              Hacer un corrector ortográfico: que cambie
              ortográfico “avion” por “avión” y otras ...
Q UINTO BOT

              Hacer un corrector ortográfico: que cambie
              ortográfico “avion” por “avión” y otras ...
Q UINTO BOT


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

      faltas = {u"avion":u"avión", u"dificil":u"di...
Q UINTO BOT


              Cosas que podríamos mejorar del corrector
              ortográfico:
                       Que...
E JEMPLOS DE BOTS FRECUENTES


      Algunos robots comunes:
              Interwikis
              Traslado de categorías...
B OTS AVANZADOS

              Antivandalismo
                       En la española: AVBOT
                       En la in...
B UENAS PRÁCTICAS ( PARA FINALIZAR )


              Revisar los cambios
                       Casos no contemplados en e...
WIKIPEDIA . OUTPUT ( U “F IN ”)




                                          ¿Dudas?
                                    ...
E STA PRESENTACIÓN ES LIBRE
      Copyright 2009 Emilio José Rodríguez Posada

      Este trabajo se publica bajo la sigui...
Upcoming SlideShare
Loading in …5
×

Bots en Wikipedia: Introducción a pywikipediabot

0 views

Published on

Bots en Wikipedia: Introducción a pywikipediabot. ¿Cómo hacer bots para Wikipedia o tu wiki propio?

Licencia CC-BY-SA.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Bots en Wikipedia: Introducción a pywikipediabot

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

×