XD blog

blog page

wikipedia


2014-08-09 L'informatique et Wikipedia

Je référence souvent Wikipedia dans mes cours, le plus souvent possible la page française quand elle existe mais force est de constater qu'elle n'existe pas toujours. C'est le cas de celui-ci Longest increasing subsequence qui est un problème classique mais pas si évident que cela (voir plus grande séquence croissante). Il faudrait que je regarde de façon statistique quels sont les domaines les mieux représentés selon les différentes langues. De mémoire, il existe toujours une version anglaise, sans doute parce que cette langue est devenue la langue scientifique. En ce qui concerne les algorithmes, les pages françaises sont souvent moins fournies, et on voit plus souvent des versions russes ou polonaises : Reservoir Sampling, Johnson's algorithm. Travaillant pour une multinationale, je constate que les ingénieurs des pays de l'Est découvrent beaucoup plus tôt l'informatique et sont plus cultivés dans ce domaine. Les deux faits sont-ils liés ?

2013-02-02 Parser du XML

Parser du XML est toujours laborieux pour moi parce que je ne retiens jamais les librairies qu'il faut utiliser, le modèle SAX ou DOM. J'avais besoin de lire les fichiers issus du site Wikipedia qui sont organisés comme suit :

<root>
    <page>
        contenu d'une page
    </page>
    <page>
        contenu d'une autre page
    </page/>
...
</root>
Le fichier de Wikipedia fait malhreusement plusieurs gigaoctets, il est juste impossible de tout charger en mémoire (sur la plupart des ordinateurs) sauf si on dispose d'au moins 20Go de mémoire et qu'on ne veut pas s'occuper de Wikipedia en langue anglaise. En procédant de la sorte, on est obligé de découper les fichiers.

Le programme suivant permet d'explorer les premiers objets d'un fichier Wikipedia ou de n'importe quel fichier XML pour peu qu'il contienne une collection d'objets.

from hal_xml_tree import *

file = r"c:\temp\ptwiki-20130125-pages-articles.xml"
f = open (file, "r")

parser  = XMLIterParser ()
handler = XMLHandlerDict ()
parser.setContentHandler (handler)
nb = 0
for o in parser.parse(f) :
    for a,b in o.iterfields() :
        if len(b) > 0 :print [a,b]
    print "---------------------"
    nb += 1
    if nb > 10: break

more...

Xavier Dupré