Boîte à Outil 3

Récupération des patrons morphosyntaxiques

Idée principale

Cette 3e étape a un script indépendant. Il utilise les fichiers annotés avec Talismane obtenus dans l’étape précédente, et renvoie un fichier txt avec les patrons morphosyntaxiques trouvés dans le corpus. J’ai numéroté les résultats trouvés dans le fichier txt.

L’idée principale de ce script n’est pas compliquée : on crée d’abord 2 listes par leur ordre dans le corpus annoté, une pour les tokens et l’autre pour leurs étiquettes POS; ensuite, il faut comparer l’etiquette POS et ses suivants avec la suite proposée par patron; si on trouve une suite, on stockera ses tokens correspondants dans la liste de sortie.

Avec ce script, j’ai testé ces 4 patrons morphosyntaxiques suivants dans la rubrique « à la une » (3208) :

ADJ+NOM

NOM+ADJ

NOM+PREP+NOM+PREP

VERBE+DET+NOM

Finalement, voici le script et les résultats obtenus :

Script et résultat

#!/usr/bin/perl -w

#------------------------------------------------
#usage:
# perl BaO3.pl nom_fichier_talismane patron
#example:
# perl BaO3.pl sortieTalismane_3208.txt V DET NC
#fichier obtenu:
# sortie_patron_chainePatron.txt
#------------------------------------------------

use utf8;

#----------------------------------
#obternir les arguments du terminal
#----------------------------------
my $fichier = shift(@ARGV);   #nom du fichier Talismane
my @patron = @ARGV;    #suite du patron
my $chaine_patron = join("",@patron); #créer la chaine de patron pour la comparaison plus tard

#------------------------------------------------------------------------------------
#lecture du fichier Talismane,obtenir la liste des tokens et la liste de leur POS tag
#------------------------------------------------------------------------------------
open(TALISMANE, "<:encoding(utf8)", $fichier);
my @liste_formes = ();  #liste de token
my @liste_pos = ();     #leur tag
while (my $ligne=<TALISMANE>){
	if ($ligne =~ /^[0-9]+\t[^\t]+\t[^\t]+\t[^\t]+\t/){
		chomp ($ligne);
		my @token_info = split(/\t/,$ligne);
		push(@liste_formes, $token_info[1]);
		push(@liste_pos, $token_info[3]);
	}
}
close TALISMANE;

#---------------------------------------------------------
#chercher les patrons dans la liste, stocker les résultats
#---------------------------------------------------------
#liste globale pour stocker les patrons trouvés
my @liste_patrons = ();
#on prend chaque fois le tag et sa forme correspondante, au début de la liste, en même temps, on les supprime de leur liste
while (my $tag = shift(@liste_pos)){
	my $forme = shift(@liste_formes);
	if  ($tag eq $patron[0]){        #si trouver le début, on compare les suivants
		$terme = "$forme ";          #initialiser la chaine comforme au patron requis
		$suite_tag = "$tag";         #chaine de tags trouvé
		for (my $compteur = 0; $compteur <= $#patron-1; $compteur++) {
			
			#puisqu'on a supprimé le tag quand on le prenais, donc, l'élément premier dans @liste_pos doit maintenant correspondre le 2e dans @patron
			if ($liste_pos[$compteur] eq $patron[$compteur+1]){
				$terme = $terme.$liste_formes[$compteur]." ";
				$suite_tag = $suite_tag.$liste_pos[$compteur];
			}	
		}
		#vérifier la suite trouvée comforme au patron jusqu'à la fin
		if ($suite_tag eq $chaine_patron){
			push(@liste_patrons, $terme);  #ajouter dans liste globale
		}
		
	}
}

#----------------------------------------
#écriture du résultat dans un fichier txt
#----------------------------------------
my $chainePatron = join("-",@patron);
open(SORTIE, ">:encoding(utf8)", "sortie_patron_$chainePatron.txt");
$count = 1;
foreach $p (@liste_patrons){
	print SORTIE "$count\t$p\n";
	$count++;
}
close SORTIE;

BoA3-bis : des textes aux graphes

Avec le logiciel fourni par le prof, j’ai obtenu 3 graphes sur la rubrique « à la Une ». Les trois motifs utilisé sont à propos de « pouvoir/politique », « économie/finance » et « société/socio » respectivement.

Images obtenues

Pouvoir/politique

Économie/finance

société/socio

Bilan des résultats

Scripts, résultats obtenus, corpus de test

Savoir plus