IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Index full text et caractères spéciaux


Sujet :

WinDev

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 117
    Points : 90
    Points
    90
    Par défaut Index full text et caractères spéciaux
    Bonjour à tous,

    Comme à chaque fois que j'ai le nez dans le guidon et que je n'ai pas trouvé de réponse à mes interrogations sur le forum, je poste.

    Je réalise un logiciel qui comporte une partie comptable (un enfer ), et je souhaite mettre en place un algo qui me permet de screener tous les extraits bancaires et les mettre en relation avec les factures encodées.
    Bien entendu, cet algo n'est qu'une proposition pour l'utilisateur : il garde la main pour mettre en lien tel mouvement bancaire avec telle facture.

    Parmi les éléments que l'algo teste, il y'a le nom de la contrepartie dans l'extrait bancaire afin de faire un "matching" avec le nom des fournisseurs encodés dans ma BD (Hyperfile)
    Je précise : l'extrait bancaire a été importé en brut de décoffrage depuis un fichier xml (standard imposé)

    Je crée la procédure qui lit les branches de l'extrait bancaire, et pour chacune des branches "nom contrepartie" je lance une requête en index full text pour voir si ce nom est connu dans ma BD. (c'est lourd, mais les utilisateurs sont bien contents d'attendre 5 min. pour économiser 2h d'encodage manuel !)

    Tout roule, sauf que j'ai des p de cas particulier : SWDE encodé comme fournisseur dans la BD, et S.W.D.E. dans l'extrait bancaire.
    Vu la difficulté de traiter ce cas, j'opte pour la création d'une 2e rubrique (Nom2) pour encoder le nom avec ses spécificités lexicographiques.
    J'inclus cette 2e rubrique dans mon index, et résultat de la requête... nada !

    J'ai un retour de ma requête sur swde et aucun retour sur s.w.d.e. !
    J'ai bien entendu testé "s.w.d.e." en paramètre. Nada.

    Je suis certain qu'un des aimables membres de notre communauté a déjà été confronté à ce cas particulier et qu'il pourra m'éclairer sur la marche à suivre pour résoudre ce (petit) problème.

    D'avance merci.

    PS : voici la manière dont ce fournisseur est libellé dans les différents extraits de compte
    1/ S.W.D.E.
    2/ Swde
    3/ S.W.D.E. SOCIETE WALLONNE DES EAUX

    Ok, je vous écris de Wallonie

    X.

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonsoir,

    Dans ces cas-là, j'utilise un index "nettoyé" : tout en minuscule/majuscule (au choix), sans accent et sans ponctuation, éventuellement même expurgé des caractères numériques.
    Ensuite, il vous resterait à faire la recherche pour chaque mouvement en utilisant impérativement la même procédure pour construire la clé de ce mouvement que celle utilisée pour indexer votre fichier, ce qui vous garantira que les deux traitements sont et resteront toujours en phase.

    Cela marcherait impeccablement dans les deux premiers cas.
    Pour le troisième, il faudrait envisager un match partiel.

    En espérant que cela vous aide,

    Hemgé

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 117
    Points : 90
    Points
    90
    Par défaut
    C'est +/- la solution vers laquelle je m'orientais, étant entendu que j'ai eu à traiter des s**** du style "dupont-durand".
    Si je passe "dupont-durand" à requête, il interprète le "-" entre dupont et durand comme une exclusion.
    J'ai eu le même coup avec des "+" dans les noms (si, si).

    J'ai contourné en faisant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Remplace(COL_Nom_contrepartie,["-","+"]," ")
    Par contre, ce subterfuge est à proscrire avec les "." car je vais créer une suite de mots d'une seule lettre.

    J'ai donc imbriqué un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ChaîneSupprime(Remplace(COL_Nom_contrepartie,["-","+"]," "),".")
    Pas top, top, mais bon. J'ai d'ailleurs peur des effets pervers tant il y'a des spécificités dans les noms et dénominations et qu'aucun standard n'est imposé dans les échanges de données.

    Le match partiel ne me pose pas de soucis car je pondère les résultats textuels par d'autres éléments pour exclure les faux positifs.

    Toutes les idées et critiques sont les bienvenues...

  4. #4
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Citation Envoyé par xavier.ninane Voir le message
    un "matching"
    Une correspondance, ça marche très bien en Wallon.

    +1 à Hemgé et j'affine en te disant de faire une procédure qui va tester la conformité d'une chaîne de caractères et lever une erreur si elle comporte un caractère indésirable (genre : |, \,....).

    Il va de soi que cette procédure est a exécuter avant ton traitement.

    Pour info, j'avais eu le cas lorsque je recevais des fichiers émis par des machines EBCDIC via X25. Le logiciel de transfert ne faisait pas complètement le transcodage...
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 117
    Points : 90
    Points
    90
    Par défaut Relance
    @Hemgé

    Construire un index "nettoyé" ?!? Je me mettais dans une logique d'index full text.
    Je ne vois pas comment "nettoyer" cet index...
    De ce que j'ai compris, et détrompez-moi le cas échéant, l'index full text ne tient pas compte de la ponctuation.
    En ce cas "G.I.L." (cas concret) ne semble pas indexé. Or mes extraits bancaires réfèrent à cette dénomination qui est la dénomination correcte.

    Comment faire un matching (oups, une correspondance ) de l'index full text sur ce mot ?!?
    Je précise que je dois travailler avec l'index full text pour pouvoir combiner plusieurs critères (nom, prénom, nom composé, etc.)

    Est-ce que je devrais créer une rubrique supplémentaire, laquelle serait créée par programmation pour faire le nettoyage en question ?

    Je suis régulièrement confronté à des noms de sociétés dont la dénomination légale et réelle est une suite de lettre et de points.

    PS : je n'ai aucune difficulté à passer en paramètre le nom de la société expurgé de la ponctuation, mais c'est bien au niveau de la source initiale (le nom encodé) que j'ai un soucis avec l'index full text.

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour,

    L'indexation fulltext est sensible à casse (..SensibleCasse) et à l'accentuation (..SensibleAccentuation).
    Donc, pour autant que vous ayez passé ces propriétés booléennes à FAUX, Windev retiendra tant "G.I.L.", que "GIL", que "G.IL", , que "gil" etc.

    Puisque vous êtes en V20, vous disposez aussi de ..Synonyme.

    Mais je ne pense pas que l'index FullText soit exactement ce que vous recherchez ni qu'il puisse fournir la réponse à votre problème.

    A mon sens, la seule solution viable, si vous voulez tenir compte de tous les facteurs et toutes les variations possibles est de passer par un "fichier des désignations" annexe qui contiendra toutes les dénominations rencontrées, leur systématisation et le pointeur vers la fiche correspondante, en n'oubliant pas de prévoir un possible synonyme. Ce fichier est à indexer sur la dénomination systématisée.

    Rubriques :
    - ent : identifiant automatique (pas indispensable)
    - ch : désignation (telle que rencontrée)
    - ch : systématisation (complétée par pointeur pour gérer d'éventuels synonymes après systématisation et on peut être certain qu'on finira par rencontrer deux synonymes)
    - ent : pointeur vers fichier principal

    Personnellement, je procéderais de la manière suivante, au travers d'une routine à appeler tant à la constitution du fichier des désignations que lors de la recherche :
    - ne conserver que les caractères alphanumériques, soit [A-Za-z0-9]
    - tout passer en majuscule ou minuscule soit [A-Z09] ou [a-z0-9]
    - compléter par le pointeur formaté avec des zéros à gauche (NumériqueVersChaine(Pointeur, "06d") (6, ce la laisse de la marge ...)
    Aucun problème majeur pour les transformations, avec les fonctions de Windev ou via les expressions régulières.

    Ensuite, après une première indexation initiale de l'existant, le système détectera toute nouvelle désignation inconnue et l'opérateur assignera la correspondance qui sera retenue et indexée.
    Dans ce processus "d'apprentissage", le système connaîtra de plus en plus de variations qu'il pourra résoudre sans intervention des opérateurs.

    La recherche se fera avec HLitRecherche sur la clé systématisée, suivi d'une petite boucle pour détecter un éventuel synonyme.
    HLitRecherche donnera le premier enregistrement avec une clé commençant par la clé systématisée (et complétée par le pointeur).

    J'espère que ceci peut vous aider.

    Il y a sans doute d'autres approches, par exemple une rubrique dans le fichier principal comprenant la liste des désignations et leur épluchage, mais cela prendrait beaucoup plus de place et serait sans doute plus lent.

    Bon travail

    Hemgé

Discussions similaires

  1. Erreur sur champ text pour un index Full-Text
    Par Steph82 dans le forum Outils
    Réponses: 5
    Dernier message: 06/01/2011, 14h08
  2. Index full text sur champs multiples
    Par manu_71 dans le forum Outils
    Réponses: 6
    Dernier message: 22/02/2007, 00h41
  3. input text et caractères spéciaux
    Par carelha dans le forum Langage
    Réponses: 8
    Dernier message: 04/10/2006, 13h04
  4. [VB.NET 2.0] Fichier texte et caractères spéciaux
    Par exclusif dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/09/2006, 22h02
  5. Réponses: 3
    Dernier message: 01/12/2005, 21h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo