Ir para conteúdo

POWERED BY:

Arquivado

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

Wilker

algoritmo de possibilidades

Recommended Posts

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.