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

Comment installer ubuntu (linux) en 10min?

Posted in pluriTAL by pluritaluser on 25 mars 2009

Bonjour, comme je viens d’installer Ubuntu sur la VirtualBox, je vous décris comment j’ai fait:

http://www.geocities.com/francoise_peace/ubuntu.html

J’ai pensé à Raoum en faisant cela, ça peut être utile pour ceux qui ont des problèmes avec cygwin ou avec d’autres programmes comme treetagger qui n’ont que des versions pour un autre windows ou pour linux.

Nassim m’a dit que treetagger ne fonctionnait pas parce que j’ai windows vista, alors que à l’université ça a fonctionné, je pense qu’on est sous windows xp.

Donc j’ai utilisé le treetagger de l’ilpga, mais si cela n’avait pas été possible, j’aurai du l’installer dans ubuntu.

Je ne sais pas encore utiliser les additions invité, alors si vous installez ubuntu, vous aurez tous ces problèmes que vous n’avez pas eu avec cygwin.

L’intérêt de la VirtualBox c’est qu’on n’a pas besoin de formater Windows, surtout quand on n’a pas son CD d’installation, pour avoir des nouveaux systèmes d’exploitation gratuits ou payants.

Geocities sera en maintenance demain le 26 Mars 2009 donc au cas où mon site ne fonctionnerait pas, ne vous étonnez pas.

Françoise Del Socorro

BaO2: Treetagger – limité à 1000 mots !

Posted in Boîte à Outils, pluriTAL by pluritaluser on 23 mars 2009

Bonjour,

Tout d’abord j’ai joint mes deux fichiers de fils RSS en un seul: livres-culture.txt, cygwin a dit:

ERROR: Not enough memory
aborted.

Ensuite j’ai modifié mon programme parcours-arborescence et je les ai disjoint en livres.txt ( 5043 mots d’après Treetagger en ligne) et culture.txt (6535 mots d’après Treetagger en ligne), mais cygwin continue de donner le même message d’erreur pour Treetagger (idem en ligne). Alors que quand il n’y avait pas de saut à la ligne, cela fonctionnait, mais je pense que quand il n’y a jamais de saut à la ligne sûrement le texte doit être tronqué par notepad++ sans preuves.

Alors que pour le petit corpus de janvier, cela fonctionnait. Et j’ai refait des tests avec Notepad++, conclusion il y a un bug quand on veut visualiser une ligne de plus de 65535 caractères environ sans aucun retour charriot, les espaces sont comptés, dans le cas de l’assemblage manuel livres.txt + culture.txt, on voit apparaître des lettres superposés, dans le cas de l’assemblage mécanique le texte est tronqué à 79% mais dans le cas de l’assemblage manuel, presque tout le texte est là sauf  5%. Mais avec le retour charriot tout semble marcher sauf que je n’ai pas réussi à trouver une manière de le contrôler car les phrases de culture et livres se mélangent (ou alors tout est faux) au lieu que les deux parties se suivent.

Donc il vaut mieux avoir deux output livres.txt et culture.txt et des retours charriots si on veut être sûr de la réponse de notepad car les corpus sont trop gros même s’ils sont plus petits qu’un long devoir (texte+culture en mode LF =22 pages).

(Calculs tirés de la partie inférieur de Notepad++ où les colonnes indiquent le numéro du caractère où on est et où on a la somme des caractères qu’il a pu compter:

Sans retour charriot:

culture.txt + livres.txt sans retour charriot (collage manuel): 68982 cractères reconnus mais 65535 cararctères visualisables + symbole d’erreur (lettres superposées).
livres-culture.txt sans retour charriot: 69626 caractères reconnus, pas de symbole d’erreur, mais que 15039 caractères visualisés.
culture.txt sans retour charriot: 38870 caractères y compris l’espace reconnus, un caractère en plus visualisé.
livres.txt sans retour charriot:30232 caractères y compris l’espace reconnus, un caractère en plus visualisé.

Avec retour charriot:


livres-culture.txt avec retour charriot: 70326 caractères reconnus, les caractères en plus sont dus à l’espace et aux sauts de ligne.
culture.txt: 39663 caractères reconnus, les caractères en plus sont dus à l’espace et aux sauts de ligne.
livres.txt: 30678 caractères reconnus, les caractères en plus sont dus à l’espace et aux sauts de ligne.

Donc on a bien la somme des deux. Mais on ne peut pas vérifier que les deux parties sont entières car il y a des mélanges phrastiques.)

Et donc comment faire pour couper le texte en tranches de nombre de lignes qui contiennent moins de 1000mots en Perl ?

Je vais recopier votre cours, regarder de nouveau vos slides sur perl et réfléchir à comment faire ce programme et après je vous re-questionnerais, mais si quelqu’un à une idée, merci de nous la faire parvenir !

Françoise Del Socorro

————————————————————————–

Je remets en question ma théorie selon laquelle le TreeTagger téléchargé est limité à 1000mots comme le TreeTagger en ligne ainsi que la théorie de Nassim selon laquelle le TreeTagger ne fonctionne pas sous Windows Vista. Je pense que comme le programme nécessite qu’on configure des variables d’environnement pour qu’il fonctionne (et je ne sais pas ce que c’est) et que je n’ai fait que copier-coller le programme alors c’est normal qu’il ne fonctionne pas. Donc j’ai besoin de votre aide pour finir l’installation.

Réinstallation de TreeTagger sous Windows Vista Basic

Install.txt

OK (ActivPerl 5.10, sa version gratuite vient avec le ppm, pour avoir son Icône cliquez sur ouvrir avec.) 1. Install a Perl interpreter (if you have not already installed one).

You can download Perl for free at

http://www.perl.com/pub/language/info/software.html

OK (C:\TreeTagger) 2. Move the TreeTagger directory to the root directory of drive C:.

OK (avec 7-Zip, on n’a plus besoin de renommer les fichiers qui étaient zippés sous linux.) 3. Download the PC parameter files for the languages you need, decompress

them (e.g. using Winzip) and move them to the subdirectory lib.

Rename the parameter files to <language>.par

Example: Rename french-par-linux-3.1.bin to french.par

OK (Panneau de configuration > Système > Paramètre système avancé > Variables d’environnement – autoexec.bat n’existe plus au-delà de Windows 98, mais c’est plus facile.) 4. Add the following line to autoexec.bat (Windows 95/98) set PATH=C:\TreeTagger\bin;%PATH% or change the corresponding system settings (Windows NT).

5. Open a shell and type the command

set PATH=C:\TreeTagger\bin;%PATH%

6. Change to the directory C:\TreeTagger

7. Now you can test the tagger, e.g. by analyzing this file with the command

tag-english INSTALL.txt

Sur l’invite de commandes il ne se passe rien ni sur cygwin:

*Invite de commandes j’ai tapé

C:\Users\fran>PATH=C:\TreeTagger\bin;%PATH% et il est revenu à la ligne mais quand

C:\Users\fran>cd C:\TreeTagger\

C:\TreeTagger>tag-english INSTALL.txt

‘perl’ n’est pas reconnu en tant que commande interne

ou externe, un programme exécutable ou un fichier de commandes.

*Cygwin j’ai tapé

fran@Charmmy-Kitty ~

$ PATH=C:\TreeTagger\bin;%PATH%

bash: fg: %PATH%: no such job

fran@Charmmy-Kitty ~

$ cd /cygdrive/C/TreeTagger

fran@Charmmy-Kitty /cygdrive/C/TreeTagger

$ tag-english INSTALL.txt

bash: tag-english: command not found

Donc comment finaliser l’installation de TreeTagger ?

Françoise Del Socorro

—————————————————————————–

Françoise

Pour travailler avec treetagger sous windows, on peut faire simple (comme on le fait en cours).

1. Vous récupérez treetagger pour windows sur la page du cours

(http://www.cavi.univ-paris3.fr/ilpga/ilpga/tal/cours/BAO-master/treetagger-win32.zip)

2. Vous dézippez cette archive. Treetagger est disponible dans une sous-arborescence de cette archive avec plusieurs sous-dossiers (bin, cmd…). Mettez l’arborescence « pas trop loin » de votre répertoire de travail pour les BàO puis lancer les commandes pour l’étiquetage (tokenisation, étiquetage, normalisation XML cf mode d’emploi disponible dans l’archive) en adaptant avec des chemins relatifs correspondants à votre organisation locale sur votre disque.

Si c’est pas clair, on regarde mercredi.

SF

Page web

Posted in pluriTAL by pluritaluser on 23 mars 2009

Page web en cours de réalisation pour le projet encadré pour moi et Hugo: http://www.geocities.com/rss_culture.livres_lemonde/index.htm

Françoise Del Socorro

Lexico 3 – quelques résumés

Posted in pluriTAL by pluritaluser on 21 mars 2009

Cours de Mr Salem:

On doit rassembler un corpus de textes autour d’un sujet de notre choix.

On peut rassembler un corpus de type:

*texte source – traduction. Ex de balisage: <titre=La theorie de l’évolution><langue=fr><date de publication=1969><auteur=Charles Darwin>

*corpus chronologique: où on étudiera par exemple l’évolution de l’emploi du mot crise dans le journal Le Monde . Ex de balisage: <annee=1998><lieu=Toulouse><jour=01><mois=01>

*corpus des interventions d’un chef d’état.

En tout cas on a:

<partie=1>s’oppose à<partie=2>

Il faut chercher des corpus semblables pour ne pas avoir à comparer un troupeau d’éléphants et un troupeau de mouches. La taille du corpus dépend de la quantité de redondance que vous avez, si vous avez beaucoup de motifs répétés dans un petit corpus ça va, sinon il vaut mieux avoir un grand corpus pour les études statistiques.

D’après le Trésor de la langue Française Informatisé: http://atilf.atilf.fr/

lexicométrie, (dans l’article -MÉTRIE, élém. formant)
C. [Le 1er élém. est d’orig. fr.] V. économétrie, granulométrie, sensorimétrie, volumétrie et aussi:
lexicométrie, lexicol. Étude statistique du vocabulaire; science qui étudie la répartition du vocabulaire dans le discours. La lexicologie quantitative, ou lexicométrie, permet une approche réductionniste, interne et, partiellement, explicative (D. DUGAST, Vocab. et styl., Genève, éd. Slatkine, t.1, 1979, p.43).

Sur internet il y a beaucoup de possibilités.

Regarder les travaux des élèves sur le site de Lexico 3:

Rp d’analyse > sommaire des explorations > regarder les travaux des étudiants

Si on veut faire de l’alignement, Mr Salem et Mr Gerdes nous ont conseillé le logiciel mkalign de Serge fleury. Où est le logiciel Mr Fleury ?

il est ici : http://tal.univ-paris3.fr/mkAlign/

Le programme mkAlign permet de construire, corriger et visualiser un alignement de deux textes via un éditeur à double entrée. Il permet d’afficher simultanément les textes source et cible pour y rajouter ou corriger des segments équivalents. Ce programme n’est pas (seulement) un aligneur automatique. Il est conçu pour aider l’utilisateur dans la création, l’alignement, la correction et la validation de textes traduits. L’utilisateur garde la maîtrise sur l’ensemble de ces processus, depuis la mise en correspondance initiale des segments équivalents jusqu’à l’export final du bi-texte produit. Il appartient à l’utilisateur de construire l’alignement et de définir son degré de précision (résolution). Cette résolution peut varier pour mettre en évidence les correspondances entre les segments textuels des différents niveaux. La notion de sauvegarde de session de travail (création de fichiers d’export/import de bi-textes au format xml et html) permet de commencer le travail sur un corpus à deux volets textuels, l’exporter au format désiré, puis le réimporter plus tard pour y apporter des modifications. La visualisation de l’alignement dans une représentation cartographique (bi-text map) offre plusieurs possibilités de gestion de corpus qui partagent des similitudes au plan traductionnel.

Cours de Mr Gerdes:

Il faut choisir les mots qu’on veut étudier.

Une collocation est une sorte de structure sémi-idiomatique, un mot qui n’a pas son sens propre mais qui modifie le sens d’un autre mot.

D’après le Trésor de la langue Française Informatisé: http://atilf.atilf.fr/

COLLOCATION, subst. fém.
b) LING. Emploi d’un terme relativement à d’autres, toutes variantes morphologiques confondues, et sans égard à la classe grammaticale. Les noms de fruit comme pomme, orange, poire, pêche (…) se trouvent en collocation fréquente avec dessert, manger, doux, fruit, etc. (HALLIDAY, Ét. de ling. appliquée, t. 1, 1962, p. 22).

Rem. 1. L’acception ling. appartient à l’école angl., qui rapporte le sens d’un terme à l’emploi du terme. 2. Hapax collocage, subst. masc., avec le sens d’hébergement. Je compte toujours sur tes bienveillants efforts en ma faveur pour collocage mien éventuel ès asile honorable et petits ménages déguisés (VERLAINE, Correspondance, t. 1, 1888, p. 220).

Exemples de collocations:

Prenons le syntagme  » un fumeur  » en français.

français: il est un gros fumeur

anglais: he is a heavy smoker

Prenons des verbes support comme prendre ou faire:

  • prendre + une décision

  • to make + a decision

  • faire + une sieste

D’après http://infolingu.univ-mlv.fr/DonneesLinguistiques/Lexiques-Grammaires/PhrasesVsup.html

« Phrases à verbe support

Le lexique-grammaire recense, en grandeur réelle, les structures syntaxiques élémentaires. Les sens sont soigneusement distingués. La phrase élémentaire est l’unité minimale d’étude. Un jeu de transformations syntaxiques facilite la description des variations entre structures.

Dans les phrases à verbe support, ce n’est pas le verbe qui remplit la fonction de prédicat de la phrase, mais un nom prédicatif (Luc monte une attaque contre le fort), un adjectif prédicatif (Luc est fidèle à ses idées), etc. La distribution du sujet et éventuellement des compléments essentiels dépend de cet élément prédicatif.

Le verbe support est souvent un petit verbe fréquent : avoir, être, faire, prendre … mais il peut aussi contribuer au sens de la phrase : Luc multiplie les attaques contre le fort. Une construction à verbe support est toujours reliée à des constructions dans lesquelles le verbe support n’apparaît pas : Max assiste à l’attaque de Luc contre le fort ; Luc, fidèle à ses idées, relève le défi.

En français, plusieurs dizaines de tables décrivent certaines catégories de phrases nominales et adjectivales à verbe support.

Visualisation des tables de noms prédicatifs du français

Maintenance de cette page : Éric Laporte  »

Le calcul des spécificités permet de mesurer à quel degré c’est étonnant, surprenant, de trouver tel mot dans un sous-corpus?

Le calcul des anti-spécificités permet de mesurer les mots qui apparaissent moins souvent dans un sous-corpus. Par exemple on ne trouve pas souvent « ferait » mais on trouve souvent « faire », on trouve souvent  » monter  » quand on a « cheval » mais on ne trouve pas souvent « monte ».

Soit un sous-corpus avec les mots: sieste, sieste et les mots: panneau, panneau, panneau.

Quelle est la probabilité qu’on ai plus de une fois panneau dans le contexte de sieste ?

Sous-corpus: panneau, panneau, faire, faire

Sous-corpus sélectionné: panneau, panneau, faire, faire, sieste, faire, faire, sieste, panneau

On peut par exemple calculer les spécificités de chaque chapitre du livre si tous les chapitres étaient égaux.

On peut aussi regarder les mots qui sont difficiles à traduire en anglais comme « dérogation » ou « fonctionnaire » en faisant des corpus alignés pour voir:

-tous les paragraphes où le mot « fonctionnaire » apparaît en français

-tous les paragraphes en anglais où il y a la traduction du mot « fonctionnaire »

Puis calculer les spécificités du sous-corpus et déduire que on traduit le plus souvent en anglais « fonctionnaire » par « official », qui est le mot le plus pertinent.

Puis calculer les spécificités négatives et déduire que « agent » en anglais, mot qui n’est pas le mot « official », s’emploie lorsque on trouve souvent le mot « policial » autour.

Lorsque on a différentes traductions dans différents contextes mais pas une meilleure traduction, on peut rajouter plusieurs traductions dans son dictionnaire.

Au niveau des applications de Lexico 3, il y en a dans tous les domaines:

-Il existe des systèmes de traduction automatiques bilingues qui regardent le contexte des mots.

-Les sciences humaines sont en train de changer à cause des outils qui nous permettent d’avoir des mesures de répétition.

-Il existe des sociologues qui utilisent Lexico 3 pour se demander si la violence à l’école est une création médiatique ou un fait réel ?

Indépendamment des statistiques, on remarque que c’est juste avant les élections que ça augmente: Donc il s’agit d’une création médiatique plus que d’un fait réel, et donc d’une manipulation, on peut montrer que ce n’est pas le reflet de la violence à l’école, mais on ne sait pas si la médiatisation est consciente, inconsciente ou due au hasard.

En tout cas pour faire des études statistiques il vaut mieux avoir un grand corpus.

Conseils personnels pour utiliser lexico3:

Remplacer tous les – > par un mot comme « implique » par exemple. Car il ne faut pas avoir de frontière de balise ouvrante ni fermante dans un texte qui va être traité par Lexico3 qui reconnaît les balises. Rappel: > supérieur à, < inférieur à.

Faire Nouvelle base (segmentation) si vous mettez pour la première fois votre corpus en format nomducorpus.txt dans Lexico3 ou faire ouvrir > nomdefichier.par si vous l’avez déjà ouvert au moins une fois dans Lexico3.

Vos balises sont surlignées en jaune fluo.

Regarder tous les fichiers dont le .dic qu’il crée dans le répertoire où se situe le fichier que vous avez ouvert.

Quelques boutons:

-Concordances > changement de fenêtre.

-Groupe de formes > changement de fenêtre.

-Segments répétés > vous pouvez changer la fréquence minimale (seuil) de répétition attendue en réponse > cliquer sur le nouvel onglet.

-Statistiques par partie > choix de la partition: en fonction de la partie gauche de vos balises

Ouvrir avec le petit carré la petite fenêtre fermée en bas ou si vous ne la voyez pas, cliquez sur Mosaïque pour accéder aux statistiques par partie.

-Avec shift + sélection j’arrive à sélectionner les parties qui vont être comparées aux parties non sélectionnées.

-Spécifs donne les spécificités positives (case à cocher) ou négatives (case à cocher) des parties sélectionnées par rapport aux autres parties.

Pour sauvegarder vos résultats en .html (vous pouvez éditer ensuite votre .html en l’ouvrant avec notepad++ si il y a des erreurs pour ne pas avoir à tout recommencer):

  • Lorsque ce qu’il y a sur la fenêtre principale vous intéresse, cliquer sur le bouton: ajouter au rapport.

  • Lorsque ce qu’il y a à gauche vous intéresse, cliquer sur le bouton: ajouter au rapport.

  • Cliquez sur l’onglet « Rapport » à gauche > en bas sur la disquette: enregistrer.

  • Votre page web s’appelle index.htm et elle est placé dans l’endroit de votre choix dans un dossier avec le nom du corpus et plein de numéros. Renommez l’index avec l’option renommer de windows, et changez le contenu avec notepad++ ou votre éditeur html.

  • Pour quitter: c’est la porte « quitter ».

C’est tout ce que je sais, le reste je ne connais pas.

Françoise Del Socorro

Questions sur Perl

Posted in pluriTAL by pluritaluser on 21 mars 2009

Quelle est la différence entre l’assignation et le égal ?

$var1.= 11;
print "$var1\n";
$var2 = 22;
print "$var2\n";

Françoise Del Socorro

—————————————————————-

Françoise

Recopiez ce bout de code dans un fichier et lancez le script :

#cette première ligne définit une variable scalaire (de type chaîne de caractères)
# on créé la variable $var1 et on lui assigne une valeur (=)
$var1="a";

# on l'affiche
print "Valeur initiale de \$var1 : $var1\n";

# l'opération . est une opération de concaténation de chaîne de caractère,
#la notation .= est équivalente à $var1 = $var1 . "a";
$var1.="a";
print "Valeur modifiee de \$var1 : $var1\n";

# ici, l'opération . (qui travaille sur des chaînes de caractères) va
#concaténer "aa" à la chaîne "11"
$var1.=11;
print "Valeur modifiee de \$var1 : $var1\n";

Execution du script

SF

_____________________________________________________________________________________________

Merci Mr Fleury, j’ai compris que .= signifie la concaténation avec ce qu’on avait déjà mémorisé dans la variable.

Mais je vais poser + de questions sur le blog, mes camarades peuvent aussi répondre:

Question 1:

print "tape le premier numéro\n";
read ($premier_n);
print "tape le deuxieme numéro\n";
read ($deuxieme_n);
$troisieme_n = $premier_n + $deuxieme_n;
print "la somme de", $premier_n, " et ", $deuxieme_n, " est ", $troisieme_n, " \n ";

Pourquoi ça ne fonctionne pas ?

Réponse à la question 1

En Perl, les données « arrivant par le clavier »  sont disponibles par le descripteur <STDIN> (l’entrée standard).

De cette façon, on peut récupérer ce que l' »‘utilisateur »  tape au clavier :

$var = <STDIN>

L’expression «$var = <STDIN>;» signifie : affecter à la variable $var la suite de caractères

terminée par un caractère de saut de ligne à partir du fichier d’entrée standard STDIN (i.e la clavier).

Parfois il est nécessaire de supprimer le caractère \n récupéré lors de ce type d’affectation,

pour le supprimer on utilise par exemple la fonction chomp.

Compléments  en ligne :

Ce qui donne pour votre programme :

print "Entrez le premier nombre : ";
$premier_n=<STDIN>;
chomp($premier_n);
print "(la premier nombre lu est : $premier_n)";
print "\nEntrez le second : ";
$deuxieme_n=<STDIN>;
chomp($deuxieme_n);
print "(le second nombre lu est : $deuxieme_n)";

$troisieme_n = $premier_n + $deuxieme_n;
print "\nLa somme de ", $premier_n, " et de ", $deuxieme_n, " est ", $troisieme_n, " \n ";

Exécution :

test2

Question 2 (envoyée par e-mail, mais si vous répondez, je collerais la réponse sur le blog):

print"Tapez a pour avoir le produit de var 1 = 33 et var 2 = 44,
b pour avoir le produit de var 1 = 33 et var 3 = 55,
p12 pour permuter var1 et var2, p13 pour permuter var1 et var3,
p23 pour permuter var2 et var3, p0 pour remettre les variables à leur place.\n";

$var1 = 33;
$var2 = 44;
$var3 = 55;

$a .= ($produit=$var1*$var2); # erreur
$b .= ($produit=$var1*$var3); # erreur
$p12 .= ($var1.=$var2); # erreur
$p13 .= ($var1.=$var3); # erreur
$p23 .= ($var2.=$var3); # erreur

if $x="a" {print "$a\n"}; # erreur
if $x="b" {print "$b\n"}; # idem
if $x="p12" {$var1=$p12; print "var1=$var1\n"};
if $x="p13" {$var1=$p13; print "var1=$var1\n"};
if $x="p23" {$var2=$p23; print "var2=$var2\n"};
if $x="p0" {$var1 = 33; $var2 = 44; $var3 = 55; print "var1=$var1, var2=$var2, var3=$var3"};

Pourquoi ça ne fonctionne pas ?

Réponse à la question 2

print "Tapez votre choix : \na pour avoir le produit de var 1 = 33 et var 2 = 44,\n
b pour avoir le produit de var 1 = 33 et var 3 = 55,\n
p12 pour permuter var1 et var2,\n p13 pour permuter var1 et var3,\n
p23 pour permuter var2 et var3,\n p0 pour remettre les variables à leur place.\n
Votre choix :";
$choix=<STDIN>;
chomp($choix);

$var1 = 33;
$var2 = 44;
$var3 = 55;

if ($choix eq "a") {
      $produit1=$var1*$var2;
      print "Choix $choix : $produit1 \n";
}
elsif ($choix eq "b") {
      $produit2=$var1*$var3;
      print "Choix $choix : $produit2 \n";
}
elsif ($choix eq "p12") {
      $tmp1=$var2;
      $var2=$var1;
      $var1=$tmp1;
      print "Choix $choix : VAR1 : $var1 VAR2 : $var2 \n"
}
elsif ($choix eq "p13") {
      $tmp2=$var2;
      $var2=$var3;
      $var3=$tmp2;
      print "Choix $choix : VAR2 : $var2 VAR3 : $var3 \n"
}
else {
      print "Choix $choix : à vous de jouer pour traiter les autres cas...\n";
}

Je n’ai pas traité tous les cas de figure… A vous de jouer !!!

Exécution actuelle :

test3

——————————————————————————————————————–

Question 3

Décidement, j’ai énormément du mal avec Perl, est-ce que vous ou un camarade peut me corriger cela ? Cela sert à remplacer les accents automatiquement dans les pages web qu’on fait, cygwin accepte mon programme, mais il y a un petit problème: le fichier de sortie est vide.

Pour les balises <br> j’utilise PSPad Editor parce que là il y en a trop, mais comme je n’ai jamais utilisé d’éditeur HTML, je ne sais pas où cliquer pour le reste et donc je préfère faire le programme.

#/usr/bin/perl
print "Le fichier html bien accentue se nomme fichier-accentue.html";
open (FILEIN,"$FILE");
open (FILEOUT,">fichier-accentue.html");
$recup=~s/&agrave;/à/g;
$recup=~s/&aacute;/á/g;
$recup=~s/&acirc;/â/g;
$recup=~s/&atilde;/ã/g;
$recup=~s/&auml;/ä/g;
$recup=~s/&aring;/å/g;
$recup=~s/&aelig;/æ/g;
$recup=~s/&egrave;/è/g;
$recup=~s/&eacute;/é/g;
$recup=~s/&ecirc;/ê/g;
$recup=~s/&euml;/ë/g;
$recup=~s/&egrave;/è/g;
$recup=~s/&eacute;/é/g;
$recup=~s/&ecirc;/ê/g;
$recup=~s/&euml;/ë/g;
$recup=~s/&igrave;/ì/g;
$recup=~s/&iacute;/í/g;
$recup=~s/&icirc;/î/g;
$recup=~s/&iuml;/ï/g;
$recup=~s/&ograve;/ò/g;
$recup=~s/&oacute;/ó/g;
$recup=~s/&ocirc;/ô/g;
$recup=~s/&otilde;/õ/g;
$recup=~s/&ouml;/ö/g;
$recup=~s/&ugrave;/ù/g;
$recup=~s/&uacute;/ú/g;
$recup=~s/&ucirc;/û/g;
$recup=~s/&uuml;/ü/g;
$recup=~s/&ccedil;/ç/g;
$DUMPFULLtxt.=$recup;
print FILEOUT $DUMPFULL;
close (FILEOUT);
close (FILEIN);

Réponse à la question 3

Rien à signaler dans le code précédent SAUF que nous ne voyons pas où vous récupérez la variable $recup

ni le contenu de la variable $FILE sensée contenir le « nom physique » du fichier en entrée.

Si je comprends bien (mais c’est pas sûr), vous devez lire le fichier FILEIN et convertir les entités HTML

présentes dans ce fichier sous leur forme « classique de caractère accentué » et réécrire la chaîne modifiée

dans FILEOUT.

D’autre part, êtes-vous sûre de vouloir créer en sortie un fichier HTML ?

Car dans ce cas, pourquoi convertir les entités ?

Parce que depuis que j’ai découvert Notepad++ et Options des dossiers et de Recherche > ne pas masquer les extensions des fichiers dont le type est connu, pour créer une page html, je crée une page html vide et j’écris dedans, donc j’aurai même préféré rechercher et remplacer les accents dans la page html que je suis en train d’éditer sans faire de brouillon, mais là il vaut mieux sauvegarder sous fichier-accentue.html par prévention, mais ce n’est pas utile. Je vais encore tester votre correction et si ça marche bien, comme je ne remplace pas les balises, je mettrais à la place de fichier-accentue.txt, $FILE en espérant actualiser ma page en cours d’édition. Cela peut paraître bizarre mais comme les fichiers texte oublient fréquemment ce qu’on a tapé dedans, je pense que ne pas utiliser leur extension, est tout aussi utile. Françoise

Il manque donc a priori la boucle de lecture du fichier FILEIN et  :

#/usr/bin/perl
print "Le fichier html bien accentue se nomme fichier-accentue.html";
$FILE="fichier_en_entree";
open (FILEIN,"$FILE");
open (FILEOUT,">fichier-accentue.txt");
my $DUMPULL="";
while(my $recup=<FILEIN>) {
          # 1. transcodage
          $recup=~s/&agrave;/à/g;
          $recup=~s/&aacute;/á/g;
          $recup=~s/&acirc;/â/g;
          #etc...
          # 2. memorisation dans DUMPFULL
          $DUMPFULLtxt.=$recup;
}

print FILEOUT $DUMPFULL;
close (FILEOUT);
close (FILEIN);


Enlever toutes les balises de façon simple:

Posted in pluriTAL by pluritaluser on 18 mars 2009

BaO1

Insérez dans le filtreur:

$recup=~s/&lt;((\w)*(\W*))*&gt;/ /g;  # enlève toutes les balises

$DUMPFULL1.= »<extract num=\ »$i\ »>$recup</extract> »;

$DUMPFULL1=~s/<extract num=\ »$i\ »> <\/extract>/ /g; # enlève tous les extract répétés

et après il n’y a plus de <a href=…> ni de <img src=…>  ni de <extract num=’1′> </extract><extract num=’1′> </extract>

Françoise Del Socorro

Merci à Mourad pour toute l’aide  et pour suggérer $i à la place de 1 afin de supprimer toutes les balises redondantes, même celles qui contiennent un autre chiffre que 1, j’ai remis la sortie vers le fichier texte car on a besoin de ça pour le treetagger, je vais encore rajouter les balises de titre dans mon programme.

Françoise Del Socorro

Pour Françoise

Posted in Boîte à Outils, Master TAL Recherche, pluriTAL, Projet 2008-2009 by pluritaluser on 15 mars 2009

#/usr/bin/perl

my $rep= »$ARGV[0] »;

$rep=~ s/[\/]$//;

my $DUMPFULL1= » »;

my %tableaudestextes=(); #—————————————-

my $output1= »test1.xml »;

if (!open (FILEOUT, »>$output1″)) { die « Pb a l’ouverture du fichier $output1 »};

&parcoursarborescencefichiers($rep);

sub parcoursarborescencefichiers {

 my $path = shift(@_);

opendir(DIR, $path) or die « can’t open $path: $!\n »;

my @files = readdir(DIR);

closedir(DIR);

foreach my $file (@files) {

next if $file =~ /^\.\.?$/;

 $file = $path. »/ ».$file;

if (-d $file) {

&parcoursarborescencefichiers($file);

}

if (-f $file) {

if ($file=~/\.xml/){

open(FILEIN,$file);

printf « $file\n »;

   while ($ligne = <FILEIN>){

    if ($ligne=~/<description>([^<]+)<\/description>/){ 
 my $propre=$1;

 if (exists($tableaudestextes{$propre})) {

$tableaudestextes{$propre}++;

}

 else {

$DUMPFULL1.= »$propre\n »;

 $tableaudestextes{$propre}++;

}

}

}

}

 close(FILEIN);

}

 }

}

print FILEOUT « <?xml version=\ »1.0\ » encoding=\ »iso-8859-1\ » ?>\n »;
print FILEOUT « <PARCOURS>\n »;
print FILEOUT « <NOM> </NOM>\n »;
print FILEOUT « <FILTRAGE> ».$DUMPFULL1. »</FILTRAGE>\n »;
print FILEOUT « </PARCOURS>\n »;
close(FILEOUT);
exit;

Pour Françoise

Posted in pluriTAL by pluritaluser on 13 mars 2009

En faite, tous ce que vous avez écrit vous permet d’écrire dans votre fichier « Sortie.xml » mais si vous avez remarqué avant l’instruction qui vous permet d’écrire dans le fichier print FILEOUT « ….. »;  il y a un appel à la fonction parcoursarborescencefichiers(…) donc on peut conclure que le faite que votre fichiers est vide que vous avez un probléme dans votre fonction parcoursarborescencefichiers(…).

Et pour étre sur il vous suffit d’enlever l’appel à la fonction parcoursarboresencefichiers(…) et vous aurez en principe un fichier « sortie.xml » qui a le contenu suivant:

<?xml version=\”1.0\” encoding=\”iso-8859-1\” ?>

<PARCOURS>

<NOM>Votre nom</NOM>

<FILTRAGE></FILTRAGE>

</PARCOURS>

Bon courage

Mourad Aouini

——————————————————

Merci !!!

Le lien vers Lexico 3 qu’il faut télécharger pour le cours de statistiques textuelles est le suivant: lexico3.zip

Et sa page web est la suivante: http://www.cavi.univ-paris3.fr/Ilpga/ilpga/tal/lexicoWWW/manuels.htm

J’essayerais plus tard ta réponse et après je te dirais si ça marche.

Françoise Del Socorro

————————————————————————————–

Bonjour Nassim, voici le lien vers mon fichier complet si tu veux m’expliquer ce qui ne va pas dans la BaO1:  parcours-arborescence-francoise.zip

Je n’ai pas encore tout re-essayé sur mon ordinateur, mais j’étais dans la BaO2 je crois.

Et là je suis en train de regarder les pages sur le perl-package-manager: http://www.cavi.univ-paris3.fr/ilpga/ilpga/tal/cours/BAO-master/perl-xml-rss.pdf qu’il y a sur internet, mais tous les programmes que je trouve sont pour linux (.tar.bz) et donc peut-être qu’il faudra vraiment que j’installe ubuntu (linux) car je ne sais pas comment faire avec windows ni avec cygwin pour installer ce programme (et je ne sais pas encore me servir de linux non plus).

En tout cas savoir c’est quoi le problème avec Sortie.xml, c’est déjà important.

Merci d’avance,

Françoise Del Socorro

—————————————————————————————

Françoise

Le Perl Package Manager présenté dans le document que vous citez est celui disponible avec la version ActiveState de Perl (sous Windows dans le même doc). Pour info, Activetstate fournit des versions de Perl pour d’autres OS (cf ce lien). Si vous installez une de ces versions de Perl, vous aurez un PPM disponible (sous windows, visible dans menu Démarrez).

Plus d’infos sur PPM ici : http://docs.activestate.com/activeperl/5.6/faq/ActivePerl-faq2.html

Si vous n’utilisez pas le Perl ActiveState, l’installation de bibliothèques se fait autrement. En général, on récupère les biblis sur la CPAN puis on les installe. Sous Unix, le mode d’emploi est en général celui-ci :

  • on dézippe (le zip contient en général un README et/ou INSTALL qui indique le mode d’emploi pour l’installation),
  • puis : perl MakeFile.pl
  • puis : make
  • puis : make install

(infos aussi disponibles dans les slides Perl sous Agora)

Sous Windows, on peut faire à peu près la même chose en installant au préalable un « équivalent » du make sous unix, par exemple nmake : vous trouverez ici des infos sur nmake.

SF

—————————————————

Merci Mr Fleury, j’ai plein de choses à tester et je n’ai pas encore répondu à Mourad parce que les .zip que vous avez faits sur le Monde ont été zippés sous Mac OS X, or je ne sais pas pourquoi les .zip zippés sous Mac OS X ne dézippent pas sous Windows Vista Basic, d’abord je voulais intaller un émulateur de Mac sur Windows ou DOS et sous Virtual Box, ensuite je me suis rendue compte que 1) Les versions disponibles n’étaient pas compatibles avec Windows Vista Basic et 2) Que Macintosh n’est pas Mac OS X (Hugo m’avait déjà expliqué ça au premier semestre, il ne m’a pas encore donné signe de vie au second semestre depuis la grève), et que donc ce serait inutile. Ensuite j’ai eu l’idée de chercher un autre dézippeur que le programme d’extraction à défaut de Windows, et j’ai trouvé le freeware 7-zip sur source forge qui a tout dézippé ! Et là je vais devoir  tout essayer.

Françoise Del Socorro

—————————————————–

Bonjour Mourad et Nassim, j’ai bidouillé un peu le code, je ne sais pas expliquer ce que j’ai fait, c’était intuitif, je me suis dit que si parcoursarborescencefichiers avait un problème, c’était parce que la boucle ne le considérait pas comme son contenu, donc j’ai changé la boucle et au lieu d’un if not, j’ai mis un if … else, et ça a marché, il reste plein de balises, mais je vais essayer le programme de Jugurtha Aït Hamlat pour voir si c’est à ça que ça sert.  En tout cas voici mes changements pour cette partie, après comme j’ai les fils RSS de culture et de Livres, je vais essayer par tâtonnement de deviner quelles variables (déjà c’est lesquelles les variables en perl ?) je dois personnaliser pour ne pas écraser Sortie.xml:

CHANGEMENTS:

#———————————————————–
my $rep= »$ARGV[0] »;
# on s’assure que le nom du répertoire ne se termine pas par un « / »
$rep=~ s/[\/]$//;
# on initialise une variable contenant le flux de sortie
my $DUMPFULL1= » »;
#—————————————-
my $output1= »SORTIE.xml »;
open (FILEOUTPUT);
if (open (FILEOUTPUT, »>$output1″)) {
#—————————————-
&parcoursarborescencefichiers($rep);    #recurse!
#—————————————-
print FILEOUTPUT « <?xml version=\ »1.0\ » encoding=\ »iso-8859-1\ » ?>\n »;
print FILEOUTPUT « <PARCOURS>\n »;
print FILEOUTPUT « <NOM>Votre nom</NOM>\n »;
print FILEOUTPUT « <FILTRAGE> ».$DUMPFULL1. »</FILTRAGE>\n »;
print FILEOUTPUT « </PARCOURS>\n »;
}
else { die « Pb a l’ouverture du fichier $output1 »};
close(FILEOUTPUT);
exit;
#———————————————-

RESULTAT sur Sortie.xml:

<?xml version= »1.0″ encoding= »iso-8859-1″ ?>
<PARCOURS>
<NOM>Votre nom</NOM>
<FILTRAGE><extract num= »1″> </extract><extract num= »2″>Créateur de la célèbre machine à écrire « Valentine » pour Olivetti, il est décédé lundi matin 31 décembre à l’âge de 90 ans à Milan, dans le nord de l’Italie, a annoncé l’agence Ansa.</extract><extract num= »3″>La profession goûte les avantages du mixage digital.</extract><extract num= »4″>Une exposition sur l’image réciproque des Allemands et des Russes de 1800 à 2000 montre que les rapports entre les deux peuples ont toujours été un mélange de peur et d’attirance, de répulsion et de fascination, de haine et d’admiration.</extract><extract num= »5″>Première institution culturelle privée à but non lucratif dans ce pays, elle est aussi la première ouverte par un étranger.</extract><extract num= »1″> </extract><extract num= »2″>Une exposition gratuite et à succès à l’Hôtel de Ville.</extract><extract num= »3″>Omar Porras offre au …

Françoise Del Socorro

Pourquoi je n’ai rien dans sortie.xml ?

Posted in pluriTAL by pluritaluser on 13 mars 2009

C’est le programme tel quel, j’ai tout pour les autres fichiers, mais rien dans SORTIE.xml, que je n’utilise pas.

#———————————————————–
my $rep= »$ARGV[0] »;
# on s’assure que le nom du répertoire ne se termine pas par un « / »
$rep=~ s/[\/]$//;
# on initialise une variable contenant le flux de sortie
my $DUMPFULL1= » »;
#—————————————-
my $output1= »SORTIE.xml »;
if (!open (FILEOUT, »>$output1″)) { die « Pb a l’ouverture du fichier $output1 »};
#—————————————-
&parcoursarborescencefichiers($rep);    #recurse!
#—————————————-
print FILEOUT « <?xml version=\ »1.0\ » encoding=\ »iso-8859-1\ » ?>\n »;
print FILEOUT « <PARCOURS>\n »;
print FILEOUT « <NOM>Votre nom</NOM>\n »;
print FILEOUT « <FILTRAGE> ».$DUMPFULL1. »</FILTRAGE>\n »;
print FILEOUT « </PARCOURS>\n »;
close(FILEOUT);
exit;
#———————————————-

Merci de me répondre,

PS: Regarder infra pour le devoir 1 de Recherche d’Information pour le mardi 17 Février 2009 et etc.

Françoise Del Socorro

blogs

Posted in pluriTAL by pluritaluser on 11 mars 2009

voilà notre blog pour xml :

http://xmlxmlxml.hautetfort.com/

et pour la bao :

http://boiteaoutils.hautetfort.com/

Cécile Darmé & Elodie Nijean

BAO1 : Petit exercice de prog. pour choper toutes les balises

Posted in pluriTAL by pluritaluser on 10 mars 2009

Comme convenu avec certains de nos collègues, voici le bout du code que j’ai réalisé dans le but de choper le contenu des balises description (boite à outil 1) dans le script parcours-arborescence-fichiers.pl . Sont prévus ici les cas de contenus s’étendant sur plusieurs lignes ou ceux -plusieurs- se trouvant sur une même ligne. Il s’agit, en effet, de cas réellement rencontrés dans notre corpus (merci à Nassim !). J’ai fait des tests, et ça a l’air de fonctionner … mais sait-on jamais ! Je garde une oreille attentive (et un oeil vif aussi) sur d’éventuelles  suggestions, en restant bien entendu à votre disposition ^_ ‘

NB. Cette proposition demeure un bon exercice de manipulation de variables et de logique algorithmique. Néanmoins, elle ne présente certainement pas une solution optimale dans le cadre de notre projet. Pour avoir la tête plus tranquille, et comme il existe des gens qui ont déjà pensé à tout ça, il est recommandé par le prof. d’utiliser la bibliothèque RSS, qu’il nous a envoyée dans le mail du 30 janvier (tout y est, le script et le manuel d’installation), et … ça doit être bcp plus pratique...

Voici le morceau que j’ai repris à partir du test du dossier dans le sous-programme (faire attention aux accolades de la fin [certaines sont ouvertes avant cet extrait ]) :

if (-d $file)
{
&parcoursarborescencefichiers($file);   #recurse!
}

if ((-f $file) && ($file=~ /\.xml$/)) # inclure ici le choix de la rubrique
{
open(FICHIER, « $file »);

$DUMPFULL1.= »<fichier nom=\ »$file\ »>\n »;

my %prevlignes=(); # variable pour filtrer les lignes redondantes
my $flag=0;  # variable fonctionnelle pour gérer les contenus multilignes
my $drop=0; # variable fonctionnelle pour gérer plusieurs contenus sur la même ligne
my $contenu= » »;  #variable pour le contenu des balises
my $multi= » »; # variable pour accumuler les contenus multilignes
my $i=1;  # variable d’incrémentation en fonction des contenus extraits

while ($ligne = <FICHIER>)
{
if ($flag!=1) # si la collecte du contenu multiligne n’est pas déclenchée
{
while ($ligne=~/<description>([^<]+)<\/description>/g) # si contenu(s)  sur même la ligne
{
my $var1=$1; # variable de nettoyage d’éventuelles balises internes au contenu
$var1=~s/<(.+)>//g;
next if $var1=~/^Toute l’actu(.+)/; # omission de l’entête redondante
if ($var1=~/.+/)
{
$contenu.= »<extrait num=\ »$i\ »>$var1</extrait>\n »;
$i++;
}
$drop=1;
}
if (($drop!=1) && ($ligne=~/<description>([^<\/d]+)/))  # si uniquement balise ouvrante rencontrée
{
$contenu=$1;
$flag=1;
}
}
else # si contenu sur plusieurs lignes
{
if ($ligne=~ /([^<]*)<\/description>/) # si balise fermante rencontrée
{
$multi.=$1;
$flag=2;
}
else
{
$contenu=$ligne;
}
}
if ($flag==1)
{
chomp($contenu); # suppression du caractère de retour à la ligne (LF).
$multi.=$contenu; # accumuler le contenu multiligne
}
else
{
if ($flag==2) # s’il s’agit de contenu multiligne
{
$recup=$multi;
$multi= » »; # réinitialisation du contenu de la variable
$contenu= » »; # réinitialisation du contenu de la variable
}
else # s’il s’agit d’un contenu monoligne
{
$recup=$contenu;
$contenu= » »;
}
if (not exists ($prevlignes{$ligne})) # si la ligne n’existe pas auparavant
{
# nettoyage du contenu récupéré

$recup=~s/&#39;/\’/g;
$recup=~s/&#34;/\ »/g;
$recup=~s/è/è/g;
$recup=~s/é/é/g;
# suite nettoyage
print FILETXT « $recup \n »;
$DUMPFULL1.= »<extrait num=\ »$i\ »>$recup</extrait>\n »;
$i++;
$prevlignes{$ligne}++;
}
}
}
}
$DUMPFULL1.= »</fichier>\n »;
close(FICHIER);

#———————————————-

…………………………………………….. Jugurtha Aït Hamlat …………………………………………………..

IMPORTANT!

Posted in pluriTAL by pluritaluser on 5 mars 2009

Voici l’adresse du blog des modestes programmatrices:

http://programmatrices.over-blog.com/


Anna & Marie