Les rubriques Culture et Livres sur lemonde.fr


J'ai choisis comme support pour le corpus les fils RSS du journal Le Monde sur les Livres (0,2-3260,1-0,0.xml) et ceux sur la Culture (0,2-3246,1-0,0.xml) recueillis tous les jours de l'année 2008 à 19h. Un fil RSS est un lien stable qui pointe vers des liens qui s'actualisent en ligne proposant des lectures ciblées et renouvelées fréquemment auxquelles on peut s'abonner au moyen d'un navigateur qui accepte des marque pages dynamiques comme Mozilla ou d'un site qui accepte des modules comme Netvibes ou My Yahoo! afin d'avoir directement l'information sur le sujet d'actualité choisit.
Tout d'abord j'ai préparé le corpus grâce au programme parcours-arborescence-fichiers-2out.pl qui est composé d'un filtreur qui ne récupère que le texte entre les balises <description> <\/description> et d'un nettoyeur qui permet d'homogénéiser le texte afin qu'il soit compréhensible par les programmes informatiques que l'on va utiliser et que sa structure soit cohérente pour ce que l'on souhaite faire comme annotation. Et qui propose de transformer les fils RSS des rubriques livres et culture en un fichier XML: sortie-livres-culture.xml et en deux fichiers texte: livres.txt et culture.txt.
Vous pouvez tester une version primitive de parcours-arborescence-fichiers avec uniquement le filtreur en lançant perl test-filtreur-arbo.pl dans la fenêtre de commandes de Cygwin ou du terminal Unix.
Les filtreurs ont cette forme-là:
if ($ligne=~/<description><([^<]+)<\/description>/) {
my $recup=$1;
};
Le motif c'est: <description>([^<]+)<\/description> , il désigne toutes les séquences de caractères qui ne commencent pas par une balise ouvrante, qui contiennent au moins un caractère et qui sont entourées par les balises <description>. Le $1 est une variable prédéfinie du langage Perl, il désigne la première parenthèse rencontrée dans le motif, l'associer à une nouvelle variable permet de récupérer le motif sans les balises description.
Et comme quand on recherche le contenu de toutes les balises <description> on récupère plein de liens HTML et de mots écrits avec des entités HTML (accents, caractères spéciaux) alors on utilise un nettoyeur pour rechercher et remplacer chaque ligne mal écrite. Et quand il y a des lignes répétées qu'on ne souhaite pas avoir comme "Toute l'actualitA© au moment de la connexion", on la recherche et la remplace par rien ou par un espace ( ) ou par un retour charriot (\n).
Les nettoyeurs ont cette forme-là:
$recup=~s/ancienne séquence/nouvelle séquence/g;
ou
if ($recup=~/motif/g) {
$recup=~s/ancienne séquence/nouvelle séquence\n/g
};
Les anciennes séquences s'écrivent généralement sous forme d'expressions régulières, et dans les nouvelles séquences on peut rajouter quelques items propres aux expressions régulières comme les retours charriots (/n).
Puis supprimé les lignes redondantes des fichiers texte en sortie grâce à la commande sort -u de Cygwin qui permet de sauvegarder un fichier dont les lignes sont triées alphabétiquement sans leurs doublons et qui est téléchargeable dans le package coreutils: GNU core utilities (includes fileutils, sh-utils and textutils) à partir du setup.exe de Cygwin. Les fichiers en sortie qui ont servi de corpus sont les suivants: culture-un.txt et livres-un.txt. Puis étiqueté le texte grâce à TreeTagger et à Cordial et obtenu de simples fichiers étiquetés: culture-un-c.cnr, culture-un-3.txt, livres-un-3.txt et livres-un-c.cnr.

Enfin j'ai décidé de normaliser les étiquettes de Cordial sur celles de TreeTagger avec c-norm-3.pl et j'ai obtenu livres-un-c3.txt et culture-un-c3.txt, ce qui m'a permis d'utiliser le même programme que Treetagger: cordial2xml.pl qui tout comme treetagger2xml.pl permet de transformer les étiquettes en balises XML. Il est vrai qu'on avait des programmes pour extraire les patrons comme extrait-term-c.pl ou extract-patron-cordial-nom-prep-nom.pl. Mais c'est beaucoup plus pratique quand on a la même norme, les fichiers étiquetés par Cordial ont la norme -c3- et ceux par TreeTagger -3-. Ensuite j'ai enlevé les extensions concaténées issue des deux programmes et rajouté la partie de nom -balise avec ext2html-ext2xml.pl afin d'obtenir des nom-de-fichier-balise.xml et j'ai démultiplié mes quatres fichiers xml, culture-un-3-balise.xml, culture-un-c3-balise.xml, livres-un-c3-balise.xml, et livres-un-3-balise.xml, en fonction des patrons à rechercher (NA, NN et NPN) grâce à xml2multi.pl. Et comme il y avait les mêmes étiquettes, on a pu utiliser les mêmes feuilles de style (-3-) pour traiter avec Xpath les résultats de TreeTagger et de Cordial:
style-3-NOM-ADJ.xsl x (culture-un-3-NA.xml + livres-un-3-NA.xml) = (culture-un-3-NA.xml + livres-un-3-NA.xml)
style-3-NOM-NOM.xsl x (culture-un-3-NN.xml + livres-un-3-NN.xml) = (culture-un-3-NN.xml + livres-un-3-NN.xml)
style-3-NOM-PREP-NOM.xsl x (culture-un-3-NPN.xml + livres-un-3-NPN.xml) = (culture-un-3-NPN.xml + livres-un-3-NPN.xml)
style-3-NOM-ADJ.xsl x (culture-un-c3-NA.xml + livres-un-c3-NA.xml) = (culture-un-c3-NA.xml + livres-un-c3-NA.xml)
style-3-NOM-NOM.xsl x (culture-un-c3-NN.xml + livres-un-c3-NN.xml) = (culture-un-c3-NN.xml + livres-un-c3-NN.xml)
style-3-NOM-PREP-NOM.xsl x (culture-un-c3-NPN.xml + livres-un-c3-NPN.xml) = (culture-un-c3-NPN.xml + livres-un-c3-NPN.xml)
L'éditeur XML Cooktop nous a permis de vérifier la bonne formation des fichiers XML et XSL ainsi que de tester les chemins Xpath.

Puis on a voulu comparer l'étiquetage de TreeTagger qui est un programme gratuit avec celui de Cordial qui est payant, en créant 3 feuilles de style -3c- qui appliquent un style tableau à deux colonnes version HTML sur les fichiers issus de deux2one.pl, programme permettant de modifier et concaténer deux fichiers XML en un. Et on a obtenu:
style-3c-NOM-ADJ.xsl x (culture-un-3c-NA.xml + livres-un-3c-NA.xml) = (culture-un-3c-NA.xml + livres-un-3c-NA.xml)
style-3c-NOM-NOM.xsl x (culture-un-3c-NN.xml + livres-un-3c-NN.xml) = (culture-un-3c-NN.xml + livres-un-3c-NN.xml)
style-3c-NOM-PREP-NOM.xsl x (culture-un-3c-NPN.xml + livres-un-3c-NPN.xml) = (culture-un-3c-NPN.xml + livres-un-3c-NPN.xml)

La comparaison de chacun des fichiers issus de TreeTagger avec ceux issus de Cordial matérialisée dans un fichier à deux colonnes nous a permis de voir qu'il y avait des points communs dans les groupes de mots qui s'affichent, et je propose de faire un tableau à quatre colonnes avec tous les mots relatifs au domaine lexical de la profession. Ce sont les fichiers XSL qui font la sélection des mots grâce à XPATH.

Donc on a pris un fichier livres-un-3c-(patron).xml et un fichier culture-un-3c-(patron).xml et on les
a fusionnés grâce à la version générale de deux2one.pl pour en faire un grand fichier -3c-(patron)-gr.xml avec <document></document> comme racine et <livres></livres> et <culture></culture> comme noeud de deuxième niveau pour les rubriques livres et culture.

Puis on a édité les fichiers XSL de sorte à pouvoir faire la requête de tous les mots qui contiennent tel suffixe, que ce suffixe soit présent dans le premier mot lexical ou dans le deuxième mot lexical lorsque les deux mots sont interconnectés.

<xsl:when test="(./data[contains(text(),'phe')]) and (./data[contains(text(),'NOM')]) and (following-sibling::element[1][./data[contains(text(),'ADJ')]]) or ((./data[contains(text(),'NOM')]) and (following-sibling::element[1][(./data[contains(text(),'ADJ')]) and (./data[contains(text(),'phe')])]))"> <font color="red"><xsl:value-of select="./data[3]"/></font><xsl:text> </xsl:text>
</xsl:when>

<xsl:when test="(./data[contains(text(),'ADJ')]) and (preceding-sibling::element[1][(./data[contains(text(),'NOM')]) and (./data[contains(text(),'phe')])]) or ((./data[contains(text(),'phe')]) and (./data[contains(text(),'ADJ')]) and (preceding-sibling::element[1][(./data[contains(text(),'NOM')])]))"> <font color="blue"><xsl:value-of select="./data[3]"/></font><br/>
</xsl:when>

Et on a illustré ces nouvelles requêtes par des graphes réalisés par le programme patron2graphe.exe qui se lance ainsi: ./patron2graphe.exe "iso-8859-1" NA-gr.txt motifNA-gr.txt puis on a transformé les fichiers XML en fichiers HTML en lançant Saxon-B (la version freeware de SAXON-SA sur sourceforge.net) sur DOS. Saxon fonctionne aussi bien sur l'Invite de commandes que sur Cygwin, il suffit de changer le sens des slash pour changer de système d'exploitation (Invite de commandes = DOS / Cygwin = UNIX) et de ne pas considérer les chemins absolus comme des chemins relatifs sous DOS (pas de point).

livres-culture-un-3c-NA-gr.xml + style-3c-NOM-ADJ-gr.xsl + Transform.exe = livres-culture-un-3c-NA.html
livres-culture-un-3c-NN-gr.xml + style-3c-NOM-NOM-gr.xsl + Transform.exe = livres-culture-un-3c-NN.html
livres-culture-un-3c-NPN-gr.xml + style-3c-NOM-PREP-NOM-gr.xsl + Transform.exe = livres-culture-un-3c-NPN.html

L'intérêt du programme Transform de Saxon est que une page HTML s'affiche d'après mon expérience beaucoup plus vite qu'une page XML.


Tous ces traitements automatiques ont été faits à partir des fichiers textes livres-un.txt et culture-un.txt qui ont été obtenus grâce au programme parcours-arborescence-fichiers-2out.pl et à la commande sort -u qui a enlevé les doublons. En utilisant le programme Pajek qui dessine des graphes dans Le Trameur à partir de patrons étiquetés par TreeTagger, on peut remarquer que le fichier culture-un.txt contient plus de segments NOM ADJ que le fichier livres-un.txt et qu'il y a plus de répétition au niveau de la fréquence des mots ce qui génère plus d'arcs.
livres-un.txtculture-un.txt

Finalement au sujet des expressions régulières en informatique, aussi bien en Perl, que en Bash que en XPATH, ce n'est pas parce que elles sont bien formulées qu'elles vont bien marcher, car leur fonctionnement dépend des objets qu'on analyse, généralement elles fonctionnent mal pour rechercher les métacaractères et les méta-mots réservés aux programmes, et de comment le langage s'exécute, ce qui pour nous est un mystère qu'on n'arrête pas de décoder en faisant des petits essais pour des grandes intentions jusqu'à trouver la formule qui fonctionne ou la formule qui fonctionne dans la plupart des cas ou déclarer forfait ou trouver quelque chose de différent qui a le même effet. Perl et Bash sont adaptés pour rechercher du texte alphanumérique mais pas pour rechercher des points ni des slash ni des espaces. Donc une phrase peut commencer par une majuscule mais ne peut pas se terminer par un point et un mot ce n'est pas un espace entre deux blancs. XPATH est adapté pour la requête de balises XML, donc une phrase ne se définit pas par le texte qu'elle contient mais par les balises XML qui la délimitent, et on ne peut pas rechercher des mots accentués car XSL ne les reconnaît pas, d'où l'identité d'un mot ne réside pas dans sa partie accentuée. On en déduit que les régularités en informatique sont très différentes des régularités de notre esprit en métamathématiques, mais contrairement au méta-monde les régularités en informatique ont un effet sur le monde, les expressions régulières en informatique ne sont pas là pour décrire le fonctionnement du langage alors que c'est ce qu'on aimerait apprendre en linguistique générale, avoir un bon outil méta-mathématique pour décrire le langage humain d'un point de vue interne, elles sont là pour produire un deuxième discours sur le monde, elles nous permettent d'avoir un effet sur la langue, ce dont on ne s'y attendait pas. Partir d'un discours pour en obtenir un second, tout en restant extérieur à notre objet d'analyse, c'est l'effet de la technologie et c'est innovant. Parce que avant ce n'était pas possible d'avoir un point de vue externe sur le langage.

  1. Éditeurs HTML: je ne pouvais pas faire toute seule toutes ces pages... Perl m'a aidé.
    Programmes universaux pour l'HTML
    accents.plPermet de convertir les accents de n'importe quel type de fichier en entités HTML sans toucher aux metacaractères (chevrons ouvrant, fermant ou guillemets)
    paragraphes.plPermet de mettre des paragraphes dans les sauts de ligne et des retours à la ligne en fin de ligne sans toucher aux accents ni aux metacaractères (chevrons ouvrant, fermant ou guillemets)

    Programmes généraux pour l'HTML
    perl2html.plPermet d'afficher les programmes Perl en HTML
    txt2html.plPermet d'afficher les fichiers TXT en HTML
    xml2html.plPermet d'afficher les fichiers XML en HTML (usage non courant)
    ext2html-ext2xml.plPermet de modifier vos extensions concaténées en .html et .xml
  2. Parcours arborescence fichiers
    parcours-arborescence-fichiers-2out.pl Permet de transformer les fils RSS sur la rubrique culture et livres en un fichier XML et deux fichiers texte.
    2xml2html.pl Permet d'afficher la sortie XML de parcours-arborescence-fichiers-2out.pl en HTML en faisant le même parcours que celui-ci.
    test-filtreur-arbo.plPermet de tester parcours-arborescence-fichiers-2out.pl sans le nettoyeur et sans la sortie XML, le résultat n'est pas réutilisable.
  3. Cordial aux normes de TreeTagger
    treetagger2xml.plL'original qui transforme les étiquettes de TreeTagger en balises XML.
    c-norm-3.plPermet que de normaliser les étiquettes se référant à la catégorie grammaticale de Cordial vers celles de TreeTagger (aka type).
    cordial2xml.plLa copie qui transforme les étiquettes de Cordial en balises XML.
    ext2html-ext2xml.plPermet de modifier vos extensions concaténées en .html et .xml
    xml2multi.plPermet de faire des copies des fichiers XML sous d'autres noms, en particulier de démultiplier des -3-balise.xml et des -c3-balise.xml en -3-patron.xml et -c3-patron.xml.
    deux2one.plPermet de fusionner deux fichiers XML et rajouter sa feuille de style (-3c- ou autre) notamment pour comparer un fichier issu de TreeTagger avec un issu de Cordial.

Tous ces programmes sont disponibles en permanence sur MyBloop.

Copyrights:
Pour le texte:
Creative Commons License
Les rubriques Culture et Livres sur lemonde.fr par Del Socorro Françoise est mis à disposition selon les termes de la licence Creative Commons Paternité-Partage des Conditions Initiales à l'Identique 2.0 France.
Pour les programmes sur MyBloop: Mes éditeurs HTML en Perl et Cordial aux normes de TreeTagger.
CC-GNU GPL
This software is licensed under the CC-GNU GPL version 2.0 or later. Remarque pour Cordial aux normes de TreeTagger, il y a des éléments de Cordial et de TreeTagger.
Et pour Parcours arborescence fichiers, la structure générale vient des programmes distribués par Serge Fleury pour ses élèves.

Remerciements:
Professeurs: Fleury Serge, Daube Jean-Michel et Belmouhoub R.
Elèves: Chaar Foutoun et Aouini Mourad.