Banco de Dados

2 out, 2009

A busca com e sem acentuação definitiva

Publicidade

Todos nós admiramos a eficiência dos buscadores que praticamente entendem o que desejamos buscar. Porém, o usuário precisa ter critério ao digitar no campo de buscas o que realmente deseja buscar para não ver que, ao encontrar milhares de resultados, na verdade não encontrou o que desejava.

Por outro lado, programadores se desdobram buscando criar um algoritmo que facilite a busca pelos melhores resultados, não necessariamente o resultado ideal.

Ferramentas de busca como o Google têm um algoritmo que permite buscar o que se deseja mesmo que escrevamos uma palavra ou expressão com a redação próxima da correta ou mal escrita.

Línguas como o português, espanhol e francês têm palavras acentuadas. A busca deve independer dos caracteres acentuados e aí começam os problemas.

Há scripts que retiram os acentos das palavras mas, ao fazerem isto, podem complicar a busca, ao invés de facilitar.

Por exemplo. Imagine que tenhamos uma base de cadastros na qual desejamos buscar as pessoas que residam na cidade de “Aguaí”. Poderíamos digitar o nome da cidade, mas não temos certeza se alguma pessoa foi cadastrada com o nome da cidade sem acento na letra “i”. Aí está a importância básica da retirada dos acentos.

Na internet há um script muito divulgado que faz a retirada dos acentos, conforme exibido abaixo. Desconheço o autor, mas foi um bom começo:

O problema nesse script é que o resultado apresentado será apenas palavras das cidades não acentuadas: AGUAI, ou TAGUAI, não apresentando justamente os cadastros com cidades acentuadas corretamente, provavelmente a maioria.

Há outras versões deste script onde (Letra = “%”); neste caso a situação piora, pois trará outros resultados indesejados como CARAGUATATUBA.

O nosso objetivo é digitar no campo de busca uma palavra com ou sem acento, como Aguaí ou Aguai, e obter como resultado cadastros com e sem acento.

A solução é simples, mas tem um artifício pouco conhecido dos programadores: o par de colchetes [ ]

Façamos a seguinte alteração no script:

O segredo, se é que podemos chamá-lo assim, está em reescrever a palavra String de busca por uma variante que o banco de dados interpretará como sendo várias opções. Veja o exemplo de Aguaí:

o banco de dados interpreta o conjunto de letras dentro do par de colchetes como sendo várias opções para a mesma letra [a,á,à,ã,â,ä]. Podemos acrescentar as formas em maiúscula e minúscula para utilização em banco de dados “Case sensitive”.

Veja a busca como ficou:

O resultado desta busca será “Aguaí e Aguai”, que interessam, além de “Taguaí e Taguai” que são apresentados pela proximidade do nome, como ocorre em todos os sites de busca. Além disso, poderemos acrescentar caracteres para auxiliar as buscas.

Reparem que acrescentamos “SS” junto à cedilha ([c,ç,ss]) porque em alguns casos, como da busca pelo país “Suíça”, o usuário pode escrever “suissa” no campo de busca, já que em inglês o nome do país é “swiss”. O script “entenderá” o que se quer apresentando apenas “suíça”. É uma forma de prever certos equívocos dos usuários.

Outros caracteres podem ser acrescentados como subscrito, sobrescrito, frações etc.

Até mais.