Uma pequena brincadeira com arrays
Vi no blog do Pedro Doria que está aberto para quem quiser a lista de palavras bloqueadas no site da Caixa Econômica Federal. Além de chamar a atenção para o fato de que palavras como estupidez, fenda, furo, japa, e peru serem moderadas (ou seja, nunca envie uma mensagem perguntando sobre financiamento para criações de peru), junto com homossexual, lésbica e suas variações (o que mostra um pouco de preconceito por parte tanto da Caixa como de seus clientes), achei interessante o modo como é feita a implementação da rotina.
No caso é alimentado um array com um número servindo de índice e a palavra censurada e após é passado item por item do array verificando se a string recebida pela função confere, retornando true em caso positivo:
function Moderador(string){
var Palavrao = new Array();
Palavrao[1] = 'PALAVRAO1';
Palavrao[2] = 'PALAVRAO2';
Palavrao[3] = 'PALAVRAO3';
var QtdPalavroes = Palavrao.length ;
var ss = string;
ss = ss.toUpperCase() ;
var x;
for (i = 1; i < QtdPalavroes ; i++) {
procurar = Palavrao[i] ;
Existe = ss.indexOf(procurar);
if (Existe != -1){
return true;
}
}
}
Olha, eu confesso que em termos de otimização eu não sou lá essas coisas, mas é impressão minha ou essa rotina aí não seria muito mais rápida se fosse usada a palavra como índice do array? Assim sendo, só para pegar no pé, resolvi reescrever a função acima:
function Moderador(string){
var Palavrao = new Array();
Palavrao['PALAVRAO1'] = 1;
Palavrao['PALAVRAO2'] = 1;
Palavrao['PALAVRAO3'] = 1;
var ss = string;
ss = ss.toUpperCase() ;
Existe = Palavrao[ss];
if (Existe == 1){
return true;
}
}
Mesmo (creio eu) comendo um pouco mais de memória a gente tem uma solução que fica bem mais elegante, não?
(E caso você não tenha entendido qual é a moral desse post é que na real ele é um teste do Google Code Prettify. Quero ver se daqui pra frente eu escrevo mais códigos por aqui, aproveitando o fato que estou num momento mais nerd da minha vida, lendo bastante livros técnicos…)
Outubro 31st, 2007 at 6:41 am
Charles,
Acho que sua função só funciona se -string- for apenas uma palavra, enquanto a função original serve para um texto inteiro, pois o próprio script encarrega-se de buscar na string (indexOf(…)) palavras que sejam iguais ao que está sendo censurado.
Para usar sua função neste caso teria que dividir o conteúdo original em palavras (outro array) e testar cada uma individualmente na função. Mas se a função é usada na Caixa para testar apenas uma palavra de cada vez, acredito que as duas funcionariam da mesma forma (não sei como ela é usada).
Novembro 1st, 2007 at 9:27 am
Oi Charles,
eu sei que o RSSficado anda meio por conta do wiki. Não sei até que ponto tu ainda dá uma olhada nas coisas de lá. Eu usava ele pra driblar alguns RSS que só fornecem o título do post para o agregador. Hoje fui dar uma olhada lá e algumas páginas foram hackeadas, estão com um monte de links com nomes de remédio, provavelmente um google bombing. Tentei atualizar mas está dando erro. É isso mesmo? Já era a página do RSSficado? Ou está com problemas? Não queria te dar trabalho, mas só fiquei curioso pra saber, pq apesar da popularidade dos feeds pela web, pra mim ainda era útil
Abraço!
Guilherme
Novembro 1st, 2007 at 9:47 am
Altieres
É o caso mesmo: o teste é de uma palavra de cada vez. Não existe expressões compostas. =)