Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Isabelle_Andrade

[Resolvido] Busca fonética

Recommended Posts

Boa tarde!

 

Preciso fazer uma busca fonética em várias tabelas ao mesmo tempo e arquivos anexados.

Fiz uma pesquisa sobre isso, mas só achei a função Soundex, que não é 100% garantido.

Alguém sabe alguma forma melhor de fazer esse tipo de pesquisa?

 

Obrigada!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas como assim fonética ? você quer que faça a pesquisa de todas as palavras da consulta ? Ou por ter acento ou nao ? Ou os dois ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A busca fonética faz uma pesquisa com as palavras que têm a mesma pronúncia, mas estão escritas de maneira diferente.

Ex.: o usuário digita no campo da busca o nome Jozé.

então o código faz uma busca no DB com todas as palavras que têm o mesmo som como jose, josé, jOze, JOSÉ, etc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que a logica pro caso é você determinar as letras com pronuncia iguais

 

rr = r

 

ss = s

 

z = s

 

jogar num array e criar um criterio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Função fonetica

 

 

function Fonetica(campo, valor)

fonetica = " (" &_
" replace(replace(replace( " &_
" replace(replace(replace( " &_
" replace(replace(replace( " &_
" replace(replace(replace( " &_
" replace(replace(replace( " &_
" replace(replace(replace( " &_
" replace(replace( " &_
" translate(lower( " & campo & " )," &_
" 'ãáâàõôóêéxçzkcmyíúvw'," &_
" 'aaaaoooeesssssniiuuu')," &_
" 'qu','s' ), 'h','' ), '''','' ), " &_
" 'zz','s' ), 'll','l' ), 'mm','m' ), " &_
" 'tt','t' ), 'rr','r' ), 'ff','f' ), " &_
" 'ii','i' ), 'bb','b' ), 'eia','ea' ), " &_
" 'nn','n' ), 'ch', 's' ), 'gg','g' ), " &_
" 'ou', 'u' ), 'st', 't' ), 'sh', 's' ), " &_
" 'ss','s' ), 'st', 't' ) " &_
" LIKE " &_
" replace(replace(replace( " &_
" replace(replace(replace( " &_
" replace(replace(replace( " &_
" replace(replace(replace( " &_
" replace(replace(replace( " &_
" replace(replace(replace( " &_
" replace(replace( " &_
"translate(lower( '%" & valor & "%' )," &_
"'ãáâàõôóêéxçzkcmyíúvw'," &_
"'aaaaoooeesssssniiuuu')," &_
" 'qu','s' ), 'h','' ), '''','' ), " &_
" 'zz','s' ), 'll','l' ), 'mm','m' ), " &_
" 'tt','t' ), 'rr','r' ), 'ff','f' ), " &_
" 'ii','i' ), 'bb','b' ), 'eia','ea' ), " &_
" 'nn','n' ), 'ch', 's' ), 'gg','g' ), " &_
" 'ou', 'u' ), 'st', 't' ), 'sh', 's' ), " &_
" 'ss','s' ), 'st', 't' ) " &_
" )"
end function

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigada pessoal!

 

Vou fazer uns testes e digo se deu certo.

 

Bom dia!

 

xanburzum,

 

Fiz o código para realizar a busca e incluí esta função, mas não estou descobrindo como faço para utilizá-la.

Segue o código.

 

<%
set segur_db = Server.CreateObject("ADODB.Connection")

	strconn = "driver={SQL Server}; "
	strconn = strconn & "server=server; "
	strconn = strconn & "uid=id; "
	strconn = strconn & "pwd=pwd; "
	strconn = strconn & "database=contratos"
	
	segur_db.Open strconn
	
	segur_db.CursorLocation = 3
	
	campo = "valor_total"
	valor = 0

function Fonetica(campo, valor)
	fonetica = " (" &_
	" replace(replace(replace( " &_
	" replace(replace(replace( " &_
	" replace(replace(replace( " &_
	" replace(replace(replace( " &_
	" replace(replace(replace( " &_
	" replace(replace(replace( " &_
	" replace(replace( " &_
	" translate(lower( " & campo & " )," &_
	" 'ãáâàõôóêéxçzkcmyíúvw'," &_
	" 'aaaaoooeesssssniiuuu')," &_
	" 'qu','s' ), 'h','' ), '''','' ), " &_
	" 'zz','s' ), 'll','l' ), 'mm','m' ), " &_
	" 'tt','t' ), 'rr','r' ), 'ff','f' ), " &_
	" 'ii','i' ), 'bb','b' ), 'eia','ea' ), " &_
	" 'nn','n' ), 'ch', 's' ), 'gg','g' ), " &_
	" 'ou', 'u' ), 'st', 't' ), 'sh', 's' ), " &_
	" 'ss','s' ), 'st', 't' ) " &_
	" LIKE " &_
	" replace(replace(replace( " &_
	" replace(replace(replace( " &_
	" replace(replace(replace( " &_
	" replace(replace(replace( " &_
	" replace(replace(replace( " &_
	" replace(replace(replace( " &_
	" replace(replace( " &_
	"translate(lower( '%" & valor & "%' )," &_
	"'ãáâàõôóêéxçzkcmyíúvw'," &_
	"'aaaaoooeesssssniiuuu')," &_
	" 'qu','s' ), 'h','' ), '''','' ), " &_
	" 'zz','s' ), 'll','l' ), 'mm','m' ), " &_
	" 'tt','t' ), 'rr','r' ), 'ff','f' ), " &_
	" 'ii','i' ), 'bb','b' ), 'eia','ea' ), " &_
	" 'nn','n' ), 'ch', 's' ), 'gg','g' ), " &_
	" 'ou', 'u' ), 'st', 't' ), 'sh', 's' ), " &_
	" 'ss','s' ), 'st', 't'))"
end function 

	valor = Fonetica("objeto", "teste")
	
	sql = "SELECT * FROM contrato WHERE id_contrato = '" & valor & "' OR "
	sql = sql & "id_solicitacao = '" & valor & "' OR "
	sql = sql & "id_contratante = '" & valor & "' OR "
	sql = sql & "id_modelo_contrato = '" & valor & "' OR "
	sql = sql & "id_valoracao = '" & valor & "' OR "
	sql = sql & "valor_total = '" & valor & "' OR "
	sql = sql & "valor_total_percent = '" & valor & "' OR "
	sql = sql & "valor_total_demanda = '" & valor & "' OR "
	sql = sql & "prorrogacao_automatica = '" & valor & "' OR "
	sql = sql & "chancela = '" & valor & "' OR "
	sql = sql & "chancela_ressalvas = '" & valor & "' OR "
	sql = sql & "novos_negocios = '" & valor & "' OR "
	sql = sql & "core_business = '" & valor & "' OR "
	sql = sql & "prorrogacao = '" & valor & "' OR "
	sql = sql & "valor_relevante = '" & valor & "' OR "
	sql = sql & "objeto LIKE '%" & valor & "%' OR "
	sql = sql & "st = '" & valor & "' OR "
	sql = sql & "id_empresa = '" & valor & "'"
	
	response.Write(sql)
	
	set rsConsulta = segur_db.execute(sql)
	
	while not rsConsulta.eof 
		response.Write("<br>Solicitacao: " & rsConsulta("id_solicitacao") & "<br>")
		response.Write("id contratante: " & rsConsulta("id_contratante") & "<br>")
		response.Write("Modelo contrato: " & rsConsulta("id_modelo_contrato") & "<br>")
		response.Write("id valor acao: " & rsConsulta("id_valoracao") & "<br>")
		response.Write("<b>valor total: " & rsConsulta("valor_total") & "</b><br>")
		response.Write("valor percent :" & rsConsulta("valor_total_percent") & "<br>")
		response.Write("valor total demanda: " & rsConsulta("valor_total_demanda") & "<br>")
		response.Write("prorrogacao automatica: " & rsConsulta("prorrogacao_automatica") & "<br>")
		response.Write("chancela: " & rsConsulta("chancela") & "<br>")
		response.Write("Chancela ressalvas: " & rsConsulta("chancela_ressalvas") & "<br>")
		response.Write("novos negocios: " & rsConsulta("novos_negocios") & "<br>")
		response.Write("core business: " & rsConsulta("core_business") & "<br>")
		response.Write("prorrogacao: " & rsConsulta("prorrogacao") & "<br>")
		response.Write("valor relevante: " & rsConsulta("valor_relevante") & "<br>")
		response.Write("objeto: " & rsConsulta("objeto") & "<br>")
		response.Write("st: " & rsConsulta("st") & "<br>")
		response.Write("id empresa: " & rsConsulta("id_empresa") & "<br><br>")
		
		rsConsulta.movenext
	wend
%>

Se puder ajudar ficarei grata!

Compartilhar este post


Link para o post
Compartilhar em outros sites

esta sendo gerado algum erro ???

 

você também pode fazer

 

valor=request.form(se_campo")
fonetica = " (" &_
" replace(replace(replace( " &_
" replace(replace(replace( " &_
" replace(replace(replace( " &_
" replace(replace(replace( " &_
" replace(replace(replace( " &_
" replace(replace(replace( " &_
" replace(replace( " &_
" translate(lower( " & campo & " )," &_
" 'ãáâàõôóêéxçzkcmyíúvw'," &_
" 'aaaaoooeesssssniiuuu')," &_
" 'qu','s' ), 'h','' ), '''','' ), " &_
" 'zz','s' ), 'll','l' ), 'mm','m' ), " &_
" 'tt','t' ), 'rr','r' ), 'ff','f' ), " &_
" 'ii','i' ), 'bb','b' ), 'eia','ea' ), " &_
" 'nn','n' ), 'ch', 's' ), 'gg','g' ), " &_
" 'ou', 'u' ), 'st', 't' ), 'sh', 's' ), " &_
" 'ss','s' ), 'st', 't' ) " &_
" LIKE " &_
" replace(replace(replace( " &_
" replace(replace(replace( " &_
" replace(replace(replace( " &_
" replace(replace(replace( " &_
" replace(replace(replace( " &_
" replace(replace(replace( " &_
" replace(replace( " &_
"translate(lower( '%" & valor & "%' )," &_
"'ãáâàõôóêéxçzkcmyíúvw'," &_
"'aaaaoooeesssssniiuuu')," &_
" 'qu','s' ), 'h','' ), '''','' ), " &_
" 'zz','s' ), 'll','l' ), 'mm','m' ), " &_
" 'tt','t' ), 'rr','r' ), 'ff','f' ), " &_
" 'ii','i' ), 'bb','b' ), 'eia','ea' ), " &_
" 'nn','n' ), 'ch', 's' ), 'gg','g' ), " &_
" 'ou', 'u' ), 'st', 't' ), 'sh', 's' ), " &_
" 'ss','s' ), 'st', 't' ) " &_
" )"

response.write(fonetica)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi xanburzum,

 

Eu criei essa função no SQL Server.

Quando faço a busca pelo nome Joao(por exemplo), mesmo tendo o nome cadastrado como João, não obtenho retorno.

Você sabe o que pode ser ou devo encaminhar essa dúvida para o pessoal de banco de dados?

Esta função que você criou roda no arquivo.asp ou no DB?

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá um reponse.write na sua string SQL para ver o que esta sendo passado...

 

response.write(SQL)
response.end()

Compartilhar este post


Link para o post
Compartilhar em outros sites

o correto é você 1º tratar caracteres especias, depois você remove acento, depois a fonetica

 

esse replace(replace(replace(replace... ta uma zona danada, vai dar queda de performance e abertura pra injection

 

 

 

 

veja isso:

 

" 'qu','s' ), 'h','' ), '''','' ), " &_
        " 'zz','s' ), 'll','l' ), 'mm','m' ), " &_
        " 'tt','t' ), 'rr','r' ), 'ff','f' ), " &_
        " 'ii','i' ), 'bb','b' ), 'eia','ea' ), " &_
        " 'nn','n' ), 'ch', 's' ), 'gg','g' ), " &_
        " 'ou', 'u' ), 'st', 't' ), 'sh', 's' ), " &_
        " 'ss','s' ), 'st', 't'))"

 

 

 

mm, ff, gg, zz, tt, nn...

 

não faz parte da nossa lingua

 

se buscarem por camminhão o replace troca para caminhão, mas se buscarem por cammminhao, vai dar erro

 

pra fazer isso como corretor ortografico é melhor criar uma lib propria

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, parabéns, sempre uso essa função e aliada a ela um anti sqlinjection

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.