coincidencia de patrones de una manera inteligente, simple y eficiente en el tiempo
Frecuentes
Visto 118 equipos
0
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];
}
?>`
1 Respuestas
2
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 php pattern-matching or haz tu propia pregunta.
Es posible que desee agregar algunos datos de entrada/salida de muestra. Actualmente, al menos yo, no puedo ver cuál es tu pregunta. - Yoshi