Eclatement


Une fonction extrêmement utile en Perl est la fonction split, qui éclate une chaîne de caractère en sous parties, et la place dans un tableau. Cette fonction utilise une expression régulière, et comme d'habitude, fonctionne par défaut avec $_.

Voici un exemple d'utilisation de la fonction split :

$informations = "Premier:Ministre:Acteur:14, rue Saint Honoré";
@personne = split(/:/, $informations);
 

ce qui a pour effet d'affecter à @personne :

@personne = ("Premier", "Ministre", "Acteur", "14, rue Saint Honoré");
 

Si on a préalablement affecté $informations à $_, on peut effectuer un appel plus simple :

@personne = split(/:/);
 

On peut utiliser les ER : par exemple, si on ne connait pas le nombre de colonnes, on peut écrire :

$_ = "Dupont:Jean::Boulanger:::Avenue des champs Elysées";
@personne = split(/:+/);

ce qui donnera

@personal = ("Dupont", "Jean",
             "Boulanger", "Avenue des champs Elysées");
 

Par contre :

$_ = "Dupont:Jean::Boulanger:::Avenue des champs Elysées";
@personne = split(/:/);
 

aura pour résultat :

@personal = ("Dupont", "Jean", "",
             "Boulanger", "", "", "Avenue des champs Elysées");
 

Un paragraphe peut être séparé en phrase, une phrase en mots, et un mot en caractères.

@caracteres = split(//, $mot);
@mots = split(/ /, $phrase);
@phrases = split(/\./, $paragraphe);
 

Dans le premier cas, on recherche une chaîne nulle entre chaque caractère : c'est pourquoi le tableau @caracteres est un tableau de caractère - ie un tableau de chaînes de longueur 1.


Exercice

Un outil pratique des traitements de texte en language naturel est la concordance. Cela permet d'afficher une chaîne particulière en colonne, mais dans son contexte, où qu'elle apparaisse dans le texte. Par exemple, un programme à base de concordance va identifier les "le", et fournir un affichage suivant :
Notez que les occurences de "le" sont alignées verticalement :

été découvert (c'est le cas) que, quand il p
ourrant, et parfois, le métal se rétracte en 
e procédé a accéléré le développement de la 
nsi fut inventé mais le plus grand des inven
est alors il réalisa le retard technologique

L'excercice consiste à écrire un tel programme. Voici quelques aides :

Tel quel, cela fera un bon programme, mais le mot recherché ne va pas s'aligner sur une colonne. Pour effectuer cet effet, il vous faudra utiliser la fonction substr. Voici trois exemples d'utilisation :

substr("Il était une fois", 3, 4);	# renvoie "étai"
substr("Il était une fois", 7);		# renvoie "t une fois"
substr("Il était une fois", -6, 5);	# renvoie "e foi"
 

Le premier exemple renvoie une sous-chaîne de longueur 4, à partir de la position 3. Rappelez vous que le premier caractère d'une chaîne à un index de 0. Le deuxième exemple montre l'effet de l'omission de la longueur de la sous-chaîne souhaitée : substr renvoie la fin de la chaîne à partir du caractère 7. Le troisième exemple présente le cas d'un nombre négatif : substr renvoie alors les 5 caractères à partir du 6ème, mais en partant de la fin.

So vous utilisez un index négatif qui dépasse le début de la chaîne, alors le Perl ne renverra rien, ou une alarme. Pour éviter ceci, vous pouvez aggrandir la chaîne avec l'opérateur x : l'expression " "x30 produit 30 caractères espaces.


Precedent Start Suivant