pluriTAL – BLOG Master pluriTAL [ParisX, ParisIII, INALCO]

Projet Nuages : Phase 2 / Etape 3 – Application de la chaîne d’information mutuelle – Graphe (par Aurélia et Virginie)

Posted in Fil(s) de Presse, pr-Nuages (SF), Projet 2005-2006 by tal-p3 on 26 avril 2006

Les programmes utilisés dans cette partie ainsi que leurs explications sont présents ici.

On applique ces programmes Perl sur le fichier de sortie crée pour la chaîne d'information mutuelle (cf post "Création du format d'entrée pour la chaîne d'information mutuelle") lui même obtenu à partir des fils contenant la forme "aviaire".

Pour aviaire :

Programme FaitCooccurrencesDansFenetre.pl :

Nous avons gardé les catégories NOM et ADJ, sur une distance plafond de 20 mots et une cooccurrence plancher de 2.

Programme CooccurrencesDansFenetre2IM.pl :

Nous avons utilisé une fréquence plancher de 3.

Programme IM2GraphML.pl :

Nous avons utilisé une distance plafond de 8 et une IM plancher de 9.0

On élabore le graphe d'aviaire avec Pajek et on obtient :

(Cliquez sur l'image pour l'agrandir)

Pour chikungunya :

Programme FaitCooccurrencesDansFenetre.pl :

Nous avons gardé les catégories NOM et ADJ, sur une distance plafond de 20 mots et une cooccurrence plancher de 2.

Programme CooccurrencesDansFenetre2IM.pl :

Nous avons utilisé une fréquence plancher de 2.

Programme IM2GraphML.pl :

Nous avons utilisé une distance plafond de 2 et une IM plancher de 3.0

On élabore le graphe de chikungunya avec Pajek et on obtient :

Publicités

Projet Nuages : Phase 2 / Etape 3 – Création du format d’entrée pour la chaîne d’information mutuelle (par Aurélia et Virginie)

Posted in Fil(s) de Presse, pr-Nuages (SF), Projet 2005-2006 by tal-p3 on 26 avril 2006


Il s'agit de créer, à partir d'un fichier xml contenant les occurrences d'une forme, un fichier texte qui pourra être utilisé par les programmes qui constituent la chaîne d'information mutuelle. Cette chaîne permet de faire ressortir les mots qui s'attirent. Voir la description.

Le format d'entrée doit être sous la forme d'une suite de fenêtres (explications dans la description ci-dessus). Dans notre cas on considère que chaque balise description constistue une fenêtre.

Explications du programme :

#!/usr/bin/perl
print "Quel est le fichier à filtrer?\n" ;
$fichier=<STDIN> ;
chomp $fichier ;
open(FILEINPUT,"$fichier") ;
open(TEMP,">im.txt") ;
while ($ligne = <FILEINPUT>){
open(FILEOUTPUT,">res.txt") ;
# On recherche dans chaque ligne la balise description suivie de n'importe quels caractères suivi d'une balise fin de link suivi de n'importe quels caractères.
$ligne=~/(<description>.*<\/link>)(.*)/;
# On enregistre le contenu des variables mémorisé par les parenthèses lors de la recherche.
$date=$1;
$des=$2;
# On retire les balises MOT.
$des=~s/<\/?MOT>//g;
# On sépare le texte en un mot par ligne.
$des=~s/([ ,\;:!?\.'\"\(\)])/\n$1\n/g;
$des=~s/(<content>)/$1\n/g;

print FILEOUTPUT "$date $des" ;
close (FILEOUTPUT);

# Lancement du TreeTagger sur le fichier que l'on vient de créer.
system ("bin/tree-tagger.exe -token lib/french.par res.txt tree.txt");
open (TREE,"tree.txt");

while ($ligne=<TREE>){
# Dans le fichier étiqueté on remplace les tabulations par un underscore.
$ligne=~s/\t/_/;
# Remplacement des balises de fin de description par une balise FinFenetre nécessaire au programme d'information mutuelle.
$ligne=~s/(\/description.*)/\r\n<FinFenetre\/>\r\n/;
$ligne=~s/ //g;
# Modification des fins de ligne ^M par \r.
$ligne=~s/^M/\r/g;

# Impression dans le fichier de sortie quand il ne s'agit pas d'une ligne vide.
if ($ligne!~/^$/){
print TEMP "$ligne";
}
}
}

close(TREE);
close(FILEINPUT);
close(FILEOUTPUT);
close(TEMP);

Voir le fichier de résultats pour aviaire et celui pour chikungunya.

Projet Nuages : Phase 1 / Etape 2 – étape préliminaire (Y. L.)

Posted in Fil(s) de Presse, pr-Nuages (SF), Projet 2005-2006 by tal-p3 on 26 avril 2006

(voir aussi ici )

Fils RSS:

Le traitement est décrit ci dessous. Les classes iterd et tagger de la boite à outils ont été ré-utilisées :

process

Les étapes sont les suivantes (codées dans le fichier fils2text.pl ).

  1. On lit les fils dans l'arborescence donnée sur le CD /mnt/cdrom/xxx. ( Pour plus de commodité une copie a été faite sur le disque dur).
  2. Pour chaque fil, on extrait le texte des balises "description" ( avec le module XPath ) et le cumule dans un fichier ( fichier "filetotag" ) indiquant pour chaque fils son nom et le texte extrait. Chaque section se distingue avec un séparateur ayant un format précis que tree-tagger va marquer comme <unknown> et que l'on utilisera dans la partie suivante pour refabriquer l'arborescence. Le fichier "filetotag" est crée à la racine de cette arborescence "résultat" . ( Figure 1 ).
  3. Le fichier "filetotag" est ensuite envoyé à tree-tagger qui fabrique le fichier "resultag" dans le même répertoire.
  4. Le fichier "resultag" est lu. Sur un séparateur on recrée une structure identique à celle de départ, le texte taggé est alors transformé en xml et compressé. ( Figure 2 ).
Figure 1.L'arboresence des résultats
et les fichiers de travail
Figure 2. Les fils étiquetés
et compressés.
a q

Problèmes rencontrés ( Le traitement a été fait sur un PIII / 700Mhz / 256 Mb ):

  1. Le nombre très élevé de fils ( environ 15 000 ) donne un temps de création du fichier filetotag ( 10Mb ) d'environ 50 mn ( temps utilisateur ). Divers essais ont été faits pour créer un fichier compressé mais le temps d'exécution est multiplié par 4. De fait des problèmes de fuite mémoire sont apparus dans le module Compress::ZLib. Conclusion : Le processus se ralentit au fur à mesure qu'il avance …
  2. Il n'a pas été possible de présenter le "corpus étiqueté" sous forme d'un seul fichier xml car:
    1. La librairie libxml ne peut allouer suffisamment de mémoire pour le créer.
    2. Une transformation xslt prenant un tel fichier en entrée sera pour le moins "peu performante".
  3. On a donc choisi de créer un fichier xml par fil et de le compresser (*) pour ne pas utiliser trop de place.( Figure 2 ).

(*) Ces compressions ont été faites avec la commande system pour éviter les Pbs évoqués ci dessus. Ainsi au total environ 15000 processus auront été créés…