Gracias como Siempre Dano.
Yo había empezado con algo así, pero pensé que se me haría complicado a medida que fueran más parametros de búsqueda y que además yo quisiera traerme no sólo la primera aparición. Sino 3 o 4 oraciones donde apareciera la cadena deseada.
Así que luego de darle una vuelta decidí usar PHP y al final decidí hacerlo apoyandome en funciones nativas (que siempre están ahí para hacerte todo más fácil, rápido y legible.
Una de las cosas que me di cuenta es que el procesador parece correr más rápido con estas funciones de PHP que si tu creas tu propia función usando while, for, etc
Mi clase:
Código :
<?php
class Andromeda {
var $parametros;
var $expreg;
var $error;
var $separador= ' ... ';
var $frases=4;
function __construct($patron,$frases=NULL) {
if( empty($patron) ):
$this->error = 'Debe introducir al menos una palabra para realizar la búsqueda.';
elseif( strlen($patron) < 5 ):
$this->error = 'La palabra de búsqueda es muy corta.';
else:
if( !is_null($frases) ) $this->frases = $frases;
$this->parametros = str_replace(' ','+', trim($patron) );
$this->expreg = '('.str_replace('+','|',$this->parametros ).')';
endif;
}
function resumir($cadena,$resaltar=true) {
$cadena = strip_tags($cadena);
$matriz = explode('.',$cadena);
$matriz = preg_grep('@'.$this->expreg.'@si',$matriz);
$n = count($matriz);
while( $n-- > $this->frases ) array_pop($matriz);
return $this->resaltar(implode($this->separador,$matriz) );
}
function resaltar($cadena) {
return preg_replace('@'.$this->expreg.' @i','<span class="resaltar">$1</span> ',$cadena);
}
}
?>
Para usarla hay que crear un objeto con los parametros de busqueda como parametro y la cantidad de oraciones que quieres traerte resaltadas (por defecto 4)
Código :
$this->andromeda = new Andromeda($parametros,2);
Los parametros de busqueda deben estar separado por espacios o por signo de "+"
Luego se llama a
Código :
string $andromeda->resumir($cadena);
Y devolvéra una cadena con 2 oraciones que coincidan con los parametros de busqueda, y además resaltadas con la clase "resaltar" (por supuesto esta clase deberia existir en la hoja de estilo CSS:
Código :
.resaltar {
background: #FFFF66;
font-weight: bold;
}
Nota: hasta ahora el codigo entiende oraciones separadas por "." no párrafos <p></p> ni nada por el estilo, pero se podría arreglar... Tampoco corta las oraciones: si tienes una oración de 100000 caracteres la colocará en el resumen tal cual (también habría que programarlo) Para lo que yo necesito creo que me servirá así.
Por supuesto, lo más probable es que hayan cosas que optimizar y la clase tenga algunos bugcillos... Pero por ahí va la cosa...
Espero que a alguien le sirva
Saludos
Si alguien quiere aportar algo o tiene alguna duda,
dejelé abajo
v
v
v