|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
FONCTION SOUNDEX EN VISUAL BASIC 6
Information sur la source
Description
Ayant écrit un logiciel de gestion de vidéothèque je me suis aperçu que l'on pouvait vite avoir des soucis avec des noms d'acteurs mal orthographiés... Ex Bruce Willsi à la place de Bruce Willis....... J'ai donc traduit la fonction Soundex (Recherche phonétique) décrite notament par Frédéric Brouard avec qui j'ai bossé (dans une galère.....dans le Var..il devrait reconnaître !!!!) en VB 6.
Source
- Public Function Analyse_Homonyme(ByVal NomActeur As String)
-
- ValeurCaractere = ""
-
- 'passage en majuscule et suppression des espaces
- NomActeur = UCase(NomActeur)
- 'NomActeur = UCase("ZARA WHITE")
- NomActeur = Replace(NomActeur, " ", "")
- caracteredepart = Mid(NomActeur, 1, 1)
-
- 'Elimination des voyelles du H et du W
- For i = 1 To Len(NomActeur)
- caractere = Mid(NomActeur, i, 1)
- Select Case caractere
- Case "A", "E", "I", "O", "U", "Y"
- NouveauNom = NouveauNom
- Case "H", "W"
- NouveauNom = NouveauNom
- Case Else
- NouveauNom = NouveauNom + caractere
- End Select
- Next
-
- 'Analyse du NouveauNom
- For i = 1 To Len(NouveauNom)
- caractere = Mid(NouveauNom, i, 1)
- Select Case caractere
- Case "B", "F", "P", "V"
- ValeurCaractere = ValeurCaractere & 1
- Case "C", "G", "J", "K", "Q", "S", "X", "Z"
- ValeurCaractere = ValeurCaractere & 2
- Case "D", "T"
- ValeurCaractere = ValeurCaractere & 3
- Case "L"
- ValeurCaractere = ValeurCaractere & 4
- Case "M", "N"
- ValeurCaractere = ValeurCaractere & 5
- Case "R"
- ValeurCaractere = ValeurCaractere & 6
- End Select
- Next
-
- Mot_Code = ValeurCaractere
- 'si la longeur est superieure a 4 je ne garde que les 4 premiers
- If Len(ValeurCaractere) >= 4 Then Mot_Code = Mid(Mot_Code, 1, 4)
-
- 'NouveauNom Codé --> Elimination des Doublons consécutifs
- For i = 1 To Len(ValeurCaractere)
- caractere = Mid(ValeurCaractere, i, 1)
- Select Case caractere
- Case "1"
- ' je remonte d une lettre pour verifier les eventuels doublons
- If i > 1 Then
- LettrePrec = Mid(Mot_Code, i - 1, 1)
- valeur = LettrePrec & 1
- End If
- If valeur = "11" Then
- PositionPaire = InStr(1, Mot_Code, valeur)
- Paire (PositionPaire)
- End If
- Case "2"
- ' je remonte d une lettre pour verifier les eventuels doublons
- If i > 1 Then
- LettrePrec = Mid(Mot_Code, i - 1, 1)
- valeur = LettrePrec & 2
- End If
- If valeur = "22" Then
- PositionPaire = InStr(1, Mot_Code, valeur)
- Paire (PositionPaire)
- End If
- Case "3"
- ' je remonte d une lettre pour verifier les eventuels doublons
- If i > 1 Then
- LettrePrec = Mid(Mot_Code, i - 1, 1)
- valeur = LettrePrec & 3
- End If
- If valeur = "33" Then
- PositionPaire = InStr(1, Mot_Code, valeur)
- Paire (PositionPaire)
- End If
- Case "4"
- ' je remonte d une lettre pour verifier les eventuels doublons
- If i > 1 Then
- LettrePrec = Mid(Mot_Code, i - 1, 1)
- valeur = LettrePrec & 4
- End If
- If valeur = "44" Then
- PositionPaire = InStr(1, Mot_Code, valeur)
- Paire (PositionPaire)
- End If
- Case "5"
- ' je remonte d une lettre pour verifier les eventuels doublons
- If i > 1 Then
- LettrePrec = Mid(Mot_Code, i - 1, 1)
- valeur = LettrePrec & 5
- End If
- If valeur = "55" Then
- PositionPaire = InStr(1, Mot_Code, valeur)
- Paire (PositionPaire)
- End If
- Case "6"
- ' je remonte d une lettre pour verifier les eventuels doublons
- If i > 1 Then
- LettrePrec = Mid(Mot_Code, i - 1, 1)
- valeur = LettrePrec & 6
- End If
- If valeur = "66" Then
- PositionPaire = InStr(1, Mot_Code, valeur)
- Paire (PositionPaire)
- End If
- End Select
- If Resultat_Paire <> "" Then
- Mot_Code = Resultat_Paire
- End If
- Next
-
- ValeurCaractere = caracteredepart & Mot_Code
- If Len(ValeurCaractere) > 4 Then
- ValeurCaractere = Mid(ValeurCaractere, 1, 4)
- Else
- For i = 1 To (4 - Len(ValeurCaractere))
- ValeurCaractere = ValeurCaractere & 0
- Next
- End If
-
- End Function
-
- Public Function Paire(ByVal Position As Integer)
-
- chaine1 = ""
- chaine2 = ""
- Resultat_Paire = ""
- ' je recupere la valeur avant le premier doublon
- chaine1 = Mid(Mot_Code, 1, PositionPaire)
- longueurrecupere = Len(chaine1)
- If longueurrecupere >= 3 Then
- chaine2 = ""
- Else
- ' si la position du premier doublon est autre que 1
- If Position = 1 Then
- ' j elimine le caractere de trop
- chaine2 = Mid(Mot_Code, PositionPaire + 2, PositionPaire + 2)
- Else
- chaine2 = Mid(Mot_Code, PositionPaire + 2, 1)
- End If
- End If
- Resultat_Paire = chaine1 & chaine2
-
- End Function
Public Function Analyse_Homonyme(ByVal NomActeur As String)
ValeurCaractere = ""
'passage en majuscule et suppression des espaces
NomActeur = UCase(NomActeur)
'NomActeur = UCase("ZARA WHITE")
NomActeur = Replace(NomActeur, " ", "")
caracteredepart = Mid(NomActeur, 1, 1)
'Elimination des voyelles du H et du W
For i = 1 To Len(NomActeur)
caractere = Mid(NomActeur, i, 1)
Select Case caractere
Case "A", "E", "I", "O", "U", "Y"
NouveauNom = NouveauNom
Case "H", "W"
NouveauNom = NouveauNom
Case Else
NouveauNom = NouveauNom + caractere
End Select
Next
'Analyse du NouveauNom
For i = 1 To Len(NouveauNom)
caractere = Mid(NouveauNom, i, 1)
Select Case caractere
Case "B", "F", "P", "V"
ValeurCaractere = ValeurCaractere & 1
Case "C", "G", "J", "K", "Q", "S", "X", "Z"
ValeurCaractere = ValeurCaractere & 2
Case "D", "T"
ValeurCaractere = ValeurCaractere & 3
Case "L"
ValeurCaractere = ValeurCaractere & 4
Case "M", "N"
ValeurCaractere = ValeurCaractere & 5
Case "R"
ValeurCaractere = ValeurCaractere & 6
End Select
Next
Mot_Code = ValeurCaractere
'si la longeur est superieure a 4 je ne garde que les 4 premiers
If Len(ValeurCaractere) >= 4 Then Mot_Code = Mid(Mot_Code, 1, 4)
'NouveauNom Codé --> Elimination des Doublons consécutifs
For i = 1 To Len(ValeurCaractere)
caractere = Mid(ValeurCaractere, i, 1)
Select Case caractere
Case "1"
' je remonte d une lettre pour verifier les eventuels doublons
If i > 1 Then
LettrePrec = Mid(Mot_Code, i - 1, 1)
valeur = LettrePrec & 1
End If
If valeur = "11" Then
PositionPaire = InStr(1, Mot_Code, valeur)
Paire (PositionPaire)
End If
Case "2"
' je remonte d une lettre pour verifier les eventuels doublons
If i > 1 Then
LettrePrec = Mid(Mot_Code, i - 1, 1)
valeur = LettrePrec & 2
End If
If valeur = "22" Then
PositionPaire = InStr(1, Mot_Code, valeur)
Paire (PositionPaire)
End If
Case "3"
' je remonte d une lettre pour verifier les eventuels doublons
If i > 1 Then
LettrePrec = Mid(Mot_Code, i - 1, 1)
valeur = LettrePrec & 3
End If
If valeur = "33" Then
PositionPaire = InStr(1, Mot_Code, valeur)
Paire (PositionPaire)
End If
Case "4"
' je remonte d une lettre pour verifier les eventuels doublons
If i > 1 Then
LettrePrec = Mid(Mot_Code, i - 1, 1)
valeur = LettrePrec & 4
End If
If valeur = "44" Then
PositionPaire = InStr(1, Mot_Code, valeur)
Paire (PositionPaire)
End If
Case "5"
' je remonte d une lettre pour verifier les eventuels doublons
If i > 1 Then
LettrePrec = Mid(Mot_Code, i - 1, 1)
valeur = LettrePrec & 5
End If
If valeur = "55" Then
PositionPaire = InStr(1, Mot_Code, valeur)
Paire (PositionPaire)
End If
Case "6"
' je remonte d une lettre pour verifier les eventuels doublons
If i > 1 Then
LettrePrec = Mid(Mot_Code, i - 1, 1)
valeur = LettrePrec & 6
End If
If valeur = "66" Then
PositionPaire = InStr(1, Mot_Code, valeur)
Paire (PositionPaire)
End If
End Select
If Resultat_Paire <> "" Then
Mot_Code = Resultat_Paire
End If
Next
ValeurCaractere = caracteredepart & Mot_Code
If Len(ValeurCaractere) > 4 Then
ValeurCaractere = Mid(ValeurCaractere, 1, 4)
Else
For i = 1 To (4 - Len(ValeurCaractere))
ValeurCaractere = ValeurCaractere & 0
Next
End If
End Function
Public Function Paire(ByVal Position As Integer)
chaine1 = ""
chaine2 = ""
Resultat_Paire = ""
' je recupere la valeur avant le premier doublon
chaine1 = Mid(Mot_Code, 1, PositionPaire)
longueurrecupere = Len(chaine1)
If longueurrecupere >= 3 Then
chaine2 = ""
Else
' si la position du premier doublon est autre que 1
If Position = 1 Then
' j elimine le caractere de trop
chaine2 = Mid(Mot_Code, PositionPaire + 2, PositionPaire + 2)
Else
chaine2 = Mid(Mot_Code, PositionPaire + 2, 1)
End If
End If
Resultat_Paire = chaine1 & chaine2
End Function
Historique
- 21 janvier 2007 12:11:44 :
- Oupss j'ai oublié de préciser que la fonction Soundex est une recherche "phonétique" sur un ou plusieurs mots. Chaque mot est codé selon un algorythme donné. il suffit ensuite de comparer les résultats obtenus pour trouver les éventuels homonynes dans la base de données.
- 22 janvier 2007 11:10:04 :
- le 22/01/2007
Y avait un bug........et j ai un peu optimisé la chose...............les tests semblent corrects...........
- 03 février 2007 20:15:43 :
- Une précision s impose........... du fait des differences de langage, (Anglais/Americain et Francais) les prononciatioins ne sont pas les mêmes. La fonction Soundex codée ici est la version Anglaise. La version Française comporte quelques différences dans la valeur des lettres. Un peu de pub maintenant ;) Cette fonction s'intègre dans un logiciel de Gestion de vidéothèque qui hormis les fonctions classiques d'ajout, modification et suppression de films comprend les fonctionnalités suivantes :
- Gestion des Prêts
- Enregistrement semi automatique des films depuis Internet (Récupérations des Acteurs, du Titre, du Résumé du film etc etc..)
- Gestion des jaquettes Vidéos et des photos d'acteurs
- Visualisation du film possible depuis l'application (WMPlayer)
- Multi Bases (Sql et Access)
- Nombreuses Statistiques et Editions.........
- Evolutions futures : Gestion des Editions via Crystal Report... pour le moment c est le bloc notes via un fichier texte......
Voila.......... je m'occupe comme je peux lol
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
base de données [ par kwed ]
bonjour à tous,Je voudrais ajouter un module de recherche sur une base de données gérée par un objet msflexgrid...En fait j'ai réussi à ressortir du t
Données Binaires de la Base de registre. [ par Steph21 ]
Avant tout, je me présente ! Je débute actuellement le VB (version 5), et j'ai déjà utilisé le VBA 97 et 2K.Passons aux choses sérieuses :)J'aimerai e
Base de données sur VB [ par HATEM ]
Je désire recevoir un exemple simple de base données developpé sue VB
Manipulation des données dans un texte !! [ par beber ]
debutant 100% voir plus !Recherche comment ouvrir un fichier contenant des variables X et Y d'une fonction. Puis d'arriver sous VB à les recuperer pou
echange de données entre executable [ par thierry ]
Bonjour,JE souhaiterais savoir s'il est possible avec VB d'échanger des infos entre programmes.exe.Exemple : Dans Un.exe j'ai un programme qui gère de
Operation sur une table avec VB [ par H.laalouj ]
Question 1:J'aimerais avoir un exemple d'acces à une table d'une base de données avec les differentes operations de manipulation de données: Ajout, Re
Echange de données entre .exe [ par BTP ]
Pblm : j'aurais besoin d'envoyer un mot sélectionné dans une application quelconque vers un dico et que ce dernier devienne actif.On m'a parlé des act
Problème d'emission de données sur un port série [ par Lolo ]
Plusieurs collègues et moi même avont constaté un bug du contrôle activeX MSComm32.ocxEn effet lors de l'envoi de données sur le port série en XOn Xof
Problème d'emission de données sur un port série [ par Lolo ]
Plusieurs collègues et moi même avont constaté un bug du contrôle activeX MSComm32.ocxEn effet lors de l'envoi de données sur le port série en XOn Xof
problème Base de données [ par Fab ]
Bonjour,Je travaille à la conception d'un outil (Systeme d'Information Territorial)d'aide à la décision. Je développe sur VB 6 et MapObject.Je suis no
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|