coincidencia de patrones de una manera inteligente, simple y eficiente en el tiempo

Estoy creando un archivo php simple para hacer coincidir la cadena ingresada por el usuario que busca un grupo que le convenga. Necesito mostrar 5 registros de la base de datos que coincidan con la cadena al máximo. También probé la función soundex() en php y mysql. Ahora estoy tratando de diseñar un comparador de patrones de expresiones regulares para este propósito. ¿Alguien puede sugerirme un patrón de expresión regular de muestra para este propósito? ¿Hay alguna otra forma que pueda implementarse fácilmente y que no sea demasiado compleja o consuma mucho tiempo? Intenté hacer esto con código usando un algoritmo de distancia. Quiero que sea básicamente, por ejemplo, tipos de usuario en "dps".

El php debería recuperar eso

<?php
function minimum($a,$b,$c)
{
    if($a>$b)
    {
        if($a>$c)
        {
            return $a;
        }
        else
        {
            return $c;
        }
    }
    else
    {
        if($b>$c)
        return $b;
        else
        return $c;
    }
}
function Distance($s ,   $t)
{

  $m=strlen($s);
  $n=strlen($t);
  $d[]=array();
for( $i=0;$i<$m;$i++)
{

    for($j=0;$j<$n;$j++)
    {

        $d[$i][$j]=0;

    }

}

for ( $i=0; $i<$m;$i++)
  {
    $d[$i][0] = $i;
  }
for( $j=0;$j<$n;$j++)
  {
    $d[0][$j] = $j;
  }

  for ($j=1;$j<$n;$j++)
  {
    for ($i=1;$i<$m;$i++)
    {
      if ($s[$i] ==$t[$j])
        $d[$i][$j] =$d[$i][$j];       // no operation required
      else
        $d[$i][ $j] = minimum
                   (
                     $d[$i-1][ $j] + 1,
                     $d[$i] [$j-1] + 1,
                     $d[$i-1][ $j-1] + 1
                   );
    }
  }

  return $d[$m-1][$n-1];

}

?>`

preguntado el 04 de julio de 12 a las 07:07

Es posible que desee agregar algunos datos de entrada/salida de muestra. Actualmente, al menos yo, no puedo ver cuál es tu pregunta. -

1 Respuestas

Bueno, hay muchos métodos para lograr eso:

  • Puedes probar con Levenshtein: http://php.net/manual/en/function.levenshtein.php que se utiliza para calcular la distancia entre dos cuerdas
  • Teniendo en cuenta las expresiones regulares, encontrará problemas si puede tener diferentes longitudes de cadena...
  • Otra opción sería considerar ElasticSearch (http://www.elasticsearch.org/) o Solr (http://lucene.apache.org/solr/) si tiene muchos datos de texto, esto podría resultar ser la mejor opción

Respondido 04 Jul 12, 08:07

Bueno, PEM, si hubieras visto mi código, había hecho exactamente lo que sugeriste primero. Tal vez pensaste que había adjuntado un código sin sentido solo porque sí. - Ajax Aristodemos

Gracias por estas sugerencias. Probé Elastic Search. Funciona maravillosamente. Gracias. Eres genial. Ajax Aristodemos

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.