Escolar Documentos
Profissional Documentos
Cultura Documentos
1 de 70
INICIAR
ASSINE MVP
Curtir
Gostei (8)
LOGIN
(0)
13/07/2015 17:56
2 de 70
INICIAR
ASSINE MVP
LOGIN
Hosting
Todos que trabalham com informtica, e neste caso me dirijo principalmente aos profissionais
de centenas de funes teis nos SGBDS que gostaramos de utilizar, mas que por terem sido concebidas para outros
pases, com lngua e sistemas mtricos diferentes, se mostram inviveis para utilizao no nosso ambiente
operacional. Uma maneira muito interessante de tratar essa limitao, existente na maioria dos SGBDS, lanarmos
mo da criao de nossas prprias funes, adequando-as ao nosso ambiente e necessidades. Vamos exemplificar
esse procedimento com a criao de um procedimento armazenado em Java seu acesso como uma funo pblica no
SGBD Oracle.
Por que implementar a funo no SGBD e no na aplicao? Confesso que esta discusso esta muito em pauta e,
que coloca muitas vezes os administradores de Banco de Dados em conflito com os Desenvolvedores de Aplicao,
na minha modesta opinio o assunto deve ser tratado caso a caso com a devida iseno tcnica levando em conta
vrios fatores que podem pesar pela opo do SGBD, tais como:
A natureza da organizao para grandes Organizaes, como Bancos Comerciais, seu maior patrimnio so
os dados e pelo porte de suas organizaes a mudana de SGBD no uma opo constante, conheo organizaes
que trabalham a
mais de 10 anos com o mesmo SGBD e todos os seus projetos para daqui a 5 anos incluem o mesmo SGBD.
Neste caso a independncia da aplicao com relao ao SGBD no fator chave, inclusive a sugesto de alterao
do SGBD por parte de desenvolvedores externos visto com muitas reservas. Nestes casos o cliente espera
justamente o contrrio, que se obtenha o mximo de seu SGBD, valorizando seu investimento, que no pequeno.
13/07/2015 17:56
3 de 70
INICIAR
ASSINE MVP
LOGIN
e produo muito heterogneos, com base de dados nica optam pela centralizao das regras de negcio no SGBD
para evitarem os risco de perda da inteligncia da sua atividade e fortalecer a padronizao sobre os diversos
aplicativos que executam em paralelo. Dessa forma uma aplicaes diferentes (Delphi-client-server, .NET ou Java)
realizam exatamente o mesmo procedimento padronizado no Banco de Dados. Ao mesmo tempo em que o cliente
domina a inteligncia de seu negcio ele impe uma padronizao aos seus desenvolvedores, sem se utilizar de
Servidores de Aplicao ou protocolos criados para essa finalidade.
No estou querendo afirmar que sempre se devam criar as funes no SGBD, no se deve, mas que sempre se deve
proceder anlise da melhor alternativa para cada caso.
Um problema comum na localizao de registros, principalmente nomes prprios, vem da maneira como palavras
pronunciadas da mesma maneira possuem diversas grafias, por exemplo Rafael e Raphael, Valter e Walter, etc.. que
tem exatamente a mesma pronuncia, mas que possuem grafias diferentes o que torna a busca com operadores
relacionais e funes, como like, ineficientes em muitos casos. Para a lngua Inglesa existe, em diversos sistemas, a
funo Soundex (para maiores detalhes procure a documentao do seu SGBD e caso queira conhecer um pouco
mais sobre este algoritmo uma tima referncia ART OF COMPUTER PROGRAMMING - V.3 SORTING AND
SEARCHING, KNUTH, DONALD ERVIN).
Antes de entrar na funo propriamente dita, abrimos um parntese, existem diversas abordagens a esse problema,
como por exemplo: A funo deve ser inserida no banco ou aplicativo?, Como proceder a fonetizao?(devemos
fonetizar o nome completo ou cada parte do mesmo?) Existe um modelo que maximiza a eficincia do algoritmo?.
13/07/2015 17:56
4 de 70
INICIAR
ASSINE MVP
LOGIN
fonetizao, sua implementao no banco de dados e sua utilizao fazendo s vezes da funo soundex. S para
deixar registro existe um alfabtico fontico internacional, j reparou nos caracteres esquisitos de seu dicionrio
ingls-portugus?, infelizmente os lingistas de lngua portuguesa no se deram, ainda, a importncia que seria a
existncia de padronizao fontica em caracteres da lngua portuguesa para a informtica, isso quer dizer que em
virtude de diferenas nestes algoritmos podemos ter diferenas de resultados, mas este um assunto para outro
momento, e um dos motivos que podem servir de justificativa para que a funo fique centralizada no SGBD.
Como citado anteriormente iremos construir nossa funo tomando como base procedimentos armazenados em Java,
se possvel leia novamente as edies 4 e 5 da SQLMagazine.
A deciso de se usar procedimentos armazenados em Java no Oracle, e no uma linguagem como C/C++, que os
mesmos so executados originalmente no JVM do Oracle no espao de endereo do banco de dados, com isso temos
menor nmero de trocas de contexto entre processos ao nvel de sistema operacional ao mesmo tempo em que o
cdigo Java esta sempre executando como proprietrio do software Oracle, detalhe o Oracle possui uma JDK
embutido, Oracle9i - jdk 1.3 e o 10g - jdk 1.4 ambos Aurora. Para este exemplo utilizamos o Oracle 9i, creio que o
mesmo funcionar sem maiores problemas para o Oracle 10G, porm no possvel implementar esses
procedimento no Oracle Express Edition(XE) pois o mesmo no possui suporte para tal.
Neste exemplo iremos montar nossa classe Java fonetizar com a utilizao do comando
CREATE JAVA, este comando cria um objeto contendo um fonte de cdigo Java ou uma Classe(maiores detalhes
13/07/2015 17:56
5 de 70
INICIAR
ASSINE MVP
LOGIN
O fonte da funo de fonetizao em Java, para a lngua portuguesa que iremos utilizar a disponibilizada pelo
Instituto do Corao da Faculdade de Medicina da Universidade de So Paulo, que desenvolveu alguns componentes
de fonetizao em Java com suporte CORBA e est disponibilizando-os com cdigo fonte aberto
(licena GNU) no Consrcio de Componentes de Software para Sistemas de Informao em Sade (CCS-SIS). Estes
componentes de fonetizao foram utilizados na implementao do Servio de Identificao de Pacientes (PIDS) e
esto disponveis em : http://www.incor.usp.br/spdweb/ccssis/fonetica/.
Visando simplificar a sua utilizao usamos, apenas um pequeno fragmento desse pacote, mas fortemente indico a
todos que o estudem por completo.
Uma vez criada a classe temos que a tornar acessvel para nossos usurios, isso se d com a criao de uma
funo, obs.: Lembro que so necessrias as permisses e privilgios para a realizao dessas tarefas.
13/07/2015 17:56
6 de 70
INICIAR
ASSINE MVP
LOGIN
Por fim agora podemos criar um sinnimo pblico para tornar disponvel a todos os usurios do nosso banco a funo
que acabamos de criar.
Neste momento podemos testar nossa funo, imaginado uma tabela FUNCIONARIO , com o campo nome (varchar)
a pesquisa poderia ser feita da seguinte forma:
WHERE
FONETIZAR(NOME)=FONETIZAR(RAPHAEL)
Poderamos obter como resultado tanto o funcionrio RAPHAEL como RAFAEL, uma outra customizao possvel
seria a construo de uma tabela com os nomes fonetizados juntamente com um ndice para a tabela
FUNCIONARIO, com isso pode-se realizar uma busca mais rpida e com fragmentos do nome, poderamos ter
como retorno LUIZ RAPHAEL ou ROBERTO RAFAEL, juntamente com os resultados j retornados.
13/07/2015 17:56
7 de 70
INICIAR
ASSINE MVP
LOGIN
V - Anexos
Listagem 1
import java.util.*;
// A-Z, 0-9
13/07/2015 17:56
8 de 70
INICIAR
ASSINE MVP
LOGIN
//fonetizando o texto
int i, j, x, k, //contadores
13/07/2015 17:56
9 de 70
INICIAR
ASSINE MVP
LOGIN
i = 0;
j = 0;//zera os contadores
str = removeMultiple(str);
component = strToVector(str);
13/07/2015 17:56
10 de 70
INICIAR
ASSINE MVP
LOGIN
}//for
foncmp = component.elementAt(desloc).toString().toCharArray();
fonaux = foncmp;
j = 0;
if (component.elementAt(desloc).toString().length() == 1) {
fonwrk[0] = foncmp[0];
if (foncmp[0] == '_') {
13/07/2015 17:56
11 de 70
INICIAR
ASSINE MVP
LOGIN
else
if ((foncmp[0] == 'E')||
(foncmp[0] == '&')||
(foncmp[0] == 'I')) {
fonwrk[0] = 'i';
}//if
}//if
else {
if (foncmp[i] == '_')
fonfon[i] = 'Y';
// _ -> Y
else
if (foncmp[i] == '&')
fonfon[i] = 'i';
//& -> i
13/07/2015 17:56
12 de 70
INICIAR
ASSINE MVP
LOGIN
if ((foncmp[i] == 'E') ||
(foncmp[i] == 'Y') ||
(foncmp[i] == 'I'))
fonfon[i] = 'i';
// E, Y, I -> i
else
if ((foncmp[i] == 'O') ||
(foncmp[i] == 'U'))
fonfon[i] = 'o';
// O, U -> u
else
if (foncmp[i] == 'A')
fonfon[i] = 'a';
// A -> a
else
if (foncmp[i] == 'S')
fonfon[i] = 's';
// S -> s
else
fonfon[i] = foncmp[i];
13/07/2015 17:56
13 de 70
INICIAR
ASSINE MVP
LOGIN
fonaux = fonfon;
if ((fonaux[0] == 'a') ||
(fonaux[0] == 'i') ||
(fonaux[0] == 'o'))
endfon = 0;
else
if ((fonaux[1] == 'a') ||
(fonaux[1] == 'i') ||
(fonaux[1] == 'o'))
endfon = 0;
else
if ((fonaux[2] == 'a') ||
(fonaux[2] == 'i') ||
(fonaux[2] == 'o'))
13/07/2015 17:56
14 de 70
INICIAR
ASSINE MVP
LOGIN
else {
endfon = 1;
fonwrk[0] = fonaux[0];
}//else
copfon = 0;
copmud = 0;
newmud = 0;
switch (fonaux[i]) {
13/07/2015 17:56
15 de 70
INICIAR
ASSINE MVP
LOGIN
if ((fonaux[i+1]== 's') ||
(fonaux[i+1]== 'Z') ||
(fonaux[i+1]== 'M') ||
(fonaux[i+1]== 'N'))
copfon = 1;
else {
fonwrk[j] = 'a';
j++;
i++;
}//else
else copfon = 1;
break;
13/07/2015 17:56
16 de 70
INICIAR
ASSINE MVP
LOGIN
// B nao eh modificado
copmud = 1;
break;
x = 0;
if (fonaux[i+1] == 'i')
//ci vira si
{ fonwrk[j] = 's';
j++;
break;
}//if
13/07/2015 17:56
17 de 70
INICIAR
ASSINE MVP
LOGIN
{ fonwrk[j] = 'K';
fonwrk[j+1] = 'a';
fonwrk[j+2] = 'o';
i = i + 4;
break;
}//if
//ct vira t
if (fonaux[i+1] == 'T')
break;
// c vira k
if (fonaux[i+1] != 'H')
{ fonwrk[j] = 'K';
newmud = 1;
13/07/2015 17:56
18 de 70
INICIAR
ASSINE MVP
LOGIN
if (fonaux[i+1] == 'K')
{ i++;
break;
}//if
else break;
}//if
//chiti final
if (fonaux[i+1] == 'H')
if (fonaux[i+2] == 'i')
if ((fonaux[i+3] == 'a')||
(fonaux[i+3] == 'i')||
(fonaux[i+3] == 'o'))
x = 1;
13/07/2015 17:56
19 de 70
INICIAR
ASSINE MVP
LOGIN
// chini final
else
if (fonaux[i+3] == 'N')
if (fonaux[i+4] == 'i')
x = 1;
else;
else;
else
// chiti final
if (fonaux[i+3] == 'T')
if (fonaux[i+4] == 'i')
x = 1;
if (x == 1)
{ fonwrk[j] = 'K';
j++;
13/07/2015 17:56
20 de 70
INICIAR
ASSINE MVP
LOGIN
break;
}//if
//chi, nao chi final, chi vogal, chini final ou chiti final
if (j > 0)
if (fonwrk[j-1] == 's')
{ j--;
}//if
fonwrk[j] = 'X';
newmud = 1;
i++;
break;
13/07/2015 17:56
21 de 70
INICIAR
ASSINE MVP
LOGIN
if (fonaux[i+1] != 'o')
{ copmud = 1;
break;
}//if
else
if (fonaux[i+2] == 'R')
if (i != 0)
if (x == 1)
if (fonaux[i+3] == 'i')
x = 0; // nao e dores
else;
13/07/2015 17:56
22 de 70
INICIAR
ASSINE MVP
LOGIN
else
if (fonaux[i+3] == 'a')
if (fonaux[i+4] != 's')
x = 0;
else
x = 0;
else;
else;
else x = 0;
else x = 0;
if (x == 1)
{ fonwrk[j] = 'D';
fonwrk[j+1] = 'o';
fonwrk[j+2] = 'R';
i = i + 5;
}//if
13/07/2015 17:56
23 de 70
INICIAR
ASSINE MVP
LOGIN
break;
copmud = 1;
break;
//gui -> gi
if (fonaux[i+1] == 'o')
if (fonaux[i+2] == 'i')
{ fonwrk[j] = 'G';
fonwrk[j+1] = 'i';
j += 2;
i +=2;
}//if
13/07/2015 17:56
24 de 70
INICIAR
ASSINE MVP
LOGIN
else copmud = 1;
else
//gl
if (fonaux[i+1] == 'L')
if (fonaux[i+2] == 'i')
if ((fonaux[i+3]=='a')||
(fonaux[i+3]=='i')||
(fonaux[i+3]=='o'))
{ fonwrk[j] = fonaux[i+1];
fonwrk[j+1] = fonaux[i+2];
j += 2;
i += 2;
}//if
else
13/07/2015 17:56
25 de 70
INICIAR
ASSINE MVP
LOGIN
if(fonaux[i+3] == 'N')
{ fonwrk[j] = fonaux[i+1];
fonwrk[j+1] = fonaux[i+2];
j += 2;
i += 2;
}/*if*/
else copmud = 1;
else copmud = 1;
else
if (fonaux[i+1] == 'N')
if((fonaux[i+2]!='a')&&
(fonaux[i+2]!='i')&&
(fonaux[i+2]!='o'))
copmud = 1;
else
{ fonwrk[j] = 'N';
13/07/2015 17:56
26 de 70
INICIAR
ASSINE MVP
LOGIN
j += 2;
i++;
}//else
else
// ghi -> gi
if (fonaux[i+1] == 'H')
if (fonaux[i+2] == 'i')
{ fonwrk[j] = 'G';
fonwrk[j+1] = 'i';
j += 2;
i +=2;
}//if
else copmud = 1;
else copmud = 1;
break;
13/07/2015 17:56
27 de 70
INICIAR
ASSINE MVP
LOGIN
//H eh desconsiderado
break;
if (fonaux[i+1] == 's')
{ fonwrk[j] = 'i';
break;
}//if
else
if (fonaux[i+1] == 'Z')
{ fonwrk[j] = 'i';
break;
}//if
13/07/2015 17:56
28 de 70
INICIAR
ASSINE MVP
LOGIN
if (fonaux[i+1] != 'X')
copfon = 1;
else
if (i != 0)
copfon = 1;
else
if ((fonaux[i+2]=='a')||
(fonaux[i+2]=='i')||
(fonaux[i+2]=='o'))
{ fonwrk[j] = 'i';
fonwrk[j+1] = 'Z';
j += 2;
i++;
break;
}//if
else
13/07/2015 17:56
29 de 70
INICIAR
ASSINE MVP
LOGIN
if (fonaux[i+2]=='C' || fonaux[i+2]=='s') {
fonwrk[j] = 'i';
j++;
i++;
break;
}//if
else
{ fonwrk[j] = 'i';
fonwrk[j+1] = 's';
j += 2;
i++;
break;
}//else
break;
13/07/2015 17:56
30 de 70
INICIAR
ASSINE MVP
LOGIN
fonwrk[j] = 'G';
fonwrk[j+1] = 'i';
j += 2;
break;
//KT -> T
if (fonaux[i+1] != 'T')
copmud = 1;
break;
if ((fonaux[i+1] == 'a')||
(fonaux[i+1] == 'i')||
(fonaux[i+1] == 'o'))
copfon = 1;
13/07/2015 17:56
31 de 70
INICIAR
ASSINE MVP
LOGIN
if (fonaux[i+1] != 'H')
{ fonwrk[j] = 'o';
j++;
break;
}//if
else
fonaux[i+2] != 'o')
copfon = 1;
else
{ fonwrk[j] = 'L';
13/07/2015 17:56
32 de 70
INICIAR
ASSINE MVP
LOGIN
j += 2;
i++;
break;
break;
fonaux[i+1] != 'o') ||
{ fonwrk[j] = 'N';
j++;
}//if
13/07/2015 17:56
33 de 70
INICIAR
ASSINE MVP
LOGIN
else copfon = 1;
break;
//NGT -> NT
(fonaux[i+2] == 'T'))
{ fonaux[i+1] = 'N';
copfon = 1;
}//if
else
if (fonaux[i+1] == 'H')
if ((fonaux[i+2] != 'a')&&
(fonaux[i+2] != 'i')&&
13/07/2015 17:56
34 de 70
INICIAR
ASSINE MVP
LOGIN
copfon = 1;
else
{ fonwrk[j] = 'N';
fonwrk[j+1] = 'i';
j += 2;
i++;
else copfon = 1;
break;
if ((fonaux[i+1] == 's') ||
(fonaux[i+1] == 'Z'))
13/07/2015 17:56
35 de 70
INICIAR
ASSINE MVP
LOGIN
{ fonwrk[j] = 'o';
break;
}//if
else copfon = 1;
else copfon = 1;
break;
//PH -> F
if (fonaux[i+1] == 'H')
{ fonwrk[j] = 'F';
i++;
newmud = 1;
}//if
else
copmud = 1;
break;
13/07/2015 17:56
36 de 70
INICIAR
ASSINE MVP
LOGIN
if (fonaux[i+1] == 'o')
if (fonaux[i+2] == 'i')
{ fonwrk[j] = 'K';
j++;
i++;
break;
}//if
fonwrk[j] = 'K';
j++;
break;
13/07/2015 17:56
37 de 70
INICIAR
ASSINE MVP
LOGIN
copfon = 1;
break;
break;
if ((fonaux[i+1]=='a')||
(fonaux[i+1]=='i')||
(fonaux[i+1]=='o'))
if (i == 0)
{ copfon = 1;
break;
}//if
else
13/07/2015 17:56
38 de 70
INICIAR
ASSINE MVP
LOGIN
if ((fonaux[i-1] != 'a')&&
(fonaux[i-1]!='i')&&
(fonaux[i-1]!='o'))
{ copfon = 1;
break;
}//if
else
{ copfon = 1;
break;
}//if
else
13/07/2015 17:56
39 de 70
INICIAR
ASSINE MVP
LOGIN
j++;
break;
}//else
//ss -> s
if (fonaux[i+1] == 's')
{ copfon = 1;
i++;
break;
}//if
else
break;
}//else
13/07/2015 17:56
40 de 70
INICIAR
ASSINE MVP
LOGIN
(fonaux[i+2] == 'i')))
if (fonaux[i+1] != 'H')
((fonaux[i+3] != 'a')&&
(fonaux[i+3]!='i')&&
(fonaux[i+3]!='o'))))
{ fonwrk[j] = 'i';
j++;
copfon = 1;
break;
}//if
//sH -> X;
if (fonaux[i+1] == 'H')
{ fonwrk[j] = 'X';
i++;
13/07/2015 17:56
41 de 70
INICIAR
ASSINE MVP
LOGIN
break;
}//if
if (fonaux[i+1] != 'C')
{ copfon = 1;
break;
}//if
if (fonaux[i+2] == 'H')
{ fonwrk[j] = 'X';
i += 2;
newmud = 1;
break;
}//if
if (fonaux[i+2] != 'i')
{ copfon = 1;
break;
}//if
13/07/2015 17:56
42 de 70
INICIAR
ASSINE MVP
LOGIN
{ fonwrk[j] = 'X';
fonwrk[j+1] = 'i';
i = i + 3;
break;
}//if
if ((fonaux[i+3]=='a')||
(fonaux[i+3]=='i')||
(fonaux[i+3]=='o') )
{ fonwrk[j] = 'X';
j++;
i += 2;
break;
}//if
13/07/2015 17:56
43 de 70
INICIAR
ASSINE MVP
LOGIN
fonwrk[j] = 's';
fonwrk[j+1] = 'i';
j += 2;
i += 2;
break;
//TS -> S
if (fonaux[i+1] == 's')
break;
//TZ -> Z
else
if (fonaux[i+1] == 'Z')
break;
else copmud = 1;
break;
13/07/2015 17:56
44 de 70
INICIAR
ASSINE MVP
LOGIN
if (fonaux[i+1] == 'a'||
fonaux[i+1] == 'i'||
fonaux[i+1] == 'o')
if (i == 0)
{ fonwrk[j] = 'o';
j++;
}//if
else
{ fonwrk[j] = 'V';
newmud = 1;
}//else
13/07/2015 17:56
45 de 70
INICIAR
ASSINE MVP
LOGIN
{ fonwrk[j] = 'V';
newmud = 1;
}//else
break;
copmud = 1;
break;
break;
13/07/2015 17:56
46 de 70
INICIAR
ASSINE MVP
LOGIN
break;
else
if ((fonaux[i+1] == 'a')||
(fonaux[i+1] == 'i')||
(fonaux[i+1] == 'o'))
copfon = 1;
else
{ fonwrk[j] = 's';
j++;
}//else
break;
13/07/2015 17:56
47 de 70
INICIAR
ASSINE MVP
LOGIN
fonwrk[j] = fonaux[i];
j++;
break;
}//switch
if (copfon == 1)
{ fonwrk[j] = fonaux[i];
j++;
}//if
if (copmud == 1)
fonwrk[j] = fonaux[i];
if (copmud == 1 || newmud == 1)
{ j++;
k = 0;
while (k == 0)
13/07/2015 17:56
48 de 70
INICIAR
ASSINE MVP
LOGIN
{ fonwrk[j] = 'i';
k = 1;
}//if
else
if ((fonaux[i+1]=='a')||
(fonaux[i+1]=='i')||
(fonaux[i+1]=='o'))
k = 1;
else
if (fonwrk[j-1] == 'X')
{ fonwrk[j] = 'i';
j++;
k = 1;
}//if
else
if (fonaux[i+1] == 'R')
k = 1;
13/07/2015 17:56
49 de 70
INICIAR
ASSINE MVP
LOGIN
if (fonaux[i+1] == 'L')
k = 1;
else
if (fonaux[i+1] != 'H')
{ fonwrk[j] = 'i';
j++;
k = 1;
}//if
else i++;
}//for
}//if
}//else
13/07/2015 17:56
50 de 70
INICIAR
ASSINE MVP
LOGIN
if (fonwrk[i] == 'i')
fonwrk[i] = 'I';
else
//a -> A
if (fonwrk[i] == 'a')
fonwrk[i] = 'A';
else
//o -> U
if (fonwrk[i] == 'o')
fonwrk[i] = 'U';
else
//s -> S
if (fonwrk[i] == 's')
fonwrk[i] = 'S';
else
13/07/2015 17:56
51 de 70
INICIAR
ASSINE MVP
LOGIN
//E -> b
if (fonwrk[i] == 'E')
else
//Y -> _
if (fonwrk[i] == 'Y')
fonwrk[i] = '_';
component.setElementAt(str.copyValueOf(fonwrk), desloc);
j = 0; //zera o contador
}//for
str = vectorToStr(component);
str = removeMultiple(str);
13/07/2015 17:56
52 de 70
INICIAR
ASSINE MVP
LOGIN
return str.toUpperCase().trim();
int i,j;
palavra = strToVector(str);
String prep[] =
{"DEL","DA","DE","DI","DO","DU","DAS","DOS","DEU","DER","E","LA","LE","LES","LOS","VAN","VON","EL"};
if (palavra.elementAt(i).toString().compareTo(prep[j]) == 0) {
palavra.removeElementAt(i);
i--;
13/07/2015 17:56
53 de 70
INICIAR
ASSINE MVP
LOGIN
return vectorToStr(palavra);
int i, j; //contadores
13/07/2015 17:56
54 de 70
INICIAR
ASSINE MVP
LOGIN
j = 0;
fonaux = str.toCharArray();
||((fonaux[i]=='S')&&(fonaux[i-1]=='S')&&
foncmp[j] = fonaux[i];
j++;
13/07/2015 17:56
55 de 70
INICIAR
ASSINE MVP
LOGIN
str = str.copyValueOf(foncmp);
return str.trim();
}//removeMultiple
int i; //contador
13/07/2015 17:56
56 de 70
INICIAR
ASSINE MVP
LOGIN
switch (aux[i])
{ case '':
aux[i]='E'; // -> E
break;
case '':
aux[i]='E'; // -> E
break;
case '':
aux[i]='E'; // -> E
break;
case '':
aux[i]='A'; // -> A
break;
13/07/2015 17:56
57 de 70
INICIAR
ASSINE MVP
LOGIN
aux[i]='A'; // -> A
break;
case '':
aux[i]='A'; // -> A
break;
case '':
aux[i]='A'; // -> A
break;
case '':
aux[i]='A'; // -> A
break;
case '':
aux[i]='C'; // -> C
break;
case '':
aux[i]='I'; // -> I
break;
case '':
13/07/2015 17:56
58 de 70
INICIAR
ASSINE MVP
LOGIN
break;
case '':
aux[i]='O'; // -> O
break;
case '':
aux[i]='O'; // -> O
break;
case '':
aux[i]='O'; // -> O
break;
case '':
aux[i]='U'; // -> U
break;
case '':
aux[i]='U'; // -> U
break;
case '':
aux[i]='N'; // -> N
13/07/2015 17:56
59 de 70
INICIAR
ASSINE MVP
LOGIN
str = str.copyValueOf(aux).trim();
return str;
}//removeAccentuation
int i, j, //contadores
13/07/2015 17:56
60 de 70
INICIAR
ASSINE MVP
LOGIN
j = 0;
first = 1;
fonaux = str.toCharArray();
if (((fonaux[i]>='A')&&
(fonaux[i]<='Z')) ||
((fonaux[i]>='a')&&
13/07/2015 17:56
61 de 70
INICIAR
ASSINE MVP
LOGIN
((fonaux[i]>='0')&&
(fonaux[i]<='9')) ||
(fonaux[i] == '&') ||
(fonaux[i] == '_') ||
foncmp[j] = fonaux[i];
j++;
first = 0;
}//if
}//for
str = str.valueOf(foncmp);
return str.trim();
}//removeStrange
13/07/2015 17:56
62 de 70
INICIAR
ASSINE MVP
LOGIN
str = str.trim();
int i, j, //contadores
13/07/2015 17:56
63 de 70
INICIAR
ASSINE MVP
LOGIN
first = 1;
pos = 0;
rep = 0;
fonaux = str.toCharArray();
13/07/2015 17:56
64 de 70
INICIAR
ASSINE MVP
LOGIN
component.addElement(aux.copyValueOf(foncmp).trim());
pos = 0;
rep = 1;
}//if
}//if
//posicao do vetor
else {
foncmp[pos] = fonaux[i];
first = 0;
pos++;
rep = 0;
}//else
}//for
13/07/2015 17:56
65 de 70
INICIAR
ASSINE MVP
LOGIN
component.addElement(aux.copyValueOf(foncmp).trim());
return component;
}//strToVector
int i, j, desloc;
13/07/2015 17:56
66 de 70
INICIAR
ASSINE MVP
LOGIN
auxStr = (vtr.elementAt(j)).toString().trim();
auxChar = auxStr.toCharArray();
13/07/2015 17:56
67 de 70
INICIAR
ASSINE MVP
LOGIN
}//for
str = str.valueOf(foncmp);
return str.trim();
}//vectorToStr
Equipe DevMedia
Noticias/Dicas/Artigos publicados.
(0)
13/07/2015 17:56
68 de 70
INICIAR
ASSINE MVP
LOGIN
Meus comentarios
Diego Lirio
Legal a ideia de criar uma funcao de fonetizao.
Mas gostaria de saber se isso criado somente no Java.
Por que eu estava precisando examente de uma funcao dessa mas em oracle!
Att
[h +1 ano] - Responder
Rodrigo
Show este cdigo, testei e aprovei.
O soundex fraquissimo para ser utilizado no brasil, pois temos pessoas de todas as origens imagiveis e
inimaginaveis, tornando a busca fontica muito complexa.
Mas eu vi que necessrio um pequeno ajuste, pois onde feita a substituio do '', est trocando por
'C', que posteriormente acaba sendo substituido por 'K', o ajuste que fiz foi fazer com que seja trocado de
'' para 'S'.
Um exemplo prtico seria com a palavra 'caa', que se mantido o codigo original exibiria a fontica 'kaka',
sendo que o mais plausvel seria 'kasa' que retonaria as palavras 'cassa'(tipo de tecido) e 'casa'.
Rodrigo
Errata: substitui por 'SS' que posteriormente substituido por 'S' seno acaba sendo trocado por
'Z'
[h +1 ano] - Responder
allanjrn@gmail.com
[h +1 ano] - Responder
Wesley Yamazack
13/07/2015 17:56
69 de 70
INICIAR
ASSINE MVP
LOGIN
Um abrao.
[h +1 ano] - Responder
Publicidade
13/07/2015 17:56
70 de 70
INICIAR
ASSINE MVP
LOGIN
13/07/2015 17:56