Ir para conteúdo

POWERED BY:

Arquivado

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

sasleal

Busca com ou sem acento

Recommended Posts

Tenho um sistema de busca que esta funcionando, porém gostaria que ele não fize-se o filtro de acento, ou seja gostaria que independente da fomar que eu escreva, com ou sem acento ele traga todos os resultados.Exemplo:Sistema atualSe eu digitar África ele só traz África.Como queroSe ue digitar África ele traga África, Africa ou se eu digitar Africa ele traga África, Africa.Obs: o meu banco de dados é acess, e no cadrastro tem palavra acentoada.Que poder ajudar agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Camarada,

 

Qual banco de dados você esta utilizando?

 

Segue um post onde nosso amigo mestre eriva_br que aborda o assunto para SQL server. Vale uma conferiada.

http://forum.imasters.com.br/index.php?showtopic=228992

 

QQ duvida post ai!

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Da um replace nas duas partes antes de comparar convertendo todos os caracteres acentuados pelo seu similar sem acento.Ou então utiliza um script de busca fonética que é mto mais avançado e possui outros recurso, como por exemplo:Buscar: ERICA busca fonética traz: ERIC, ÉRIC, HERIC, HERIQUE, ERIK... etcOK..!!?? T+...PS: Se você utiliza SQL Server nem precisa se preocupar com algoritmos extras ele tem uma função nativa de busca fonética o "SOUNDEX".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui a função fonetica, porem não estou conseguindo utiliza- la no meu codigo.

 

Meu codigo.

 

'Se a busca partir de um titulo

ElseIf request("tipo_busca") = "nome_produto" Then

 

'Request do titulo a pesquisar

nome_produto = request("produto")

 

Query_produtos = "SELECT Produtos.codigo_produto, Produtos.codigo_categoria, Produtos.codigo_subcategoria, Produtos.codigo_marca, Produtos.codigo_produto_loja, Produtos.nome_produto, Produtos.descricao_produto, Produtos.autor, Produtos.codigo_isbn, Produtos.tamanhos, Produtos.cores, Produtos.preco_base, Produtos.preco_unitario, Produtos.desconto, Produtos.moeda, Produtos.quantidade_produto, Produtos.img_produtoPQN, Produtos.img_produtoGRD, Produtos.img_produto_adic01PQN, Produtos.img_produto_adic01GRD, Produtos.img_produto_adic02PQN, Produtos.img_produto_adic02GRD, Produtos.img_produto_adic03PQN, Produtos.img_produto_adic03GRD, Produtos.peso, Produtos.destaque_vitrine, Produtos.promocao, Produtos.data_inicio, Produtos.data_fim, Produtos.disponivel, Produtos.sigla_idioma FROM Categorias INNER JOIN Produtos ON Categorias.codigo_categoria = Produtos.codigo_categoria WHERE Produtos.nome_produto LIKE '%" & nome_produto & "%' AND Produtos.sigla_idioma = '"&varLang&"' AND Categorias.sigla_idioma = '"&varLang&"' " & queryORDERBY"

 

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

Essa função só gera uma STRING de pesquisa para o SQL, não faz uma comparação fonética...E também tem um erro em um dos comandos que não é um SQL Standard.Como você não está utilizando SQL Server/Oracle o melhor mesmo é fazer a validação fonética no ASP, e não passar a bola para o banco!

Compartilhar este post


Link para o post
Compartilhar em outros sites

em asp, sem interagir com o banco de dados não dá pra fazer a foneticasó uma observação...o mysql 5 aceita a função Soundex que em conjunto com uma função vbscript dá pra fazer pesquisa por fonética, se interessar passo o código em ASP + MySql

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em ASP, PHP, Delphi, Java...entre outras linguagens, é viável a realização de comparação fonética independente do banco.Devido ao padrão SOUNDEX dos bancos realizar a busca de acordo com os fonemas da lingua inglesa, um sistema com o qual eu trabalhei utilizava uma função específica para a verificação fonêtica de acordo com os fonemas da lingua portuguesa, essa função tambem é necessária pois o sistema roda em bases SQL Server, Oracle ou Firebird.Exemplo:Fonemas em inglês: Wilson = Uilson >> Wilson <> Vilson Wagner = Uagner >> Wagner <> VagnerFonemas em portugues: Wilson = Uilson >> Wilson = Vilson Wagner <> Uagner >> Wagner = VagnerComo eu disse no início se a sua questão é apenas com os acentos você pode simplesmente substituir todos os caracteres acentuados pelos seus respectivos sem acento... a busca fonética foi só uma sugestão de implementação mais avançada e completa!

Compartilhar este post


Link para o post
Compartilhar em outros sites

segue a função para retirar acentos ou qualquer outro caractere desejado

Function TiraAcento(ByVal Palavra)	cacento = "àáâãäèéêëìíîïòóôõöùúûüÀÁÂÃÄÈÉÊËÌÍÎÒÓÔÕÖÙÚÛÜçÇñÑ^~ºª´`'"	sacento = "aaaaaeeeeiiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN"	texto = ""	If Palavra <> "" Then		For x = 1 To Len(Palavra)			letra = Mid(Palavra, x, 1)			pos_acento = InStr(cacento, letra)			If pos_acento > 0 Then				letra = Mid(sacento, pos_acento, 1)			End If			texto = texto & letra		Next		TiraAcento = texto	End IfEnd Function
lembrandoque essa função não tem nada a ver com fonética

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jonathan não estou conseguindo trazer a função.Tem como voce ver onde esta o erro no codigo.Query_produtos = "SELECT Produtos.codigo_produto, Produtos.codigo_categoria, Produtos.codigo_subcategoria, Produtos.codigo_marca, Produtos.codigo_produto_loja, Produtos.nome_produto, Produtos.descricao_produto, Produtos.autor, Produtos.codigo_isbn, Produtos.tamanhos, Produtos.cores, Produtos.preco_base, Produtos.preco_unitario, Produtos.desconto, Produtos.moeda, Produtos.quantidade_produto, Produtos.img_produtoPQN, Produtos.img_produtoGRD, Produtos.img_produto_adic01PQN, Produtos.img_produto_adic01GRD, Produtos.img_produto_adic02PQN, Produtos.img_produto_adic02GRD, Produtos.img_produto_adic03PQN, Produtos.img_produto_adic03GRD, Produtos.peso, Produtos.destaque_vitrine, Produtos.promocao, Produtos.data_inicio, Produtos.data_fim, Produtos.disponivel, Produtos.sigla_idioma FROM Categorias INNER JOIN Produtos ON Categorias.codigo_categoria = Produtos.codigo_categoria WHERE Produtos.nome_produto LIKE '%" & nome_produto & "%' AND Produtos.nome_produto LIKE '%" & TiraAcento(Palavra) & "%' AND Produtos.sigla_idioma = '"&varLang&"' AND Categorias.sigla_idioma = '"&varLang&"' " & queryORDERBY

Compartilhar este post


Link para o post
Compartilhar em outros sites

está correto o uso....esqueci de mencionar o seguinte....essa função retira os acentos...se no banco estiver com acento não vai ser localizado o registro

caso deseje com e sem acento adicione mais uma condição no SQL

AND (Produtos.nome_produto LIKE '%" & TiraAcento(Palavra) & "%'  OR Produtos.nome_produto LIKE '%" & Palavra & "%')
não esqueça de passar o valor a ser procurado para a variavel PALAVRA

Compartilhar este post


Link para o post
Compartilhar em outros sites

ai fica complicado, se não ele faria o seguinte:digita africaa rotina mandaria colocar acento no Aficaria áfricáo resultado seria não encontrado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem que criar uma função similar no campo do banco para fazer a comparação do dois sem acento!Tenta adaptar a função em ASP para o SQL!!!Aliás, como sua base é em Access, da pra deixar essa função pronta no banco e chamar pelo SELECT.Eu ja desenvolvi sistemas em VBA e utilizava sempre utilizava esse recurso!!!OK...!!?? T+...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para os interessados eu utilizei esta função e ela funcionou. tanto para colocar acento quanto para retirar acento.

 

E Jonathan apesar do que voce disse ter logica, não sei por qual motivo mas a função funcionou.

 

Fiz o teste com a palavra africa.

 

Novamente obrigado a todos.

 

function palavrasem(nome_produto)

 

palavrasem = Replace(nome_produto,"a","[a, á , ã]")

palavrasem = Replace(palavrasem,"A","[A, Á, Ã]")

palavrasem = Replace(palavrasem,"e","[e, é , è , ê]")

palavrasem = Replace(palavrasem,"E","[E , É , Ê]")

palavrasem = Replace(palavrasem,"i","[i , í , ì]")

palavrasem = Replace(palavrasem,"I","[i , Í]")

palavrasem = Replace(palavrasem,"o","[o , ó , ò , ô , õ]")

palavrasem = Replace(palavrasem,"O","[O , Ó , Ô , Õ]")

palavrasem = Replace(palavrasem,"u","[u , ú , ù]")

palavrasem = Replace(palavrasem,"U","[u , Ú]")

palavrasem = Replace(palavrasem,"c","[c , ç]")

palavrasem = Replace(palavrasem,"C","[C , Ç]")

palavrasem = palavrasem

end function

 

function palavracom(nome_produto)

palavracom = Replace(nome_produto,"ã","[a]")

palavracom = Replace(palavracom,"Ã","[A]")

palavracom = Replace(palavracom,"á","[a]")

palavracom = Replace(palavracom,"Á","[A]")

palavracom = Replace(palavracom,"ê","[e]")

palavracom = Replace(palavracom,"Ê","[E]")

palavracom = Replace(palavracom,"í","")

palavracom = Replace(palavracom,"Í","")

palavracom = Replace(palavracom,"õ","[o]")

palavracom = Replace(palavracom,"Õ","[O]")

palavracom = Replace(palavracom,"ú","")

palavracom = Replace(palavracom,"Ú","")

palavracom = Replace(palavracom,"ç","[c]")

palavracom = Replace(palavracom,"Ç","[C]")

palavracom = palavracom

end function

 

WHERE Produtos.nome_produto LIKE '%" & palavrasem(nome_produto) & "%' OR Produtos.nome_produto LIKE '%" & palavracom(nome_produto) & "%' OR Produtos.nome_produto LIKE '%" & nome_produto & "%'

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.