Usuari:RRHGbot/cercador.py
Aparença
Guió derivat de replace.py però molt més simple, per cercar coses a la Viqui i desar el nom dels articles que trobi a un fitxer de text.
De moment (ver 0.1) només pot cercar un sol text a un dump xml incloent tots els namespaces
# -*- coding: utf-8 -*- """ cercador.py versió: 0.1 descripció: cerca un text o una expressió regular a un dump xml, retorna un fitxer amb els noms dels articles, necessita pyWikipediaFramework ús: cercador.py [-regex] "text a cercar" -xml:xmldump -bitacora:fitxer_bitàcora "text a cercar" és el text que es vol cercar, pot ser una expressió regular si el paràmetre opcional "-regex" s'ha especificat "xmldump" ha de ser un fitxer de dump de http://download.wikipedia.org en format xml, el que conté les versions actuals dels articles és: pages-articles.xml.bz2 -bitacora "fitxer_bitàcora" especifiqueu un fitxer on desar els resultats. """ from __future__ import generators import sys, re, fileinput, xmlreader import wikipedia, pagegenerators, catlib, config def main(): cerca = u'' # text o regex regex = False diff = False nombre = 0 bitacora = u'' for arg in sys.argv[1:]: arg = wikipedia.argHandler(arg, 'cercador') if arg: if arg == '-regex': regex = True elif arg == '-diff': diff = True elif arg.startswith('-xml'): fitxer_xml = arg[5:] elif arg.startswith('-bitacora'): fitxer_log = arg[10:] else: cerca = arg if (not fitxer_xml) or (not fitxer_log): sys.exit ("ERROR:manca fitxer_xml o fitxer_bitacora") if regex : cerca_re = re.compile(cerca, re.UNICODE) bitacora = "Articles que contenen " + cerca + ":\n" mysite = wikipedia.getSite() dump = xmlreader.XmlDump(fitxer_xml) for entry in dump.parse(): if regex: if cerca_re.search(entry.text): bitacora = bitacora + entry.title + "\n" nombre = nombre + 1 print entry.title + " ", else: if entry.text.find(cerca) != -1: bitacora = bitacora + entry.title + "\n" nombre = nombre + 1 print entry.title + " ", bitacora = bitacora + "----\nNombre d'articles trobats: " + str(nombre) bitacora = bitacora.encode('utf-8') fitxer_sortida = file ( fitxer_log, 'w' ) fitxer_sortida.write ( bitacora ) fitxer_sortida.close () if __name__ == "__main__": try: main() finally: wikipedia.stopme()