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

Access Discussion :

recherche phonétique


Sujet :

Access

  1. #21
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    mettre ta fonction Soundex dans la base Access
    => comment fais-tu cela ?
    => je pensais autrement doubler le nombre de mes colonnes (1 colonne pour la valeur réelle et une colonne avec la valeur soundex) : le probleme est qu'avec cette methode je vais perdre en rapidité d'execution (base deux fois plus grosse)....
    => De +, j'ai l'impression qu'on ne peut appliquer cette fonction qu'à un seul mot (on ne peut pas rechercher un mot phonétiquement dans une phrase à moins de balayer un par un chaque mot : et encore si la personne écris un mot en deux partis au lieu d'une seul, ça ne marchera pas => ex: plutot <> plus tot)

    Pourtant Google arrive bien à le faire, non ? comment fait-il ?

  2. #22
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    essaye de préfixer ta fonction
    et de faire sélect nomdemodule.soundex("bonjour") pour forcer l'interpréteur à rechercher la référence
    Elle est pas belle la vie ?

  3. #23
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Citation Envoyé par Emcy
    mettre ta fonction Soundex dans la base Access
    => comment fais-tu cela ?
    Tu vas dans ta base Access et tu crées un nouveau module.
    Tu copies le code de ta fonction dans ce nouveau module.
    Tu t'assure que la déclaration est 'public'
    Save
    ferme ta base.
    Terminé :-)

    => je pensais autrement doubler le nombre de mes colonnes (1 colonne pour la valeur réelle et une colonne avec la valeur soundex) : le probleme est qu'avec cette methode je vais perdre en rapidité d'execution (base deux fois plus grosse)....
    Pas forcément sauf si tu as une machine avec une petite mémoire.

    => De +, j'ai l'impression qu'on ne peut appliquer cette fonction qu'à un seul mot (on ne peut pas rechercher un mot phonétiquement dans une phrase à moins de balayer un par un chaque mot : et encore si la personne écris un mot en deux partis au lieu d'une seul, ça ne marchera pas => ex: plutot <> plus tot)
    Oui c'est possible. A tester. Tu peux traiter chacun des mots (un mot est une suite de caratère compris entre deux séparateurs (blanc, vigule, pount, point virgule, point d'exclamation, etc.) puis concatener le resultat et faire une recherche sur le resultat concaténé.

    Pourtant Google arrive bien à le faire, non ? comment fait-il ?
    Aucune idée, mais ils ont surement des lingusites et autres expert du language. Soundex c'est assez basic comme méthode.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #24
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    il faut ajouter un dictionnaire
    mots soundex(desmots) domaines pour y arriver
    Elle est pas belle la vie ?

  5. #25
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    Tu vas dans ta base Access et tu crées un nouveau module.
    Tu copies le code de ta fonction dans ce nouveau module.
    Tu t'assure que la déclaration est 'public'
    Save
    ferme ta base.
    Terminé :-)
    => c'est déja fait sous excel (regardes mon classeur que j'ai mis en ligne) et ça ne marche pas : peut-être que ça marche uniquement sous Access : tu as essayé chez toi ?

    il faut ajouter un dictionnaire
    mots soundex(desmots) domaines pour y arriver
    => comment faites vous cela ?

  6. #26
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Citation Envoyé par Emcy
    Tu vas dans ta base Access et tu crées un nouveau module.
    Tu copies le code de ta fonction dans ce nouveau module.
    Tu t'assure que la déclaration est 'public'
    Save
    ferme ta base.
    Terminé :-)
    => c'est déja fait sous excel (regardes mon classeur que j'ai mis en ligne) et ça ne marche pas : peut-être que ça marche uniquement sous Access : tu as essayé chez toi ?
    Non je n'ai pas essayé chez moi mais c'est une histoire de visibilité. Je pense que si tu la définie dans Access aussi, le moteur de la db va voir la fonction et sera capable de l'utiliser dans une requète.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #27
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Tu ne pourras pas, en SQL.

    La fonction doit être dans Access.
    Mais, comme tu passes une chaine au moteur, il ne lance pas le VBA de l'appli cible. donc, la fonction Soundex de ton appli Access ne passera pas.

    Tu fais de l'ADO ... fais le jusqu'au bout

  8. #28
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Allez ... je suis pas chien ...
    je t'ai fait toute une procédure documentée.
    A toi de l'adapter.
    Ca devrait pas être trop dur.
    Elle te permet de récupérer un recordset au lieu d'un tableau.
    En plus, tu peux l'enregistrer, si tu veux.
    Bref ... que du bonheur.

    Normalement, une fois crée, si tu l'utilises dans une petite procédure bidon du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub testeur()
        Dim r As ADODB.Recordset
        Set r = ReturnColumn("Nom", "dhavauliau")
        MsgBox r(0)
    End Sub
    tu reçois une jolie msgbox qui t'affiche "Davolio"
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Function ReturnColumn(ByVal MOT As String, ByVal TESTER As String) As ADODB.Recordset
    '---------------------------------------------------------------------------------------
    ' Procedure : ReturnColumn
    ' Créée le  : samedi 04 févr 2006 02:19
    ' Auteur    : Maxence Hubiche
    ' Objet     : Procédure renvoyant un recordset ADO déconnecté contenant les informations
    '               d'une colonne donnée correspondant au SOUNDEX d'une valeur
    '---------------------------------------------------------------------------------------
    '
     
        Dim rsOrigin    As ADODB.Recordset
        Dim rsResult    As ADODB.Recordset
     
        Const Nom_Fichier As String = "c:\ThisRecordset.xml"
        Const Chaine_Conn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Office\Office2K\Office\Samples\Comptoir.mdb"
     
        On Error GoTo GestErr
        'si le fichier existe déjà, le supprimer
        If FileLen(Nom_Fichier) <> 0 Then Kill Nom_Fichier
     
        'Créer 2 recordsets
        Set rsOrigin = New ADODB.Recordset
        Set rsResult = New ADODB.Recordset
     
        'Ouvrir le recordset d'origine pour récupérer les données attendues
        rsOrigin.Open "Select " & MOT & " FROM Employés", Chaine_Conn, adOpenStatic, adLockReadOnly
     
        'Créer et ouvrir le second recordset
        rsResult.Fields.Append MOT, adVarChar, 100
        rsResult.Open
     
        'Parcourir tout le premier recordset
        Do Until rsOrigin.EOF
            'Si la donnée de l'enregistrement en cours correspond au SOUNDEX de la valeur cherchée
            If Soundex(rsOrigin(0)) = Soundex(TESTER) Then
                'Ajouter la valeur au nouveau recordset
                With rsResult
                    .AddNew MOT, rsOrigin(0)
                    .Update
                End With
            'Sinon
            Else
                'rien à faire
            End If
            'Passer à l'enregistrement suivant
            rsOrigin.MoveNext
        Loop
     
        'Au besoin, enregistrer le fichier
        rsResult.Save Nom_Fichier, adPersistXML
     
        'Renvoyer le recordset
        Set ReturnColumn = rsResult
     
    Finprog:
        On Error Resume Next
        'Fermer proprement le recordset d'origine, dans tous les cas
        rsOrigin.Close
        Set rsOrigin = Nothing
        Exit Function
    GestErr:
        Select Case Err.Number
            Case 53         'Fichier introuvable
                Resume Next
            Case Else
                MsgBox "L'Erreur N° " & Err.Number & " (" & Err.Description & ") s'est produite de manière inattendue dans la procédure ReturnColumn du module Module Module1", vbCritical, "ERREUR INATTENDUE"
        End Select
        Resume Finprog
    End Function
    Amuses-toi bien avec

  9. #29
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    merci, c'est bien ce que je craignais : on est obligé de balayer tous les champs.
    Est-ce que je n'aurais pas interet à créer une colonne soundex dans ma BDD pour éviter d'avoir à recalculer les soundex de chaque mots à chaque fois ?

    => par contre comment fait-on pour repérer un mot dans une chaine de caratères : je ne vois pas de solution miracle...

  10. #30
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Avec LIKE

  11. #31
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    Avec LIKE
    => ça ne peut pas marcher

    exemple :
    phrase :
    tu as vu mon bon omme de neige ?

    mot à rechercher (il peut y en vaoir plusieurs :
    bonhome

    => comment faire ?

  12. #32
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Le soundex fonctionne par mot. Donc bon omme et bonhomme sont incompatible directement avec le soundex. Y a guère de solution à ton problème.

  13. #33
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    c'est dommage .. snif,snif

  14. #34
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Citation Envoyé par Tofalu
    Le soundex fonctionne par mot. Donc bon omme et bonhomme sont incompatible directement avec le soundex. Y a guère de solution à ton problème.
    Pourtant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debug.print  soundex("bonhomme")=soundex("bon ome")
    renvoie VRAI

  15. #35
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Oui là c'est sur puisque au sein de la chaine tu supprimes les espaces.

    Ce que je veux dire c'est que dans une phrase, ça n'a pas vraiment de sens de supprimer tous les espaces car tu risques de recomposer des mots malgré toi


    Parce ce qui si dans la phrase tu as :

    un bon omme de neige, comment tu va rechercher le mot homme ?

  16. #36
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Je pensais qu'en faisant un truc comme cela ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function SplitSound(sPhrase As String)
        Dim s() As String
        Dim sr As String
        Dim n As Long
     
        s = Split(sPhrase, " ")
        For n = LBound(s) To UBound(s)
            sr = sr & Soundex(s(n))
        Next
        SplitSound = sr
    End Function
    Alors, un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DEBUG.PRINT SplitSound("un bon omme de neige") like "*" & soundex("homme") & "*"
    Renverrai VRAI

  17. #37
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    là non plus ça ne marche pas car :
    soundex("bon") & soundex("ome") est différent de soundex("bon ome")...

  18. #38
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Citation Envoyé par Maxence HUBICHE
    Je pensais qu'en faisant un truc comme cela ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function SplitSound(sPhrase As String)
        Dim s() As String
        Dim sr As String
        Dim n As Long
     
        s = Split(sPhrase, " ")
        For n = LBound(s) To UBound(s)
            sr = sr & Soundex(s(n))
        Next
        SplitSound = sr
    End Function
    Alors, un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DEBUG.PRINT SplitSound("un bon omme de neige") like "*" & soundex("homme") & "*"
    Renverrai VRAI
    En effet, ça marchera ici, mais plus dans le cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DEBUG.PRINT SplitSound("un bon omme de neige") like "*" & soundex("bonhomme") & "*"


    A un moment je pense qu'il faut faire des choix, on ne peut pas tout rechercher non plus. Ou bien alors, il faut multiplier les requêtes de recherche (une pour chaque cas) et en faire l'union

  19. #39
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    ouais.

    j'ai une autre petite question :

    j'ai la requète sivante qui ne marche pas :
    SELECT GPAO FROM COMPOSANTS WHERE OBSOLETE='1'

    => OBSOLETE est de type boolean

  20. #40
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    On s'éloigne du sujet orginal là.

    Si le champ est booléen alors tu auras :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT GPAO FROM COMPOSANTS WHERE OBSOLETE

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Problème dans la recherche phonétique
    Par lionrouge2009 dans le forum Oracle
    Réponses: 2
    Dernier message: 20/06/2012, 19h30
  2. Solution de recherche phonétique
    Par coulio dans le forum Autres Solutions d'entreprise
    Réponses: 2
    Dernier message: 02/03/2011, 13h55
  3. recherche phonétique avec liste deroulante
    Par caro71ol dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 31/01/2011, 09h45
  4. Solution de recherche phonétique
    Par coulio dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 18/03/2010, 09h53
  5. Recherche phonétique en PHP
    Par brodseba dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 2
    Dernier message: 15/11/2006, 10h29

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