29 janvier 2009

Un package PEAR pour "normaliser" une chaîne de caractères en PHP

Synopsis

Text_Normalize est le nom d'un package PEAR qui permet d'appauvrir des chaînes de caractères suivant différentes méthodes :

  • Blankchars : permet de supprimer les caractères inutiles (ponctuation, caractères de contrôle, etc ...).
  • Symbols : permet d'enlever les accents et simplifier certains caractères.
  • Stopwords : permet de supprimer les mots vides.
  • Lowercase : permet de supprimer la case.
  • Stemming : permet de supprimer les pluriels et les "s" de fin.
  • Vowels : permet de supprimer les voyelles.
  • Duplicate : permet de supprimer les caractères répétés consécutivement.

Ces modes sont cumulatifs, on peut en utiliser un seul ou plusieurs.

Text_Normalize prend en entrée une chaîne de caractères et un code langue. Ce code permet à chaque méthode de réaliser éventuellement un traitement spécifique. Pour plus de souplesse dans le réglage, on peut préciser pour chaque méthode une langue différente.

Exemples


$n = new Text_Normalize('HELLO', 'en');
echo $n->get(Text_Normalize::Lowercase);
// Affichera : "hello"

$n->set('a,;:!?..b^*c', 'en');
echo $n->get(Text_Normalize::Blankchars);
// Affichera : "a b c"

$n->set('élève', 'fr');
echo $n->get(Text_Normalize::Symbols);
// Affichera : "eleve"

$n->set('avec chacune de celle qui font ceux-ci doivent maintenant et pour longtemps faire mieux', 'fr');
echo $n->get(Text_Normalize::Stopwords);
// Affichera : "de ceux-ci et faire"

$n->set('ordinateurs', 'fr');
echo $n->get(Text_Normalize::Stemming);
// Affichera : "ordinateur"

$n->set('animaux et oiseaux de Bordeaux', 'fr');
echo $n->get(Text_Normalize::Stemming);
// Affichera : "animal et oiseau de Bordeaux"

Extensible et Paramétrable

Les méthodes proposées dans ce package ne sont pas parfaites. C'est pourquoi il est possible de facilement modifier le comportement de chacune des méthodes en créant des classes de traitement spécifique.

Exemple


require_once 'Text/Normalize/Blankchars.php';
class Pirate extends Text_Normalize_Blankchars 
{
    public function transform($str) {
        return preg_replace('/[aeiouy]+/i', ' ', $str);
    }
}

$n = new Text_Normalize('AS Nancy Lorraine', 'fr');
$n->BlankcharsLang = 'Pirate';
echo $n->get(Text_Normalize::Blankchars);
// Affichera : "S N nc  L rr n"

Téléchargement et code source

Le code source est disponible sur GitHub : http://github.com/touv/text_normalize

Ou, on peut directement l'installer avec PEAR en s'abonnant au Channel Respear :


% pear channel-discover pear.respear.net
% pear install respear/Text_Normalize

12 janvier 2009

Balader un projet versionné de poste en poste sans serveur central ?

J'ai déjà, par le passé, rédigé 2 articles montrant comment balader des fichiers de poste en poste avec une clé USB :

Le temps passe et les techniques avancent. Voici donc une autre méthode, en utilisant cette fois-ci, un gestionnaire de version décentralisé en l'occurrence git.

Énoncé

Soient deux postes nommés A et B. Soit un projet nommé P contenant un fichier F.

Comment modifier F sur A pour aller ensuite le modifier sur B avant de revenir sur A.

Vous me suivez ;-)

Préambule

Pour utiliser git, il faut que le projet P soit gérer par git. Pour cela :


touv@A ~ % cd p
touv@A ~/p % git init
touv@A ~/p % touch f
touv@A ~/p % git add f
touv@A ~/p % git commit

Mettre le projet sur une clé USB

Ici, le but est de cloner le projet dans un répertoire sur la clé USB puis
de récupérer les modifications faites dans le répertoire d'origine.


touv@A ~ % cd /media/usb
touv@A /media/usb % mkdir p
touv@A /media/usb % git clone ~/p

Modifier le projet sur un autre poste

Comme précédemment, il faut cloner le projet sur le nouveau poste.


touv@B ~ % git clone /media/usb/p
touv@B ~ % cd p
touv@B ~/p % cat "Coucou c'est B" >> f
touv@B ~/p % git commit

Ensuite, il nous faut envoyer les modifications locales sur la clé USB :


touv@B ~/p % git repack
touv@B ~/p % git prune-packed
touv@B ~/p % cd /media/usb/p
touv@B /media/usb/p % git pull ~/p
touv@B /media/usb/p % git commit -a --no-verify --message "en balade"

Revenir sur le poste de départ et continuer le travail

Ici, il suffit de "tirer" les sources de la clé USB.


touv@A ~ % cd p
touv@A ~/p % git pull /media/usb/p master
touv@A ~/p % cat f
Coucou c'est B

Et, rejouer ce petit scénario autant de fois que l'on souhaite ...