python – progrès

June 12, 2006 at 1:51 pm Leave a comment

Je l'ai dit en janvier, je crois, j'ai commencé à apprendre (seul avec mes petites main) la programmation en Python (pendant mon temps libre, ça va sans le dire).

J'ai laissé tombé pendant un long moment puis repris il y a environ un mois.

Comme il m'a toujours semblé plus facile d'apprendre quelque chose en pratiquant, j'ai un projet, que j'ai baptisé "AlephSuggest". Pas besoin d'être grand clerc pour deviner ce que j'envisage: récupérer mon catalogue en XML, en extraire les mots sujets, par ex., les écrire dans un fichier XML qui servira de base à un objet XMLHttpRequest pour faire AlephSuggest.

Un peu ambitieux pour un newbie, sans doute. On verra bien.

Ce que j'ai réussi à faire ce week-end (après env. 1 mois d'information générale sur Python -grâce aux excellents Dive into Python et How to Think like a Computer Scientist, Learning with Python et après 1 week-end de bricolage): extraire le texte des 610 d'une notice en XML.

Ma notice ressemble à ça:

<?xml version = "1.0" encoding = "UTF-8"?>
<record>
<record_header>
<set_entry>000000001</set_entry>
</record_header>
<doc_number>379711</doc_number>
<metadata>
<oai_marc>
<fixfield id="FMT">BK</fixfield>
<fixfield id="LDR">—–cam1-2200469-i-450-</fixfield>
<fixfield id="001">2006140431</fixfield>
<fixfield id="005">20060421110028.0</fixfield> <varfield id="010" i1=" " i2=" "> <subfield label="a">2-7314-0516-3</subfield>
<subfield label="b">Br.</subfield>
<subfield label="d">22.00 EUR</subfield>
</varfield>

[…]

<varfield id="610" i1="0" i2=" ">
<subfield label="a">droit des societes</subfield>
<subfield label="a">droit civil</subfield>
<subfield label="a">contentieux</subfield>
<subfield label="a">juridiction civile</subfield>
<subfield label="a">procedure civile</subfield>
</varfield>

[…]

</oai_marc>
</metadata>
</record>

Le but du jeu est de sortir de tout ça les textes des sous-champs du champs 610. En Python je fais ça:

>>> import sys
>>> from elementtree import ElementTree
>>> tree = ElementTree.parse("notice.xml")
>>> for node in tree.findall(".//varfield"): # gets the varfield tags

if node.get("id") == "610": # only gets varfield with 610, subject in Unimarc

print node.get("id") #prints the id just to make sure verything's all right

if node.getchildren(): # gets the subfields of varfield 610

for child in node: # loop: for each subfield..

print child.text # prints the text

Le résultat:

610
droit des societes
droit civil
contentieux
juridiction civile
procedure civile

Ces 9 lignes m'ont pris environ 8h de travail: j'ai eu une percée dimanche en buvant un whisky-coca et en me disant qu'il fallait utiliser ElementTree… C'est un début…

La suite:

  • en 610 il n'y a qu'un sous-champs a, mais en 606 je devrais pouvoir gérer a, j, x, etc
  • c'est sur une notice, il faut généraliser pour un ensemble de notices dans un même fichier: c'est-à-dire non pas s'arrêter au premier 610 rencontré, mais faire une boucle
  • gérer les caractères accentués

S'il y a des gens qui connaissent Python dans les parages… Toute aide est bienvenue

Advertisements

Entry filed under: Uncategorized.

formations du personnel links for 2006-06-12

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Trackback this post  |  Subscribe to the comments via RSS Feed


Feeds


%d bloggers like this: