Projet Encadré

Le projet

Le but de ce projet est d'extraire des patrons pour réaliser des graphes sur des données issues du journal Le Monde. Quatre étapes, ou quatre "Boîtes à Outils", seront nécessaires à la réalisation de ce travail :

Boîte à outils 1

Filtrage automatique des fils RSS issus du journal Le Monde, année 2016.

Boîte à outils 2

Etiquetage morpho-syntaxique des fils RSS récupérés.

Boîte à outils 3

Extraction de n'importe quel patron syntaxique.

Boîte à outils 4

Production de graphes à partir des patrons syntaxiques de la BàO 3.

Boîte à Outils 1

Objectif

Parcourir l'arborescence des répertoires et des fichiers contenant les fils RSS, puis extraire le contenu textuel entre les balises "titre" et "description".

Perl

Avant d'exécuter le script, vérifier si le module Unicode::String est bien installé.


	#/usr/bin/perl
	use Unicode::String qw(utf8);		
					

Le programme produit deux sorties : une sortie .txt et une autre .xml.


	my $output1="SORTIE-extract-txt-".$rubrique.".xml";
	my $output2="SORTIE-extract-txt-".$rubrique.".txt";			
					

L'extraction des données qui nous intéressent s'effectue par l'expression régulière suivante :


	while ($texte =~ /<item><title>(.+?)<\/titre>.+?<description>(.+?)<\/description>/g) {
			my $titre=$1; #premiere extraction
			my $resume=$2; #deuxieme	
					

Les textes sont nettoyés grâce à la fontion nettoietexte :


	sub nettoietexte {
		my $texte=shift;
		$texte =~ s/<//g;
		$texte =~ s/<a href[^>]+>//g;
		$texte =~ s/<]+>//g;
		$texte =~ s/<\/a>//g;
		$texte =~ s/&#39;/'/g;
		$texte =~ s/&#34;/"/g;
		$texte =~ s/é/・g;
		$texte =~ s/ê/・g;
		$texte =~ s/<[^>]+>//g;
		$texte =~ s/ / /g;
		$texte=~s/'/'/g;
		$texte=~s/"/"/g;
		$texte=~s/&#39;/'/g;
		$texte=~s/&#34;/"/g;
		return $texte;
	}
					

Boîte à Outils 2

Objectif

On procède à l'étiquetage morphosyntaxique de chaque mot récupéré. On s'aide pour cela de deux étiqueteurs :

  • Cordial : qui utilisera la sortie texte brut
  • TreeTager : qui utilisera la sortie xml

TreeTager

On intègre dans le script perl de la BàO1 quelques lignes qui vont nous permettre de lancer TreeTager.

Tout d'abord, on crée deux nouveaux fichiers : une entrée et une sortie pour TreeTager :


my $TreeTaggerIn="TreeTagger_in.txt";
my $TreeTaggerOut="TreeTagger_out.txt";
						

Puis, on insère l'appel de la procédure etiquetage qui utilise des commandes system :


sub etiquetage {
	system("perl ./TreeTagger/cmd/tokenize.pl $TreeTaggerIn | ./TreeTagger/bin/tree-tagger -token -lemma -no-unknown -sgml ./TreeTagger/lib/french-utf8.par > $TreeTaggerOut");
	  
	system("perl ./TreeTagger/cmd/treetagger2xml.pl $TreeTaggerOut");
	
}
						

Les options :

  • token : permet l'étiquetage en mot
  • lemma : permet l'étiquetage en lemme
  • no-unknown : permet de ne pas avoir de catégorie inconnue dans le fichier de sortie
  • sgml : permet au logiciel de ne pas interptéter les balises

Ma version de Windows n'étant pas compatible, on exécute le programme sous Linux.

Pour convertir du format texte brut au format XML, on utilise le script treetagger2xml.pl.

Boîte à Outils 3

Objectif

C'est dans cette boîte à outils que l'on va extraire les patrons morphosyntaxiques.

Script "récupération de patron"

Pour récupérer facilement les différents patrons des utilisateurs, on crée un script qui va les mettre de côté dans un fichier nommé patron.txt.


#!/usr/bin/perl
#--------8<--Récupération des patrons---------------------------

my $patron_fichier="patron.txt";

open (OUT,">:encoding(utf-8)",$patron_fichier);

print "Veuillez entrer les patrons morphosyntaxiques\n" ;
print "(Q pour quitter)\n";
$ligne="..";

until ($ligne eq "Q") {
	$ligne=;
	chomp($ligne);
	if ($ligne ne "Q") {
		print OUT $ligne,"\n";
		}
	}
close (OUT);

print "Extracting…\n";

system("perl ./bao3_cordial.pl rubrique-3260.cnr $patron_fichier");						
						

Le programme lance ensuite les scripts d'extraction pour les fichiers destinés à TreeTager ou les fichiers destinés à Cordial. Si l'on veut lancer le script pour l'extraction de patron de TreeTager, on écrit la commande system suivante :


system("perl ./bao3_TreeTager.pl rubrique-3260.xml $patron_fichier");		
						

Les patrons extraits ici sont :

  • NOM ADJ
  • NOM ADJ NOM
  • VER ADJ

Ces patrons sont extraits de deux rubriques : la rubrique-3246 qui correspond à la rubrique Culture et la rubrique-3260 qui correspond à la rubrique Livres.

Scripts d'extractions

Les scripts d'extractions utilisés sont "bao3_treetagger.pl et bao3_cordial.pl.

Résultats

Rubrique Culture

Rubrique Livres

Boîte à Outils 4

Objectif

La dernière étape de ce projet est la constitution de graphes, qui permettent de mettre en relief les relations des éléments extraits à partir des patrons syntaxiques de la BàO 3.

Script

Pour réaliser ces graphes, on s'aide du script patron2graphe.exe disponible ici.

Le programme fonctionne de la manière suivante :


patron2graphe.exe "codagedes2fichiers" FichierEnEntree FichierContenantLeMotif

par exemple :

1. Pour afficher tous les noeuds du graphe
patron2graphe.exe "iso-8859-1" patrons-1.txt

2. avec uniquement des noeuds obtenus par filtrage prealable du motif dans les patrons
patron2graphe.exe "iso-8859-1" patrons-1.txt motif-iso-8859-1.txt					
						

Le programme s'exécute sous Windows :

Les graphes

Les rubriques choisies étant un peu moins fournies que les autres rubriques, les patrons "NOM ADJ NOM" ou "VER ADJ" ne renvoient pas assez de résultats pour les analyser correctement.

Nous nous penchons de ce fait sur le patron NOM ADJ.

  • /bauteur

Rubrique Livres

Rubrique Culture

  • /bartiste

Rubrique Livres

Rubrique Culture

  • /bécrivain

Rubrique Livres

Rubrique Culture

  • /bcomédie

Rubrique Culture

Analyse

Sans surprise, les cooccurents de ces motifs représentent pour la plupart des adjectifs de nationalité. Si l'on devait tirer quelque chose de ce constat, on pourrait tout simplement dire que cela montre l'importance de l'information d'appartenance que l'on attache à l'identification d'une personne pour la présenter, elle ou son oeuvre. Un point se détache toutefois : lorsque les motifs apparaissent au féminin, on peut voir, outre la nationalité, des termes comme "féministe" apparaître.