CONSULTA SQL, RETORNAR POR PROBABILIDADE

ALEXMARCHI 02/04/2004 12:42:33
#18390
TENHO O SEGUINTE DILEMA, VAMOS IMAGINAR QUE NO BANCO DE DADOS TEM OS SEGUINTES REGISTROS CADASTRADOS

EX.

JOÃO DA SILVA BATISTA MELO
JOAO DOS SANTOS BATISTA
JOÃO BATISTA
JOÃO BATISTA MARIA DA SILVA

QUANDO O USUàRIO DIGITAR JOÃO BATISTA. O SISTEMA DEVE RETORNAR OS 4 CADASTROS INCLUSIVE O 2ºJOAO QUE NÃO ESTà ACENTUADO E O 3º TAMBEM APESAR DE TER 3 ESPACOS ENTRE AS PALAVRAS.

TENTEI A SEGUINTE STRING. MAS ELA SÓ“ RETORNA O 4º O JOÃO BATISTA MARIA DA SILVA.

 "SELECT NOME FROM CLIENTES WHERE NOME LIKE '%" & VARIAVEL & "%' ORDER BY NOME" 


se alguem tiver uma ídeia fico muito grato






USUARIO.EXCLUIDOS 02/04/2004 13:32:19
#18411
Resposta escolhida
Acho que o que você precisa é de um algoritmo que compare os registros que você tem com a string-alvo. Eu enviei uma função dessas (http://www.vbmania.com.br/vbmdetail.php?varID=667), que retorna a porcentagem de similaridade entre duas strings, de modo que o usuário possa escolher a "precisão" da amostra a ser obtida.

O Clayton também mandou um projeto (http://www.vbmania.com.br/vbmdetail.php?varID=152), mas não sei em qual algoritmo é baseado.

Um outro algoritmo muito bom é o SOUNDEX, do Donald Knuth. Se o do Clayton for diferente do SOUNDEX, me avise, que lhe envio um projeto com SOUNDEX.

USUARIO.EXCLUIDOS 02/04/2004 14:40:44
#18459
Alexandre

Coloquei meu nomezinho (Max, o Fiscal) na lista que acompanha o projeto que citei e mandei buscar por "max cál", exatamente como você propà's. A porcentagem de similaridade era a "default" do projeto, ou seja, 50%. Recebi o Retorno de "Max, O Fiscal" com 59% e mais nenhum outro nome. Retirei o acento e a similaridade subiu para 69%, e surgiu outro nome na lista: "Mary Saveley" com 52%. A diferença do método que uso no meu projeto para um algoritmo puramente fonético, é que o meu "caça" sequências de letras idênticas à  string alvo e estipula a similaridade, enquanto o segundo dá peso para cada fonema "similar", o que pode gerar erros ao trabalhar com outras línguas. Será que não é mesmo o que você precisa?
USUARIO.EXCLUIDOS 02/04/2004 15:06:13
#18482
Complementando, segundo sua proposta inicial:

88% - JOÃO BATISTA (com os três espaços, como você pediu)
61% - JOÃO DA SILVA BATISTA MELO
61% - JOAO DOS SANTOS BATISTA
59% - JOÃO BATISTA MARIA DA SILVA

Como intruso, apareceu "Bernardo Batista" com 64%, da lista original.
USUARIO.EXCLUIDOS 02/04/2004 15:13:47
#18484
Manda aí mais alguns códigos pra ver as adaptações que precisam ser feitas no algoritmo. Eu lhe garanto: o que você precisa é de um algoritmo que cheque similaridade. Nem que seja uma adaptação específica para o seu caso.
Tópico encerrado , respostas não são mais permitidas