Wilker 3 Denunciar post Postado Junho 4, 2005 olha soh, eu to com um probleminha a resolver, espero q vcs possam em ajudareh o seguinte, eu tenho uma tabela no banco de dados de palavras a serem filtradas (m*****, #@?$%~, #@?$%~...), bom, ateh ai td bem, criar um filtro soh verificando elas, mas eu quero ir um pouco alem, quero fazer um upgrade nesse sistema de filtroo upgrade se baseia, em criar outras possibilidades a partir das palavras do banco, por exemplo, a palavra m*****, ele criaria as possibilidades:m3rdamerd4m3rd4ou seja, criaria as possibilidades extras, eu to querendo um algoritmo q faca isso, q crie essas possibilidades... ja pensei em funcoes recusivas, for... mas n consegui resolver isso de jeito nenhum... acho q ateh demoriria um poko esse processamento, mas isso n me importa (eu resolvo esse problema de outro jeito), ateh pq, pra palavras maiores como "#@?$%~", olhem as possibilidades:c4ralhoc4r4lhoc4ralh0c4r4lh0car4lhocar4lh0caralh0isso c n ta faltando nenhuma q eu esqueci... imagina com uma palavra com 10 vogais de "a", "e" e "o", seria uma quantidade imensa de possibilidades... as transferencias q eu quero (inicialmente) sao apenas a troca da letra "a" por "4", "e" por "3" e "o" por "0"c alguem tem alguma ideia pra gerar essas possibilidades, da um help ai... Compartilhar este post Link para o post Compartilhar em outros sites
Wilker 3 Denunciar post Postado Junho 4, 2005 eita galera... como eu tava sendo burro (duuhh) eu n preciso ter as possibilidades pra faze uma comparacao assim, eh soh eu faze um regEx, q eh bem + simples de gerar, eu fiz ateh uma funcao pra isso:function createReg($palavra) { $reg = "/\s*"; $c1[] = "a"; $c1[] = "e"; $c1[] = "o"; $c2[] = "[4a]"; $c2[] = "[3e]"; $c2[] = "[0o]"; $reg .= str_replace($c1, $c2, $palavra); $reg .= "\s*/i"; return $reg;}com isso eu soh preciso faze a comparacao por preg_match() q fica td resolvido :) bom, mas vale o desafio, vamo c a agente consegue faze o algoritmo citado no meu post acima, apenas por desafio mesmo ;) Compartilhar este post Link para o post Compartilhar em outros sites
Eclesiastes 2 Denunciar post Postado Junho 4, 2005 Fazendo: PHP [*]<? [*] [*]function Censura ($string) { [*] [*] $Caract = array( [*] "4" => "a", [*] "3" => "e", [*] "1" => "i", [*] "0" => "o"); [*] [*] $string = strtr($string, $Caract); [*] return $string; [*] [*]} [*] [*]echo Censura("P0rra"); [*] [*]?> Daí é só verificar se o valor retornado da função é um palavrão. Né isso !? Compartilhar este post Link para o post Compartilhar em outros sites
Daniel_Ribeiro 1 Denunciar post Postado Junho 4, 2005 O script a seguir: PHP [*]$palavra = "#@?$%~"; [*]$a[] = "c4ralho"; [*]$a[] = "c4r4lho"; [*]$a[] = "c4ralh0"; [*]$a[] = "c4r4lh0"; [*]$a[] = "car4lho"; [*]$a[] = "car4lh0"; [*]$a[] = "caralh0"; [*]echo "Similaridades em " . $palavra . '<br>'; [*]for($i=0;$i<count($a);$i++){ [*] similar_text($a[$i], $palavra, $p); [*] echo $a[$i] . ' - ' . $p . ' %<br>'; [*]} Resulta no resultado abaixo Similaridades em #@?$%~c4ralho - 85.7142857143 %c4r4lho - 71.4285714286 %c4ralh0 - 71.4285714286 %c4r4lh0 - 57.1428571429 %car4lho - 85.7142857143 %car4lh0 - 71.4285714286 %caralh0 - 85.7142857143 % Compartilhar este post Link para o post Compartilhar em outros sites
Eclesiastes 2 Denunciar post Postado Junho 4, 2005 Pelo que entendi o que eu postei é a solução. Compartilhar este post Link para o post Compartilhar em outros sites
Wilker 3 Denunciar post Postado Junho 5, 2005 nenhum dos 2 chego a resolucao... o objetivo eh a funcao gerar TODAS as possibilidades de conversao da palavra, o script do justice n mostra nada... pra comparar do jeito q você fez justice, eh melhor usar o regex q eu fiz, ja o do Daniel, ele ja da as possibilidades pra compararou seja, precisamos do script q gere as possibilidades, n q compare elas, exemplo, c fornecermos a palavra p**** para o script, ele deve retornar um array, com os seguintes elementos:$ret[0] = "p****";$ret[1] = "p0rra";$ret[2] = "porr4";$ret[3] = "p0rr4";espero q esteja claro agora ;) Compartilhar este post Link para o post Compartilhar em outros sites
Eclesiastes 2 Denunciar post Postado Junho 5, 2005 Mas a intenção não é verificar se a palavra é um palavrão ?! Compartilhar este post Link para o post Compartilhar em outros sites
Wilker 3 Denunciar post Postado Junho 5, 2005 no inicio era, mas como no 2 post eu consegui resolver esse problema, entao eu dexei um desafio, q seria fazer um script q gerasse todas as possibilidades (como ja mensionei antes)saco? a intencao n eh + verificar palavroes, e sim gerar as possibilidades Compartilhar este post Link para o post Compartilhar em outros sites
Eclesiastes 2 Denunciar post Postado Junho 5, 2005 Vich.. Tá brabo.. http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif Para até 4 vogais: PHP [*]<? [*] [*]function Combinacao($string) { [*] [*] $Caract = array( [*] "a" => "4", [*] "e" => "3", [*] "i" => "1", [*] "o" => "0"); [*] [*] $string = strtolower($string); [*] [*] $aPosVogal = array(); [*] // posição e vogal [*] for ($i=0; $i($string); $i++) { [*] if (ereg("[aeio]", $string[$i])) { [*] $aPosVogal[$i] = $string[$i]; [*] } [*] } [*] [*] // número de vogais [*] $nVogais = array_sum(array_count_values($aPosVogal)); [*] // número de combinações [*] $nCombinacoes = pow(2, array_sum(array_count_values($aPosVogal))); [*] [*] $Array[] = $string; [*] for ($i=0; $i<$nCombinacoes; $i++) { [*] [*] $str = $string; [*] if ($i == 0) { [*] foreach (array_keys($aPosVogal) as $pos) { [*] $str[$pos] = strtr($str[$pos], $Caract); [*] $Array[] = $str; [*] } [*] } elseif ($i == 1) { [*] foreach (array_reverse(array_keys($aPosVogal)) as $pos) { [*] $str[$pos] = strtr($str[$pos], $Caract); [*] $Array[] = $str; [*] } [*] } elseif ($i == 2) { [*] $aPos = array_keys($aPosVogal); [*] for ($j=0; $j<$nVogais; $j++) { [*] $cont = 1; [*] foreach ($aPos as $pos) { [*] $str = $string; [*] $str[$aPos[$j]] = strtr($str[$aPos[$j]], $Caract); [*] if ($cont > 1) { [*] $str[$aPos[$cont]] = strtr($str[$aPos[$cont]], $Caract); [*] $Array[] = $str; [*] } [*] $cont++; [*] } [*] } [*] } elseif ($i == 3) { [*] $aPos = array_reverse(array_keys($aPosVogal)); [*] for ($j=0; $j<$nVogais; $j++) { [*] $cont = 1; [*] foreach ($aPos as $pos) { [*] $str = $string; [*] $str[$aPos[$j]] = strtr($str[$aPos[$j]], $Caract); [*] if ($cont > 1) { [*] $str[$aPos[$cont]] = strtr($str[$aPos[$cont]], $Caract); [*] $Array[] = $str; [*] } [*] $cont++; [*] } [*] } [*] } elseif ($i == 5) { [*] $aPos = array_keys($aPosVogal); [*] for ($j=0; $j<$nVogais; $j++) { [*] $cont = 1; [*] foreach ($aPos as $pos) { [*] $str[$aPos[$j]] = strtr($str[$aPos[$j]], $Caract); [*] if ($cont > 1) { [*] $str[$aPos[$cont]] = strtr($str[$aPos[$cont]], $Caract); [*] $Array[] = $str; [*] } [*] $cont++; [*] } [*] } [*] } elseif ($i == 6) { [*] $aPos = array_keys($aPosVogal); [*] for ($j=1; $j<$nVogais; $j++) { [*] $str = $string; [*] $str = strtr($str, $Caract); [*] $aFlip = array_flip($Caract); [*] $str[$aPos[$j]] = strtr($str[$aPos[$j]], $aFlip); [*] $Array[] = $str; [*] $str = $string; [*] $str[$aPos[$j]] = strtr($str[$aPos[$j]], $Caract); [*] $Array[] = $str; [*] } [*] break; [*] } [*] [*] } [*] [*] ksort($Array); [*] foreach (array_unique($Array) as $combinacao) { [*] $aArray[] = $combinacao; [*] } [*] [*] return $aArray; [*] [*]} [*] [*]echo " "; [*]print_r(Combinacao("|a|a|a|a|")); [*] [*]?> Compartilhar este post Link para o post Compartilhar em outros sites