Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Cómo mezclar X palabras sin que se repita la combinación

Estas en el tema de Cómo mezclar X palabras sin que se repita la combinación en el foro de PHP en Foros del Web. Hola, La idea es hacer esto, tengo la frase "hola mundo divino" y necesito que me saque todas las variaciones posible de la frase con ...
  #1 (permalink)  
Antiguo 14/04/2014, 11:08
Axo
 
Fecha de Ingreso: abril-2003
Ubicación: Virtual
Mensajes: 953
Antigüedad: 21 años
Puntos: 7
Cómo mezclar X palabras sin que se repita la combinación

Hola,

La idea es hacer esto, tengo la frase "hola mundo divino" y necesito que me saque todas las variaciones posible de la frase con N palabras, para posteriormente buscar cada variación posible en una tabla.

Busca una palabra en la base de datos que tenga las palabras siguientes:

Búsqueda 1:
hola y mundo y divino

Búsqueda 2:
hola y mundo

Búsqueda 3:
hola y divino

Búsqueda 4:
mundo y divino

Por ahora he llegado a esto:

Código PHP:
$frase="hola mundo divino";
$separamos=explode(" ",$frase);
$cuantaspalabras=count($separamos);
$aux=0;

for (
$i 0$i $cuantaspalabras$i++) {
echo 
$separamos[$i]; 

// SQL de búsqueda 

$sql="select * from tabla WHERE palabra LIKE '%".$separamos[$i]."%'";

//fin del for 
Sería pasar la frase, y que detecte cúantas palabras hay y en base a eso forme las combinaciones posibles.
  #2 (permalink)  
Antiguo 14/04/2014, 11:23
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 10 años
Puntos: 10
Respuesta: Cómo mezclar X palabras sin que se repita la combinación

El problema es que solo nos cuentas una parte, no se tu real meta pero teoricamente, no te serviria una consulta mysql que te busque todos los valores de la columna palabra que contengan "alguna" de las 3 palabras?

Lo digo porque has puesto los %% en la query
__________________
Pautas php:
No usar libreria mysql, usa mysqli; Separar siempre los controladores de la vista; Procedual es feo, ama los objetos
  #3 (permalink)  
Antiguo 14/04/2014, 11:38
Axo
 
Fecha de Ingreso: abril-2003
Ubicación: Virtual
Mensajes: 953
Antigüedad: 21 años
Puntos: 7
Respuesta: Cómo mezclar X palabras sin que se repita la combinación

Cita:
Iniciado por Qazser Ver Mensaje
El problema es que solo nos cuentas una parte, no se tu real meta pero teoricamente, no te serviria una consulta mysql que te busque todos los valores de la columna palabra que contengan "alguna" de las 3 palabras?

Lo digo porque has puesto los %% en la query
Buenas, eso ya lo hago con otra consulta, separo todas las palabras y busco donde la frase tenga hola, mundo y divino. Pero necesito filtrar más datos. Va enfocado al SEO, por ejemplo diseño web en madrid

Nos sacaría

diseño web
diseño madrid
web madrid

El en ya le pasaría otra función para quitar las preposiciones.
  #4 (permalink)  
Antiguo 14/04/2014, 11:44
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 10 años
Puntos: 10
Respuesta: Cómo mezclar X palabras sin que se repita la combinación

Bien, ya entiendo el problema...siempre me gusta saber un poco mas por si hay soluciones más faciles a las que busca el pregunta, pero en este caso entiendo que va ser así

he buscado un momento en google y hay muchos resultados

Aqui una referencia a stackoverflow con muchos ejemplo de como puedes conseguir lo que quieres

http://stackoverflow.com/questions/6342930/generate-word-combinations

a mi personalmente me gustó la respuesta que envia a esta pagina con esta funcion

http://docstore.mik.ua/orelly/webprog/pcook/ch04_26.htm#phpckbk-CHP-4-EX-6

Avisa si te sirve el código, sino sigo buscando
__________________
Pautas php:
No usar libreria mysql, usa mysqli; Separar siempre los controladores de la vista; Procedual es feo, ama los objetos
  #5 (permalink)  
Antiguo 14/04/2014, 15:09
Axo
 
Fecha de Ingreso: abril-2003
Ubicación: Virtual
Mensajes: 953
Antigüedad: 21 años
Puntos: 7
Respuesta: Cómo mezclar X palabras sin que se repita la combinación

Código PHP:

function pc_next_permutation($p$size) {
    
// slide down the array looking for where we're smaller than the next guy
    
for ($i $size 1$p[$i] >= $p[$i+1]; --$i) { }

    
// if this doesn't occur, we've finished our permutations
    // the array is reversed: (1, 2, 3, 4) => (4, 3, 2, 1)
    
if ($i == -1) { return false; }

    
// slide down the array looking for a bigger number than what we found before
    
for ($j $size$p[$j] <= $p[$i]; --$j) { }

    
// swap them
    
$tmp $p[$i]; $p[$i] = $p[$j]; $p[$j] = $tmp;

    
// now reverse the elements in between by swapping the ends
    
for (++$i$j $size$i $j; ++$i, --$j) {
         
$tmp $p[$i]; $p[$i] = $p[$j]; $p[$j] = $tmp;
    }

    return 
$p;
}

$set split(' ''diseno web madrid'); // like array('she', 'sells', 'seashells')
$size count($set) - 1;
$perm range(0$size);
$j 0;

do { 
     foreach (
$perm as $i) { $perms[$j][] = $set[$i]; }
} while (
$perm pc_next_permutation($perm$size) and ++$j);

foreach (
$perms as $p) {
    print 
join(' - '$p) . "\n";

Me da esto:

diseno web madrid
diseno madrid web
web diseno madrid
web madrid diseno
madrid diseno web
madrid web diseno

Y necesitaría que me diera esto:

diseno web
diseno madrid
madrid web
diseno web madrid (aunque esta me da igual, ya que con un explode lo tengo rápido)

Estoy viendo a ver si puedo modificarla pero se me escapa.
  #6 (permalink)  
Antiguo 14/04/2014, 15:27
Axo
 
Fecha de Ingreso: abril-2003
Ubicación: Virtual
Mensajes: 953
Antigüedad: 21 años
Puntos: 7
Respuesta: Cómo mezclar X palabras sin que se repita la combinación

Ya, me ha salido aunque tengo que retocar alguna cosilla pero básicamente es esto:


Código PHP:
function powerSet($in,$minLength 1) { 
   
$count count($in); 
   
$members pow(2,$count); 
   
$return = array(); 
   for (
$i 0$i $members$i++) { 
      
$b sprintf("%0".$count."b",$i); 
      
$out = array(); 
      for (
$j 0$j $count$j++) { 
         if (
$b{$j} == '1'$out[] = $in[$j]; 
      }
      
$out_val implode(" "$out); 
      if (
count($out) >= $minLength) { 
         
$return[] = $out_val
      } 
   } 
   return 
$return
}

$str_arr=explode(" ","diseno web madrid");
$resultado=powerSet($str_arr); 
foreach (
$resultado as $valor)
{
    
    echo 
" $valor <br>";

Y la salida es esta:

madrid
web
web madrid
diseno
diseno madrid
diseno web
diseno web madrid

Gracias por la ayuda!
  #7 (permalink)  
Antiguo 14/04/2014, 15:42
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 10 años
Puntos: 10
Respuesta: Cómo mezclar X palabras sin que se repita la combinación

Perdon!!, no me di cuenta, pensaba que tambien cubria palabras parciales de la frase. Me alegro que aun así te sirvio :)
__________________
Pautas php:
No usar libreria mysql, usa mysqli; Separar siempre los controladores de la vista; Procedual es feo, ama los objetos

Etiquetas: combinación, mezclar, palabras, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:42.