Accueil > > > SOUNDEX ELARGIE
SOUNDEX ELARGIE
Information sur la source
Description
La fonction soundex de SQL ne retourne qu'un son sur 5 caractères. Pour affiner les comparaison de sonorité de phrase, la fonction big_soundex(@chaine nvarchar, @longueur int) retourne une chaine sonore d'une longueur défini par le parametre @longueur qui est cependant limité a 10 caractères ici, mais a vous de modifier le code pour augmenter (attention au delai d'execution dans ce dernier cas)
Source
- CREATE FUNCTION big_soundex
- (@WordString nvarchar(50), @SoundExLen int)
- RETURNS nvarchar(10)
- AS
- begin
- declare @Counter int
- declare @CurrChar char(1)
- declare @retVal nvarchar(10)
-
- // test de la longueur demandé
- If @SoundExLen > 10
- begin
- set @SoundExLen = 10
- end
- if @SoundExLen < 4
- begin
- set @SoundExLen = 4
- end
-
- set @SoundExLen = @SoundExLen - 1
-
- // soundex ne travail qu'avec des lettres capitale
- set @WordString = upper(@WordString)
-
- SET @Counter = 1
- //on parcours la chaine et on remplace tout ce qui n'est pas une lettre par un blanc
- WHILE @Counter <= len(@WordString)
- BEGIN
- If ASCII(SUBSTRING(@WordString, @Counter, 1)) < 65 Or ASCII(SUBSTRING(@WordString, @Counter, 1)) > 90
- BEGIN
- set @WordString = Left(@WordString, @Counter - 1) + ' ' + SUBSTRING(@WordString, @Counter + 1, len(@WordString))
- End
- set @counter = @counter + 1
- END
- //suppression des eventuels espace en debut et en fin de chaine
- set @WordString = lTrim(rtrim(@WordString))
-
- //création du 'son'
- If Len(lTrim(rtrim(@WordString))) = 0
- begin
- set @retVal = ''
- end
- Else
- begin
- set @retVal = @WordString
-
- set @retVal = Replace(@retVal, 'A', '0')
- set @retVal = Replace(@retVal, 'E', '0')
- set @retVal = Replace(@retVal, 'I', '0')
- set @retVal = Replace(@retVal, 'O', '0')
- set @retVal = Replace(@retVal, 'U', '0')
- set @retVal = Replace(@retVal, 'Y', '0')
- set @retVal = Replace(@retVal, 'H', '0')
- set @retVal = Replace(@retVal, 'W', '0')
- set @retVal = Replace(@retVal, 'B', '1')
- set @retVal = Replace(@retVal, 'P', '1')
- set @retVal = Replace(@retVal, 'F', '1')
- set @retVal = Replace(@retVal, 'V', '1')
- set @retVal = Replace(@retVal, 'C', '2')
- set @retVal = Replace(@retVal, 'S', '2')
- set @retVal = Replace(@retVal, 'G', '2')
- set @retVal = Replace(@retVal, 'J', '2')
- set @retVal = Replace(@retVal, 'K', '2')
- set @retVal = Replace(@retVal, 'Q', '2')
- set @retVal = Replace(@retVal, 'X', '2')
- set @retVal = Replace(@retVal, 'Z', '2')
- set @retVal = Replace(@retVal, 'D', '3')
- set @retVal = Replace(@retVal, 'T', '3')
- set @retVal = Replace(@retVal, 'L', '4')
- set @retVal = Replace(@retVal, 'M', '5')
- set @retVal = Replace(@retVal, 'N', '5')
- set @retVal = Replace(@retVal, 'R', '6')
-
- set @CurrChar = Left(@retVal, 1)
- set @counter = 2
- //on retire les son successif iddentique
- while @counter <= len(@retVal)
- begin
- If substring(@retVal, @Counter, 1) = @CurrChar
- begin
- set @retVal = Left(@retVal, @Counter - 1) + substring(@retVal, @Counter + 1, len(@retVal))
- end
- Else
- begin
- set @CurrChar = SUBSTRING(@retVal, @Counter, 1)
- End
- set @counter = @counter + 1
- end
-
- //suppression des blanc
- set @retVal = Replace(@retVal, ' ', '')
-
- //suppression des 0
- set @retVal = substring(@retVal, 2, len(@retVal))
- set @retVal = Replace(@retVal, '0', '')
-
- // on ajoute des 0 si le 'son' est trop court pour etre sur d'avoir le nombre de caractère voulue
- set @retVal = @retVal + REPLICATE('0', @SoundExLen)
- set @retVal = Left(@WordString, 1) + Left(@retVal, @SoundExLen)
-
- End
- // retour du son
- return @retVal
- end
CREATE FUNCTION big_soundex
(@WordString nvarchar(50), @SoundExLen int)
RETURNS nvarchar(10)
AS
begin
declare @Counter int
declare @CurrChar char(1)
declare @retVal nvarchar(10)
// test de la longueur demandé
If @SoundExLen > 10
begin
set @SoundExLen = 10
end
if @SoundExLen < 4
begin
set @SoundExLen = 4
end
set @SoundExLen = @SoundExLen - 1
// soundex ne travail qu'avec des lettres capitale
set @WordString = upper(@WordString)
SET @Counter = 1
//on parcours la chaine et on remplace tout ce qui n'est pas une lettre par un blanc
WHILE @Counter <= len(@WordString)
BEGIN
If ASCII(SUBSTRING(@WordString, @Counter, 1)) < 65 Or ASCII(SUBSTRING(@WordString, @Counter, 1)) > 90
BEGIN
set @WordString = Left(@WordString, @Counter - 1) + ' ' + SUBSTRING(@WordString, @Counter + 1, len(@WordString))
End
set @counter = @counter + 1
END
//suppression des eventuels espace en debut et en fin de chaine
set @WordString = lTrim(rtrim(@WordString))
//création du 'son'
If Len(lTrim(rtrim(@WordString))) = 0
begin
set @retVal = ''
end
Else
begin
set @retVal = @WordString
set @retVal = Replace(@retVal, 'A', '0')
set @retVal = Replace(@retVal, 'E', '0')
set @retVal = Replace(@retVal, 'I', '0')
set @retVal = Replace(@retVal, 'O', '0')
set @retVal = Replace(@retVal, 'U', '0')
set @retVal = Replace(@retVal, 'Y', '0')
set @retVal = Replace(@retVal, 'H', '0')
set @retVal = Replace(@retVal, 'W', '0')
set @retVal = Replace(@retVal, 'B', '1')
set @retVal = Replace(@retVal, 'P', '1')
set @retVal = Replace(@retVal, 'F', '1')
set @retVal = Replace(@retVal, 'V', '1')
set @retVal = Replace(@retVal, 'C', '2')
set @retVal = Replace(@retVal, 'S', '2')
set @retVal = Replace(@retVal, 'G', '2')
set @retVal = Replace(@retVal, 'J', '2')
set @retVal = Replace(@retVal, 'K', '2')
set @retVal = Replace(@retVal, 'Q', '2')
set @retVal = Replace(@retVal, 'X', '2')
set @retVal = Replace(@retVal, 'Z', '2')
set @retVal = Replace(@retVal, 'D', '3')
set @retVal = Replace(@retVal, 'T', '3')
set @retVal = Replace(@retVal, 'L', '4')
set @retVal = Replace(@retVal, 'M', '5')
set @retVal = Replace(@retVal, 'N', '5')
set @retVal = Replace(@retVal, 'R', '6')
set @CurrChar = Left(@retVal, 1)
set @counter = 2
//on retire les son successif iddentique
while @counter <= len(@retVal)
begin
If substring(@retVal, @Counter, 1) = @CurrChar
begin
set @retVal = Left(@retVal, @Counter - 1) + substring(@retVal, @Counter + 1, len(@retVal))
end
Else
begin
set @CurrChar = SUBSTRING(@retVal, @Counter, 1)
End
set @counter = @counter + 1
end
//suppression des blanc
set @retVal = Replace(@retVal, ' ', '')
//suppression des 0
set @retVal = substring(@retVal, 2, len(@retVal))
set @retVal = Replace(@retVal, '0', '')
// on ajoute des 0 si le 'son' est trop court pour etre sur d'avoir le nombre de caractère voulue
set @retVal = @retVal + REPLICATE('0', @SoundExLen)
set @retVal = Left(@WordString, 1) + Left(@retVal, @SoundExLen)
End
// retour du son
return @retVal
end
Conclusion
exemple : select mabase.dbo.big_soundex('soundex ne retourne pas un son assez précis', 10) retourne : S532500000
alors que : select soundex('soundex ne retourne pas un son assez précis') ne retourne que S532
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
SoundEx [ par juki_webmaster ]
Bonjour,Je voit quelques sources tout en tour de codes-sources et meme cs qui utilise cette 'methode de recherche' parler du SoundEx.Je souhaite savoi
Fonction Difference (soundex) SQL server [ par oluha ]
BonjourJ'ai besoin d'utiliser la fonction Difference (qui se base sur le soundex) mais je trouve qu'elle n'est pas assez précise du fait que le sounde
Recherche dans une table [ par Fildomen ]
sltquelle est la commande pour chercher un mot dans une table où la colonne "TXT" contient du texte???et classer les réponses par pertinence
Recherche Approximative [ par eowene ]
Bonjour à tous. J'aimerais savoir comment faire pour faire une recherche approximative sur un champ de ma base de données. Je m'explique.
pb avec les caractères génériques !!!! [ par GerardChezy ]
Bonjour.J'ai un pb dans ma requete (sur sqlserver 2000) avec le caractère générique _ (celui qui remplace 1 caractère).Lorsque je
indexation mysql [ par dibouched ]
bojour , j'ai une base de données mysql et je cherceh comment indexer des colonne pour une recherche fulltext ensuite mon probleme est que
quote et recherche de texte intégral [ par karn ]
Bonjour,J'ai crée une base qui supporte la recherche de texte integral sous sql server, les requetes de recherche marche bien sauf avec les mot c
Soundex, ou Ratcliff Obershelp Levenshtein algorytme [ par pluplu ]
Bonjour, quelqu'un a t'il déja implémenter la technique Soundex, ou Ratcliff Obershelp Levenshtein dans une stored procédure en SQL.Je
Moteur de recherche SQL 2000 [ par vindavid38 ]
ZanTarBonjour je souhaiterais savoir si sql 2000 a un moteur spécial pour le fonctionnement du partitionnement horizontal?? Est ce que
recherche mot clé [ par nick774 ]
Salut, On m'a redirigé sur votre site alors je tente ma chance... Soit: lechamp1 et lechamp2 les éléments du formulaire (page1.asp) c
|
Derniers Blogs
[WP7] AJOUTER DES IMAGES DANS LA MEDIA LIBRARY D'UN WINDOWS PHONE 7[WP7] AJOUTER DES IMAGES DANS LA MEDIA LIBRARY D'UN WINDOWS PHONE 7 par Audrey
L'émulateur Windows Phone 7, fourni avec la version Beta des outils développeurs n'inclut aucune image dans sa bibliothèque. Pas très pratique de tester son application lorsque l'on souhaite que l'utilisateur puisse choisir une image présente dans le télé...
Cliquez pour lire la suite de l'article par Audrey VIVE LES MOCKS ET LES POCOSVIVE LES MOCKS ET LES POCOS par vLabz
J'observe régulièrement autour de moi de la confusion à propos de ces deux termes et j'aimerais juste rappeler ce qu'ils signifient. Je ne suis bien sûr pas le mieux placé pour faire une leçon mais je vais faire de mon mieux pour mettre en valeur ce q...
Cliquez pour lire la suite de l'article par vLabz [WF4] WORKFLOW AND CUSTOM ACTIVITIES - BEST PRACTICES (4/5)[WF4] WORKFLOW AND CUSTOM ACTIVITIES - BEST PRACTICES (4/5) par JeremyJeanson
Vendredi dernier Microsoft a publié le quatrième épisode des bonnes pratiques pour coder ses activités custom dans WF4 : endpoint.tv - Workflow and Custom Activities - Best Practices (Part 4) . Tout comme pour les précédents épisodes, j'ai pris le temps d...
Cliquez pour lire la suite de l'article par JeremyJeanson DéVELOPPEMENT MOBILE : .NET COMPACT FRAMEWORK & LIMITATIONSDéVELOPPEMENT MOBILE : .NET COMPACT FRAMEWORK & LIMITATIONS par Pi-R
Introduction :
Le développement d'applications mobiles est quelque peu différent du développement d'applications sous Windows. En effet, le développement d'applications mobiles se base sur le .NET Compact Fra...
Cliquez pour lire la suite de l'article par Pi-R IPHONE VERSUS WP7 CODINGIPHONE VERSUS WP7 CODING par Nicolas
Je relais une présentation sur slideshare.net, qui compare le développement sur Iphone et Windows Phone 7, qui ma fait sourire. I phone versus windows phone 7 coding View more presentations from www.donburnett.com. J'aurais bien aimé une comparai...
Cliquez pour lire la suite de l'article par Nicolas
Logiciels
Xilisoft HD Vidéo Convertisseur 6 (6.0.3.0421)XILISOFT HD VIDéO CONVERTISSEUR 6 (6.0.3.0421)Xilisoft HD Vidéo Convertisseur est un outil professionnel de conversion HDTV, conçu pour transfo... Cliquez pour télécharger Xilisoft HD Vidéo Convertisseur 6 Xilisoft MP4 Convertisseur 6 (6.0.2.0415)XILISOFT MP4 CONVERTISSEUR 6 (6.0.2.0415)Xilisoft MP4 Convertisseur est un outil puissant pour la conversion de vidéo MP4, qui peut conver... Cliquez pour télécharger Xilisoft MP4 Convertisseur 6 Vade Retro Desktop (3.03)VADE RETRO DESKTOP (3.03)Le logiciel antispam Vade Retro pour Microsoft Outlook®, Outlook Express® et Windows Mail®(Vista)... Cliquez pour télécharger Vade Retro Desktop Malwarebytes Anti Malwares (1.46)MALWAREBYTES ANTI MALWARES (1.46)Malwarebytes' Anti-Malware est un anti-malware qui peut éliminer même les plus avancés des logic... Cliquez pour télécharger Malwarebytes Anti Malwares
|