banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GEODATA DAYS 2024

#1 Tue 15 November 2011 16:07

Froggies
Participant occasionnel
Date d'inscription: 3 Aug 2011
Messages: 21

Réduire le nombre de StringReplacer par un transformer unique?

Bonjour,

Je souhaite simplifier mon bench pour en améliorer la lisibilité :

J'ai un champ LIBELLE sur lequel je recherche le mot directeur (dans ce cas précis, il s'agit du dernier mot du LIBELLE) :
Exemple :
LIBELLE = les balcons du savoy
DIRECTEUR = savoy

Cependant dans certains cas particuliers, le dernier mot n'est pas le plus pertinent du LIBELLE :
Exemple: la poya d'en haut

Je passe par un tester pour obtenir les occurrences avec ce type de suffixe (d'en haut, dessus...) afin de les supprimer à l'aide d'un StringReplacer.
Dans l'exemple ci-dessus:
LIBELLE = la poya d'en haut
LIBELLE (après passage dans StringReplacer) = la poya
DIRECTEUR = poya

J'arrive à supprimer l'ensemble des suffixes indésirable seulement je me retrouve avec une vingtaine de StringReplacer les uns à la suite des autres.

Existerait-il une solution pour remplacer mes 20 StringReplacer par un seul transformer?

Merci beaucoup pour vos suggestions!

Hors ligne

 

#2 Tue 15 November 2011 16:54

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1022
Site web

Re: Réduire le nombre de StringReplacer par un transformer unique?

Je pense qu'avec un stringreplacer en cochant expression régulières et en mettant ce que tu veux faire disparaitre avec une barre | entre les possibilités

les balcons du|machin

Dis nous.

Dernière modification par heretik25 (Tue 15 November 2011 16:55)


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#3 Wed 16 November 2011 06:14

pyjoubert
Participant assidu
Lieu: Lyon
Date d'inscription: 21 Mar 2006
Messages: 343

Re: Réduire le nombre de StringReplacer par un transformer unique?

Bonjour,

Autre possibilité, tu peux utiliser un StringPairReplacer, ainsi, tu peux appareiller la 1ère substitution, la 2ème, la 3ème .... dans un même transformer. Par contre, l ne faut pas que les chaines à traiter contiennent des espaces puis que je crois que le séparateur d'item est obligatoirement le caractère espace.

tiens-nous au courant de tes avancées !

Hors ligne

 

#4 Wed 16 November 2011 14:15

Froggies
Participant occasionnel
Date d'inscription: 3 Aug 2011
Messages: 21

Re: Réduire le nombre de StringReplacer par un transformer unique?

Bonjour,

Tout d'abord merci pour les suggestions.

En utilisant dans le StringReplacer l'expression suivante D' EN BAS | D' EN HAUT

Le transformer n'a pas de problème pour la deuxième expression mais il ne supprime pas la première??? Les espaces ne le dérange pourtant pas dans D' EN HAUT.

La solution de passer par le StringPairReplacer ne fonctionne pas car l'espace est un caractère particulier de ce transformer :
D' EN BAS => D' est remplacé par EN.

L'autre soucis dans le StringPairReplacer c'est que je souhaite supprimer D' EN BAS par rien et il n'est pas possible de faire ça avec ce transformer.

Si quelqu'un avait d'autres suggestions car je sèche pour le moment!

Hors ligne

 

#5 Wed 16 November 2011 14:38

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1022
Site web

Re: Réduire le nombre de StringReplacer par un transformer unique?

Froggies a écrit:

Bonjour,

Tout d'abord merci pour les suggestions.

En utilisant dans le StringReplacer l'expression suivante D' EN BAS | D' EN HAUT

Le transformer n'a pas de problème pour la deuxième expression mais il ne supprime pas la première??? Les espaces ne le dérange pourtant pas dans D' EN HAUT.

La solution de passer par le StringPairReplacer ne fonctionne pas car l'espace est un caractère particulier de ce transformer :
D' EN BAS => D' est remplacé par EN.

L'autre soucis dans le StringPairReplacer c'est que je souhaite supprimer D' EN BAS par rien et il n'est pas possible de faire ça avec ce transformer.

Si quelqu'un avait d'autres suggestions car je sèche pour le moment!


Pourtant, chez moi ça fonctionne.

En pj, un exemple concret.


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#6 Wed 16 November 2011 16:16

Froggies
Participant occasionnel
Date d'inscription: 3 Aug 2011
Messages: 21

Re: Réduire le nombre de StringReplacer par un transformer unique?

Ca fonctionne ENFIN!!!! big_smile

La méthode d'heretik25 est la bonne. En fait j'ai trouvé pourquoi cela ne fonctionnait pas avant dans mon cas.

Je prenais le cas des suffixes D'EN HAUT. Dans ma base, le suffixe est orthographié de trois manières différentes :
D'EN HAUT
D' EN HAUT
D ' EN HAUT

Je mettais dans le transformer la liste d'expression dans cet ordre : D ' EN HAUT|D' EN HAUT|D'EN HAUT => il ne se passait rien (d'où mon dernier message).

Pour que cela fonctionne, il faut écrire l'expression dans cet ordre précis : D'EN HAUT|D' EN HAUT|D ' EN HAUT

Merci pour le coup de pouce!
Cheers

Hors ligne

 

#7 Wed 16 November 2011 16:29

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1022
Site web

Re: Réduire le nombre de StringReplacer par un transformer unique?

C'est parfait si tu as réussi, à charge de revanche !


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#8 Wed 16 November 2011 16:48

Pierre
DesCartesPourUnMondeMeilleur
Date d'inscription: 22 Sep 2005
Messages: 1643

Re: Réduire le nombre de StringReplacer par un transformer unique?

Aloha
Pour être un peu plus "orthodoxe", il faut écrire D\\s?'\\s?EN HAUT.
Cordialement,


art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.

Hors ligne

 

#9 Thu 17 November 2011 08:20

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1022
Site web

Re: Réduire le nombre de StringReplacer par un transformer unique?

Sauf qu'il n'y avait pas que des D\\s?'\\s?EN HAUT d'après ce que j'ai compris...


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#10 Thu 17 November 2011 08:59

Pierre
DesCartesPourUnMondeMeilleur
Date d'inscription: 22 Sep 2005
Messages: 1643

Re: Réduire le nombre de StringReplacer par un transformer unique?

Alors il suffit d'écrire D\\s?'\\s?EN (HAUT|BAS). Un petit cours sur les regexp est à prévoir dans le wiki à ce que je lis...


art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.

Hors ligne

 

#11 Thu 17 November 2011 09:15

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1022
Site web

Re: Réduire le nombre de StringReplacer par un transformer unique?

CF le premier message du demandeur d'aide :

Je passe par un tester pour obtenir les occurrences avec ce type de suffixe (d'en haut, dessus...) afin de les supprimer à l'aide d'un StringReplacer.
Dans l'exemple ci-dessus:
LIBELLE = la poya d'en haut
LIBELLE (après passage dans StringReplacer) = la poya
DIRECTEUR = poya


On ne sait pas combien il a de différence à traiter, apparemment une vingtaine puisqu'il avait 20 stringReplacer.

Mais bon là n'est pas la question, la méthode fonctionne pourquoi chipoter ?

Dernière modification par heretik25 (Thu 17 November 2011 10:01)


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#12 Thu 17 November 2011 09:48

Pierre
DesCartesPourUnMondeMeilleur
Date d'inscription: 22 Sep 2005
Messages: 1643

Re: Réduire le nombre de StringReplacer par un transformer unique?

Pourquoi chipoter ? :?

Parce qu'un code syntaxiquement correct est la condition sine qua non pour un traitement efficace. Efficace et facilement partageable.
Une expression régulière ce n'est pas un simple copier/remplacer, c'est l'analyse syntaxique des plus grands dénominateurs communs, selon moi. Et c'est en se fixant cet objectif que l'on peut obtenir le meilleur résultat. Sinon, pourquoi chercher à remplacer les 20 string replacer ?

Parce que je ne chipote pas, je dis juste que l'expression que je propose est plus efficiente, qu'elle respecte mieux l'esprit des expressions régulières et qu'elle permettra d'être réutiliser dans d'autres cas de figures.
Je ne critique aucune méthode, mais avec les problèmes que certains d'entre nous rencontre dans les allongements de temps de traitements FME, les problèmes d'allocations de ressources, autant ne pas gaspiller les ressources dans des syntaxes alambiquées.

Je n'exprime que mon point de vue. Et non une vérité, que les choses soient écrites. big_smile

En vous souhaitant à tous une bonne journée,


art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.

Hors ligne

 

#13 Thu 17 November 2011 10:01

Froggies
Participant occasionnel
Date d'inscription: 3 Aug 2011
Messages: 21

Re: Réduire le nombre de StringReplacer par un transformer unique?

Bonjour,

Voici la liste de l'ensemble des suffixes que je veux supprimer : (Bien faire attention au espace avant les expressions qui peuvent être important dans certains cas, l'ordre dans lequel on met les expressions a son importance également)

StringReplacer 1

D'EN HAUT|D' EN HAUT|D ' EN HAUT|
D'EN - HAUT|D`EN HAUT|
D EN HAUT|D-EN HAUT|
EN HAUT| LE HAUT| DU HAUT|
D'EN HAUTE| HAUT|
D'EN BAS|D' EN BAS|D ' EN BAS|
D EN BAS|D-EN BAS|
EN BAS


StringReplacer 2

DE DESSOUS| DE DESSUS| DESSOUS| DESSUS|
DU DEVANT| DE DEVANT| DE DERRIERE| DU DERRIERE| SUR LE DEVANT|
DEVANT| DERRIERE|
DU MILIEU

StringReplacer 3

DU NORD| AU NORD| NORD|
DU SUD| AU SUD| SUD
OUEST| EST

au final je passe par seulement 3 stringreplacer mais c'est beaucoup plus compact qu'avant (plus d'une vingtaine). Je n'ai pas testé de tout mettre dans un seul stringreplacer, cela marche sans doute, à moins qu'à un moment donné on atteigne un quota de caractères?!?

L'idée d'un cours sur les regexp semble intéressante dans mon cas.

Un grand merci à vous tous pour vos suggestions. big_smile

Dernière modification par Froggies (Thu 17 November 2011 10:04)

Hors ligne

 

#14 Thu 17 November 2011 10:04

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1022
Site web

Re: Réduire le nombre de StringReplacer par un transformer unique?

J'ai apparemment piqué au vif un fan des choses parfaitement faites ! Pour moi la regexp semblait trop compliqué à mettre en œuvre sachant les nombreux cas tous différents les uns des autres (je ne connaissais pas les cas à modifier). D'après moi, s'il faut 2 heures pour écrire la regexp pour qu'ensuite le traitement gagne 10 secondes, je me pose la question de savoir si cela est encore pertinent ? :p

Il y a donc parfois, selon moi  un monde entre la réalité et le "syntaxiquement correct".

Bonne journée également.

Dernière modification par heretik25 (Thu 17 November 2011 10:20)


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#15 Thu 17 November 2011 10:25

Pierre
DesCartesPourUnMondeMeilleur
Date d'inscription: 22 Sep 2005
Messages: 1643

Re: Réduire le nombre de StringReplacer par un transformer unique?

heretik25 a écrit:

J'ai apparemment piqué au vif un fan des choses parfaitement faites ! ...
Bonne journée également.


Piqué au vif ? C'est encore loin du compte.
Alors avec 1h d'avance, la syntaxe :

Code:

(D?\\s?\\'?\\-?\\s?EN|DE|LE|DU|SUR|AU|\\s)?(\\s?\\-?(LE)?\\s?(HAUT|BAS|DESSOUS|DESSUS|DEVANT|DERRIERE|MILIEU|NORD|SUD|EST|OUEST))E?

art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.

Hors ligne

 

#16 Thu 17 November 2011 11:09

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1022
Site web

Re: Réduire le nombre de StringReplacer par un transformer unique?

Ne partons pas dans un débat stérile, superbe regexp :clap


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#17 Fri 18 November 2011 10:42

Froggies
Participant occasionnel
Date d'inscription: 3 Aug 2011
Messages: 21

Re: Réduire le nombre de StringReplacer par un transformer unique?

Bonjour,

Je reviens sur l'utilisation d'un Stringreplacer unique mais cette fois-ci pour des caractères particuliers de type : (, ), ., -, _.....

Si je tente de les mettre dans un stringreplacer unique (|)|.|-|_ cela ne fonctionne pas! Pourquoi?

Même chose si je combine des lettres et ces caratères particuliers dans le style (hameau)?

Une idée de ce qui manque pour que cela fonctionne?

Hors ligne

 

#18 Fri 18 November 2011 11:08

Pierre
DesCartesPourUnMondeMeilleur
Date d'inscription: 22 Sep 2005
Messages: 1643

Re: Réduire le nombre de StringReplacer par un transformer unique?

Aloha
Pour utiliser des caractères autres qu'alphanumérique (",;\|...) il faut les faire précéder d'un \ en regexp, donc de \\ dans la boîte FME (cf la chaîne proposée).
Si je cherche par exemple

Code:

hameau?

Il va me falloir écrire

Code:

hameau\\?

Regexp'ement
PS. Il existe des codes pour les espaces (\\s), pour les tabulations, les retour chariot,... cf ici


art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.

Hors ligne

 

#19 Fri 18 November 2011 14:00

Froggies
Participant occasionnel
Date d'inscription: 3 Aug 2011
Messages: 21

Re: Réduire le nombre de StringReplacer par un transformer unique?

Un grand merci c'est juste ce qu'il me fallait (et merci pour le lien sur les regexp)!

Hors ligne

 

Pied de page des forums

Powered by FluxBB