Saltar para: Posts [1], Pesquisa [2]

Bits & Bots

Robôs e pedaços de bits do planeta wikimédia e arredores.

Bits & Bots

Robôs e pedaços de bits do planeta wikimédia e arredores.

"Por Jnvalves (Obra do próprio) [CC BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0)], undefined" href="https://commons.wikimedia.org/wiki/File%3AO_Fanal%2C_Ilha_da_Madeira%2C_Portugal.jpg">

Presidenciais 2016 em Portugal na Wikipédia

por Alchimista, em 26.01.16

    Este último fim de semana decorreram as eleições Presidenciais em Portugal, e conforme a tradição, o que foi escrito ao longo do período de pré-campanha nas páginas da wiki tiveram relevo. Dai surgiu a curiosidade de tentar perceber o efeito eleições <-> wikipédia, e neste primeiro tópico começo a debruçar-me sobre as visualizações, aproveitando a nova API RESTBase que fornece os dados das visualizações dos artigos, de uma forma mais aperfeiçoada em relação à ferramenta que aparece no histórico das páginas, o http://stats.grok.se/.

 

    Os primeiros dados são interessantes, começando a análise a 10 de Outubro do ano passado temos o gráfico seguinte:

 Visualização das visitas às páginas dos candidatos à Presidência da República durante o período eleitoral e pré-eleitoral.

Por Alchimista (Obra do próprio) [CC BY-SA 4.0 (http://creativecommons.org/licenses/by-sa/4.0 )], undefined. Origem: https://commons.wikimedia.org/wiki/File:P2016_2m.png

 Nos primeiros dias ainda se apanha um pouco da entorpia causada pelas eleições,com as visualizações a estabilizarem até meio de Dezembro, e a partir dessa altura temos outra vizualização mais pormenorizada na figura seguinte.

 

     Visualização das visitas às páginas dos candidatos à Presidência da República durante o período eleitoral.

Por Alchimista (Obra do próprio) [CC BY-SA 4.0 (http://creativecommons.org/licenses/by-sa/4.0 )],  undefined. Origem: https://commons.wikimedia.org/wiki/File:P2016_2m.png

    O primeiro grande pico de visualizações ocorreu pelo dia 17, curiosamente no dia em que Marisa Matias formaliza a candidatura há o referido pico, onde Sampaio da Nóvoa tem grande destaque. Na sema seguinte, logo nos dias posteriores ao Natal Marisa Matias e Sampaio da Nóvoa têm mais um pico de visualizações, com Marisa Matias a destacar-se com o dobro das visualizações, que vão acalmando com o aproximar da passagem de ano. Sobressai igualmente que no periodo de campanha eleitoral, a visualização dos candidatos aumentou significativamente, com as visualizações de Sampaio da Nóvoa em grande destaque.

    Curiosamente o artigo sobre Marcelo Rebelo de Sousa, que acabou por vencer as presidenciais, apresentou valores de vizualizações muito discretas comparando com os outros candidatos mais mediáticos, e o artigo de Maria de Belém teve valores de visualizações discretos. Esta disparidade pode dever-se à maior ou menor penetração nas faixas mais jovens, onde a internet tem um papel mais preponderante, mas é algo difícil de comprovar.

    Edgar Silva formalizou a sua candidatura no dia 7 de dezembro de 2015, e a sua página foi criada somente 3 dias depois. Até ao dia 10 de Dezembro de 2015, a página Edgar Silva era um redirecionamento para  Edgar Bruno Silva, "um futebolista brasileiro que actua como atacante, atualmente defende o Al Shabab Al Arabi Club."

 

[Notas técnicas: Jorge Sequeira e Cândido Ferreira, ambos candidatos, não surgem na análise por até à data não terem artigo da wikipédia.

    A análise aqui feita é uma primeira abordagem e baseia-se em dados publicos disponibilizados pela Fundação Wikimédia relativa aos artigos. ]

Tutorial de pywikipediabot - IV

por Alchimista, em 18.01.13

No wikivoyage.org houve necessidade de mover uma enorme quantidade de páginas que estavam no formato "JAMGuides:" para "Wikivoyage:", não deixando para trás redirecionamentos, algo que se revelou extremamente simples. O pormenor foi a flag temporária de administrador que o bot recebeu, para poder não deixar redirecionamentos, pois isso é basicamente uma eliminação automática dos mesmos. Como o projecto tem ainda poucas páginas, e era uma operação básica, a listagem das páginas foi obtida pela lista de páginas totais no domínio principal, caso contrário teria de ser usada uma outra opção, e, além do mais, a opção mais lógica, que é a busca por páginas começadas por uma determinada string não estava a funcionar correctamente, portanto seguiu-se esta via. O script em sí é básico, e creio, facilmente entendível:

  

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import wikipedia as pywikibot
import pagegenerators


def main():

    # Definir o site, e obter a listagem de todas as páginas do domínio principal.
    site = pywikibot.getSite("pt","wikivoyage")
    gen = pagegenerators.AllpagesPageGenerator(site=site,includeredirects=False)
    for i in gen:

        # Aqui filtramos os títulos que começam por "JAMGuides", separando primeiro

        # o título tendo por base o ":", e, caso tenha o ":", verificar se antes da ocorrência

        # o texto é "JAMGuides".
        if i.title().split(":")[0] == u'JAMGuides':

            # Criação do novo título, a segunda parte é igual, logo compõem-se o novo título fácilmente
            ntitle = u"Wikivoyage:%s" % i.title().split(":")[1]
            print u"old title: ", i.title(), u" |--->  new title: ", ntitle, u" |--> afluentes: "
            try:

                # E por fim move-se a página para o novo título.
                i.move(ntitle, leaveRedirect=False, reason=u"[[Wikivoyage:BOT|BOT]]: A mover páginas para título correcto.")
            except:
                print u"error"
        else:
            pass

if __name__ == "__main__":
    try:
        main()
    finally:
        pywikibot.stopme() 

https://github.com/alchimista/pywikipedia-tutorial

 

 


Tutorial de pywikipediabot - III

por Alchimista, em 20.09.12

Neste tópico abordaremos outras funcionalidades interessantes do pywikipediabot, nomeadamente a obtenção no namespace de uma página, quer no formato numérico, quer no nome do namespace. Veremos igualmente como obter o título da página principal, ou seja, por exemplo no caso wikipedia:Ajuda/edição, obter wikipedia:Ajuda, ou então somente Ajuda. Há outras formas de filtrar os artigos, por exemplo, se apenas pretendesse-mos os artigos do domínio wikipéda da categoria !Robótica, o módulo pagegenerators tem opções para isso, mas para já, iremos aumentando a complexidade aos poucos.

 

Informação sobre os namespaces pode ser encontrada em Mediawiki.org:Manual:Namespaces, ou Mediawiki.org:Namespaces. Nos projectos locais é frequente usarem para além dos namespaces padrão, formas personalisadas, e, na wikipédia Lusófona por exemplo, a documentação pode ser encontrada em Wikipédia:Domínio.

 

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#	   
#	   (C) 2012 Alchimista <alchimistawp@gmail.com>
#		 
#		Distributed under the terms of the GNU GPL license.

import sys, os

import wikipedia
import catlib
import pagegenerators

def main():
	site = wikipedia.Site("pt", "wikipedia")
	cat = catlib.Category(site, u"!Robótica")
	''' Como explicado anteriormente, temos definido o site e a categoria
		podendo então passar-mos a obter a listagem das páginas,
		onde desta vez usaremos o pagegenerators. Uma opção mais rápida será
		usar igualmente o preloadingGen, bastando para isso
		fazer algo como 
		pages = pagegenerators.PreloadingGenerator(pagegenerators.CategorizedPageGenerator(cat))
		Isto faz com que as páginas sejam carregadas no início, ao contrário
		do script actual, que carrega à medida que forem necessárias. 
	'''
	pages = pagegenerators.CategorizedPageGenerator(cat)
	for page in pages:
		'''Agora que temos a iteração vamos primeiro obter o título
		'''
		print page.title()
		
		''' Com o page.namespace() obtemos o namespace da página
			embora no formato canonico, ou seja, número. Para obter
			o nome do namespace, fazemos o site.namespace().
			Para fazer tudo junto, basta substituir as duas linhas por
			namespace = site.namespace(page.namespace())
		'''
		
		pageNamespaceNumber = page.namespace()
		namespace = site.namespace(pageNamespaceNumber)
		if namespace == u"Ajuda":
			''' Aqui filtramos as páginas que pertencem ao namespace Ajuda
				e obteremos o nome do namespace, assim como as predefinições
				contidas nas páginas. '''
			print len(page.get())
			print u"namespace: ", site.namespace(page.namespace())
			print u"templates: ", page.templates()
		elif namespace == u"Wikipédia":
			''' Neste bloco, apenas os artigos do namespace wikipédia são filtrados,
				e obteremos o namespage e o título do artigo, sem namespace ou subpáginas
				(resumidamente, o título do artigo principal)
			'''
			print u"namespace: ", site.namespace(page.namespace())
			print u"Página principal (título sem subpágina): ", page.sectionFreeTitle()
			print u"Página principal sem título nem namespace: ", page.title(withNamespace=False)
			
			
if __name__ == "__main__":
	try:
		main()
	finally:
		wikipedia.stopme()	

https://github.com/alchimista/pywikipedia-tutorial 

Tutorial de pywikipediabot - II

por Alchimista, em 19.09.12

 

No primeiro post vimos como de uma forma básica se pode obter o conteúdo de uma página. Infelizmente, na sua utilização tradicional, os bots são utilizados para edições massiças, ou então para obter informação de um grande número de páginas pelo que o script anterior não nos seve, então vamos interagir com categorias. Há um pormenor importante a realçar: caso se trate de obter informação de um grande número de páginas, é extremamente aconselhado usar dumps, que podem ser obtidos em http://dumps.wikimedia.org/,por exemplo. Mais informação pode ser obtida em Meta:Data dumps.

 

No script seguinte, contaremos os artigos de uma categoria. Obteremos o título dos artigos, e contaremos os elementos. Relativamente ao script do primeiro post, o código ficará dentro de uma definição ( def main()) para tirar-mos vantagem do wikipedia.stopme(), que basicamente informa o servidor de que o script fez o seu trabalho, interrompendo a ligação.

 

 

 #!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#	   
#	   (C) 2012 Alchimista <alchimistawp@gmail.com>
#		 
#		Distributed under the terms of the GNU GPL license.

import sys, os

import wikipedia
import catlib
import pagegenerators

def main():
	''' Esta é a def onde o nosso script vai estar '''
	
	site = wikipedia.Site("pt", "wikipedia") # definimos que o site é a pt.wp
	
	'''De seguida, definimos a categoria Ambiente
	 e obtemos a listagem dos títulos dos artigos.
	 Na demonstração o código está por extenso para
	 mais fácil percepção, na prática, bastaria
	 pages = catlib.Category(site, u"Ambiente").articles()
	 para se obter a listagem	  
	'''
	cat = catlib.Category(site, u"Ambiente") # Aqui definimos a categoria Ambiente. 
	catList = cat.articlesList()


	'''Agora que temos uma listagem,
	 e antes de contar os elementos,
	 vamos ver os títulos que constam na catList.
	 
	 Esta abordagem serve bem para ilustrar este exemplo,
	 caso fosse para interagir directamente com os artigos,
	 como veremos noutro post, há abordagens mais eficientes.
 
	 O primeiro print, ou seja, no caso o objecto page,
	 é um objecto python, enquanto que o segundo print,
	 o do page.title(), já tem o formato de unicode.
	'''
	
	for page in catList:
		print u"página (objecto):", page
		print u"Título da página: ", page.title() # mostra o título do artigo


	''' Por fim, fazemos a contagem dos artigos	'''
	
	print u"\n Nº de artigos na categoria: ", len(catList)
	
if __name__ == "__main__":
	try:
		main()
	finally:
		wikipedia.stopme()	

https://github.com/alchimista/pywikipedia-tutorial

Tutorial de pywikipediabot - I

por Alchimista, em 19.09.12

Não há muitos developers de bots na pt.wp, na verdade, contam-se pelos dedos das mãos aqueles que criam regularmente scripts próprios. A verdade é que nunca houve um grupo activo dedicado ao pywp, contrariamente por exemplo, ao que acontece com os gadjects, ou scripts em javascript.

 

Com isso em mente, há há agum tempo que planeio criar um tutorial para que os primeiros passos sejam mais fáceis, pois a verdade é que não há propriamente um ponto de partida que contenha informação suficientemente desenvolvida para que possa ser um verdadeiro manual introdutório. Enquanto não arranjo tempo e vontade para escrever um manual explicativo e bem estruturado, espero ir colocando aqui informações avulsas que possam ajudar, e, quem sabe, no final compilar tudo num tutorial final, na wikipédia.

 

Pois bem, o primeiro exemplo de um script pywp terá como finalidade colocar um texto numa página da wikipédia. Estes primeiros passos vão ser explicados com mais detalhe, porque a verdade é que na esmagadora maioria dos meus scripts, o pywp ocupa apenas uma pequena parte, e é sensivelmente sempre a mesma, ou seja, para as tarefas do quotidiano, conhecer meia dúzia de classes e definições é quanto baste para criar scripts úteis no dia a dia wikipédico.

 

No script seguinte, vamos obter o texto de Wikipédia:Página de testes/4  e substitui-lo por "Olá Mundo! Isto é um teste de edição :D". Presume-se que tenham conhecimentos básicos de python, caso haja dificuldade em compreender algo, a secção de comentários está á disposição.

 

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#       
#       (C) 2012 Alchimista <alchimistawp@gmail.com>
#         
#        Distributed under the terms of the GNU GPL license.

import sys, os

try:
	sys.path.append(os.environ['HOME'] + '/wp/bots/pywikipedia')
except:
	pass

''' 
 Primeiro importamos o módulo wikipedia, o qual nos trará as soluções mais básicas,
 e ao mesmo tempo grande parte das que normalmente são necessárias para interagir com
 o mediawiki. '''

import wikipedia

''' O primeiro passo antes de interagir com a API do mediawiki, é definir
qual o projecto/site com que estamos a lidar, para isso usamos:
'''
site= wikipedia.Site("pt", "wikipedia") # definimos que o site é a pt.wp

''' Agora, vamos estabelecer as definições de uma página, neste caso,
 a página de testes/4: '''

wpage = wikipedia.Page(site, u"wikipédia:Página de testes/4")

''' Agora que definimos a página, vamos obter o texto da página: '''
wpagetext = wpage.get()

print wpagetext # print ao conteúdo da página

''' Tendo o conteúdo, e ignorando-o por completo, vamos então substituir
 por um novo texto.
'''
newtext = u"Olá Mundo! Isto é um teste de edição :D" # definimos o novo texto

wikipedia.showDiff(wpagetext, newtext) # mostra o diferencial da edição sem salvar

Aleth Bot no top 10 de bots com mais edições da Wikipédia Lusófona

por Alchimista, em 02.06.12

Recentemente constactei uma agradável surpresa, a Aleth_Bot encontra-se já listada no top 10 dos bots com mais edições de sempre da Wikipédia Lusófona, e se tiver-mos em conta bots operados por operadores locais, está em 4º Lugar.

 

A lista é liderada pelo Rei-Bot, que apesar de não editar desde Setembro de 2010, conta com 1137298 edições, e é operado pelo Rei Artur. Tanto o bot como o operador sã figuras mais do que históricas, autênticas lendas vivas.

 

No que toca à Aleth, são 356797 edições repartidas por várias tarefas, todas elas efectuadas por scripts desenvolvidos específicamente para a pt.wp, e que rodam de forma totalmente autónoma no Toolserver, aproveitando os recurosos disponibilizados, especialmente os de Job scheduling. Para se ter noção da relativa complexidade de manutenção, para além da manutenção dos scripts, são dois crontabs, um para fazer correr os scripts de curta duração como o envio de mensagens ou arquivamento de páginas de discução, que corre num servidor normal, e outro crontab para controlar os scripts que irão correr por largos períodos, dias e afins.

 

Para estes scripts que necessitam correr por longos periodos, há um server próprio, que irá escolher qual o servidor com recursos disponíveis que irá acolher o script. Além disso, há sempre a necessidade de manter o consumo de recursos em níveis aceitáveis, manter o consumo de memória baixo, ou os mesmos irão parar ou apresentar erros, ou a memória física disponível.

Wiki(pédia) depois da edição básica – robôs e semântica

por Alchimista, em 17.04.12

 

 

 

Como juntar a Wikipédia, web semántica, data mining e robôs numa única apresentação? Exacto, estou a falar da apresentação do Eduardo Pinheiro no Encontro Nacional de Estudantes de Informática, na Faculdade de Ciências da Universidade de Lisboa. Link aqui!

Morre um dos criadores do UNIX

por Alchimista, em 13.10.11

From Wikimedia Commons

  

Falece Dennis Ritchie, um dos criadores do sistema operativo UNIX, e posteriormente da liguagem de programação C.

Software produz texto sem intervenção humana

por Alchimista, em 14.09.11
origem: wikimedia commons

 

 

 

Hoje a imprensa faz eco de uma empresa que desenvolveu um software inovador, capaz de produzir textos sem intervenção humana. À primeira vista algo de extraordinário, mas na verdade algo já com larga tradição no mundo Wikipédico. Na versão Lusófona por exemplo, em 2004, um bot de seu nome Borg criou vários artigos de cidades brasileiras, ou ainda o PCM. Apesar de pouca informação disponível sobre a façanha actual, aparentemente as diferenças entre o que se usa nos projectos wikimedia e o novo software, são basicamente de ordem mais técnica. Nos bots usados na wikipédia, a informação deve estar previamente estruturada, para que o esforço se concentre mais na criação do artigo em si, enquanto o novo software não tem necessidade desse pré-tratamento. Nada de anormal, afinal, se formos ver, o procedimento tem já uma história de mais de 5 anos na wikipédia, desenvolvido por voluntários, mas não deixa de ser interessante verificar como algo que pode ser considerado banal na wikipédia atinge proporções mediáticas desta magnitude.

 

Eficiência enerética dos computadores duplica a cada 18 meses

por Alchimista, em 14.09.11

The conclusion, backed up by six decades of data, mirrors Moore's law, the observation from Intel founder Gordon Moore that computer processing power doubles about every 18 months. But the power-consumption trend might have even greater relevance than Moore's law as battery-powered devices—phones, tablets, and sensors—proliferate.

 

Vale a pena ler o resto do artigo em http://www.technologyreview.com/computing/38548/?p1=A1

Mais sobre mim

foto do autor

Arquivo

  1. 2016
  2. J
  3. F
  4. M
  5. A
  6. M
  7. J
  8. J
  9. A
  10. S
  11. O
  12. N
  13. D
  14. 2015
  15. J
  16. F
  17. M
  18. A
  19. M
  20. J
  21. J
  22. A
  23. S
  24. O
  25. N
  26. D
  27. 2014
  28. J
  29. F
  30. M
  31. A
  32. M
  33. J
  34. J
  35. A
  36. S
  37. O
  38. N
  39. D
  40. 2013
  41. J
  42. F
  43. M
  44. A
  45. M
  46. J
  47. J
  48. A
  49. S
  50. O
  51. N
  52. D
  53. 2012
  54. J
  55. F
  56. M
  57. A
  58. M
  59. J
  60. J
  61. A
  62. S
  63. O
  64. N
  65. D
  66. 2011
  67. J
  68. F
  69. M
  70. A
  71. M
  72. J
  73. J
  74. A
  75. S
  76. O
  77. N
  78. D