Cours

Séance 8 (16/03/16)

On va récupérer les mots correspondant aux étiquettes : il faut connaître leur rang/indice.

Capture d’écran 2016-03-16 à 12.10.32.png


Le script 2 prend les étiquettes morphosyntaxiques en argument :

Capture d’écran 2016-03-16 à 12.41.32.pngTransformation du fichier Cordial en une liste pour comparer cette liste avec les arguments. Liste de toute les chaînes et dans ARGV la sous-liste des éléments du patron.
La liste Cordial va être vidée progressivement.
Ici on recherche la séquence NOM-ADJ :
– si ligne de la liste cordial contient NOM, on regarde si la ligne suivante contient ADJ, si oui, on imprime.

Modifier ce programme pour Treetagger.


Comparer les résultats obtenus entre les différents programmes.

Séance 7 (09/03/16) : Début BAO3

BA01 : extraction texte brut
BAO2 : étiquetage cordial et étiquetage Treetagger en xml
BAO3 (1) : travail sur le texte étiqueté par Cordial
BAO3 (2) : travail sur le texte étiqueté par Treetagger avec une feuille de style xslt


BAO3: extraire des séquences de termes associés à des patrons morphosyntaxiques.
Affichage graphique

Aujourd’hui : BAO3 (1): travail sur le texte étiqueté par Cordial

(Deuxième colonne : lemme)Capture d’écran 2016-03-09 à 11.01.37.png

On fait tout ça pour trouver dans les textes des indices qui peuvent permettre une interprétation. On fait une recherche terminologique. Au lieu de faire des statistiques textuelles, on va chercher des indices dans le texte basés sur des patrons morphosyntaxiques (ex: NOM-PREP-NOM). La sortie sera des candidats termes (ex : déplacement en province). Fichier d’entrée : fichier Cordial, fichier programme et fichier des motifs terminologiques :

Capture d’écran 2016-03-09 à 11.07.40.png

Capture et analyse de la colonne 3 du fichier cordial et comparaison avec le fichier motif.

Deux étapes :
1) Extraction du contenu des colonnes dans des listes :
– lecture ligne par ligne et ajout dans 3 listes du contenu par colonne
– traitement du fichier par ligne du fichier motif
attention à la ponctuation qui coupe les patrons (traitement phrase par phrase) : délimiteur.

Capture d’écran 2016-03-09 à 12.40.23.png

On compare la liste des motifs avec le contenu du fichier Cordial (pour tester le programme on recherche les prépositions qui sont nombreuses…) :

Pas de match : 
pasMatch.png

Match :
match.png



Séance 6-7 (24/02/16 et 09/03/16)

 Objectif du jour : terminer BAO1 et BAO2 

Le Monde en Surface :

OK Application n°2  : PROGRAMME PARCOURS n°1 (pur Perl + regexp) – extraire les contenus textuels (des rubriques ici 3208, 3210, 3214) de tous les fichiers RSS de l’arborescence 2015

Capture d’écran 2016-02-24 à 11.53.39.png

Capture d’écran 2016-02-24 à 12.05.25.png

Capture d’écran 2016-02-24 à 12.06.39.png


En cours Application n°2bis : PROGRAMME PARCOURS n°2 (via XML::RSS) – extraire les contenus textuels(des rubriques ici 3208, 3210, 3214) de tous les fichiers RSS de l’arborescence 2015 

        Lancer Active State :
         sudo /usr/local/ActivePerl-5.16/bin/ppm

        Installer la bibliothèque XML::RSS :

Capture d’écran 2016-03-05 à 10.26.05.png

     Vérifier son installation : 
     /usr/local/ActivePerl-5.16/bin/perl -e "use XML::RSS"

     Lancer le programme depuis le terminal :
     /usr/local/ActivePerl-5.16/bin/perl extract-txt-avec-xml-rss.pl 0,2-3208,1-0,0.xml > resultat.txt

Capture d’écran 2016-03-09 à 09.52.25.png
Il y a quelques problèmes d’encodage mais il ne s’agit que d’un fichier test.
Notre corpus 2015 est encodé en UTF-8. 

Il faut désormais utiliser notre programme sur toute l’arborescence du corpus 2015 en l’intégrant au programme qui parcours l’arborescence :         A FAIRE.


OK Application n°4  : PROGRAMME PARCOURS n°1 (pur perl + regexp) – (1) extraire les contenus textuels(des rubriques ici 3208, 3210, 3214) + (2) étiquetage via treetagger de tous les fichiers RSS de l’arborescence 2015

Capture d’écran 2016-03-22 à 15.08.44.png


A FAIRE Application n°4bis : PROGRAMME PARCOURS n°2 (via XML::RSS) – (1) extraire les contenus textuels(des rubriques ici 3208, 3210, 3214) + (2) étiquetage via treetagger de tous les fichiers RSS de l’arborescence 2015


OK Les sorties « TXT brut » des programmes de parcours devront être étiquetées avec Cordial

ApercuCordial1

ApercuParam

Capture d’écran 2016-02-24 à 12.36.49



Le Monde Profond :

En cours (seulement sur 2016) Application n°3 : PROGRAMME PARCOURS n°3 – extraire le texte complet des articles associés aux fichiers RSS sur l’ensemble de l’arborescence 2015

En cours Application n°4ter : PROGRAMME PARCOURS n°4 (pur perl + regexp) – (1) extraire les contenus textuels (d’une rubrique) + (2) étiquetage via treetagger des articles associés aux fichiers RSS sur l’ensemble de l’arborescence 2015

Etat : il reste encore un peu de nettoyage à faire…

Capture d’écran 2016-02-24 à 13.41.03.png

Afin d’écrire la bonne expression régulière pour le nettoyage, rien de mieux que cat -e (permet d’afficher les caractères cachés) pour regarder ce qui nous attend :

Capture d’écran 2016-03-22 à 11.37.49.png

Surprise ! Des $ débutent les lignes vides.

Avancement :

Capture d’écran 2016-03-22 à 13.43.51.png



Séance 5 : BAO2 Etiquetage (17/02)

Rappel

La BAO1 a servi à mettre en place une chaîne de traitement.
Nous avons effectué une extraction textuelle des fils RSS de deux manières: 1 programme en Perl et 1 bibliothèque. On ne travaille que sur une rubrique à la fois. C’est la partie extraction en surface. Il faudra ensuite extraire tous les contenus.

A . Le Monde en Surface (les fils RSS)

  1. Parcours d’arborescence sur le corpus (ici 2016) (Application n°2 : via perl et regexp) et traitement d’une rubrique donnée (ici 3208) :
    Capture d’écran 2016-02-17 à 11.03.03.png
  2. Parcours d’arborescence sur le corpus complet 2015 (Application n°2bis : via XML::RSS) et traitement d’une rubrique donnée.

Dans les 2 cas, on obtient 2 fichiers en sortie : 1 sortie txt et 1 sortie XML

B. Le Monde profond  (les articles complets associés au fils RSS)

  • A faire

Ne pas traiter les fichiers cachés (commençant pas .. ou ., ._)

Effectuer un travail de nettoyage sur le fichier de sortie pour la partie profondeur.


BAO2 : Etiquetage 

La sortie .txt sera étiquetée rapidement avec Cordial.
La sortie .xml sera étiquetée au moment du parcours avec TreeTagger (Compter 5h pour 1 rubrique). Nous proposerons les unités sur lesquelles ajouter des étiquettes.
Associer à chaque unité segmentée sa catégorie du discours et son lemme.

Cordial : 
En entrée : la sortie textuelle brute (fichier 3208.txt) produite par le programme de la BAO1
Convertir en ISO
Charger dans Cordial
On veut obtenir une liste avec la forme, le lemme et la catégorie.
(Lemmes, Abrégé en majuscules, Codage : Aucun, Ne pas corriger, ne pas signaler)

Capture d’écran 2016-02-18 à 09.02.54.png

Treetagger :
Prendre l’exécutable et le mettre dans le répertoire de travail.
Fichier de langue donné par SF.
Le premier paramètre est le fichier de langue, le deuxième est 3208.txt (fichier étiqueté par Cordial). Le fichier à étiqueter devra être segmenté en mot avec un mot par ligne : utilisation du fichier étiqueté de Cordial ou utilisation du programme de segmentation (tokenizer).
Programme Perl qui segmente, un programme qui étiquette, sortie xml

Voir treetagger2xml-utf-8.pl : prend une entrée produite par treetagger et donne une sortie xml.
perl treetagger2xml-utf-8.pl 3208_utf8.treetagger utf8
réécriture du fichier recodé en xml.


Modification du programme d’extraction pour ajouter l’étiquetage (cf. script BAO2)

Grâce à ce programme nous obtenons des xml étiquetés avec TreeTagger  :

Capture d’écran 2016-03-22 à 15.04.46.png

Capture d’écran 2016-03-22 à 15.00.21.png

 

Capture d’écran 2016-02-23 à 15.59.25.png

Quelques difficultés ont été rencontrées : il a fallu changer les droits d’exécution sur le fichier tree-tagger :

P_denied_BAO2.png

ls-l.png

après avoir tapé la commande chmod +x tree-tagger :ls-lok.png


Séance 4 (10/02) : fin de la BàO1, POO, Références

Objectif du jour : Utiliser les bibliothèques spécialisées pour parcourir l’arborescence

Bibliothèques spécialisées 
Travail sur l’arborescence XML imposée par une grammaire RSS

Réutilisation du code : 
CPAN : bibliothèque de modules. Le flux Rss est une structure de données stable : on peut s’appuyer dessus pour traiter des données.

I. POO : programmation orientée objet
Notion d’héritage.
Objet : interface graphique (voiture)
Attribut (dispositif de locomotion) : certains sont cachés, on peut y accéder via des méthodes.
Méthode : permet l’interaction d’un objet avec d’autres objets, mission de message (démarrer, freiner), activer un lien

II. Notion de table de hachage : les références 
Tout devient scalaire. Très utile pour construire des structures de données. Références anonymes et références nommées.

Capture d’écran 2016-02-10 à 11.38.57

Capture d’écran 2016-02-10 à 11.38.02

III. Utilisation de modules dans Perl :

XML::RSS XML::Lib XML
On cherche entre autres à générer des documents ici XML à partir de méthodes dans Perl
Modules Perl

Capture d’écran 2016-02-10 à 13.26.28.png



Séance 3 (04/02) : BAO1 (suite)

Objectif du jour : écrire un programme qui va parcourir l’arborescence de fichiers.

 

Corpus du jour : extrait de 2016, deux journées de RSS pour s’entraîner à traiter l’arborescence. Traiter les articles complets : extraction en texte brut et en xml.

cropped-illu_apprenez-a-programmer-en-perl1.png

Algorithme :
Dans le répertoire, y a-t-il des fichiers .xml ou .txt ?

Quand on appelle une procédure (avec &), Perl regarde la liste des arguments passés à une procédure : @_ est le nom de cette liste.

La première fois que l’on va l’appeler, on entrera en argument 2016 qui est notre répertoire de travail pour aujourd’hui. Le même code sera lancé mais avec des contenus d’argument par défaut.

La fonction shift enlève le premier élément d’une liste pour le stocker localement.

ls -la : affiche répertoires cachés

. répertoire courant : ne pas y rentrer
.. répertoire parent : ne pas y rentrer
SINON on ne bougera pas. Il ne faut pas les traiter

Structure de contrôle until (jusqu’à ce que la condition soit vraie)

Ce que l’on obtient :Capture d’écran 2016-02-23 à 15.51.49.png


Séance 2 (27/01) : BAO1 – Extraction d’informations

Objectif du jour : rechercher les balises <title> et <descritpion> d’un item.

Difficultés :

– Si le texte visé par le motif est réparti sur plusieurs lignes, le programme risque de se révéler inefficace… Le flux doit être sur une seule ligne.
=> Heureusement Le Monde a évolué : si en 2008 tout ne se trouvait pas sur une seul ligne, en 2015-2016 c’est désormais le cas !

– Le motif de filtrage choisi est-il « le meilleur » ?
=> Maintenant oui !

Faire du rechercher/remplacer:
– Nettoyage du texte (surtout pour le traitement des fils 2015)
=> (cf. « rechercher/remplacer en Perl », notion de procédure en Perl…)

Ce qu’on laisse de côté :
sur l’arborescence 2015 tout est en UTF-8, nous n’avons donc pas besoin de :
– réparer l’encodage (c’était le cas pour les fils de 2008)
– supprimer les éventuels doublons (traitement par des hachages par exemple)