Comunidad de diseño web y desarrollo en internet online

Resumir un texto segun unos parametros de busqueda

Citar            
MensajeEscrito el 13 Feb 2007 03:21 pm
Saludos a todos.

Por acá supongo que todos habreís usado el google.

Si buscamos por ejemplo "PHP MySQL" nos devuelve una lista de resultados con algo como esto:

"PHP en castellano. Tutorial de PHP y MySQL. ... alguien sabe como conectar mysql con excel o como hacer reportes en php? como descargar un archivo en php ..."

que no es más que una lista de subcadenas separadas por ... donde aparece una o mas coincidencias.

Bueno, estoy tratando de hacer eso con PHP: me traigo una cadena que contiene de 1 a N palabras de busqueda y me gustaria crear un resumen con las subcadenas como hace google.

Alguna sugerencia o codigo para esto?

Si lo logro por mi cuenta lo posteo acá, si quieren echarme un cable, lo agradecería mucho

un saludo ^^

Por Duilio

Claber

2590 de clabLevel

25 tutoriales
1 articulo

Genero:Masculino   Premio_Secretos

Venezuela

firefox
Citar            
MensajeEscrito el 14 Feb 2007 10:48 pm

Código :

SELECT SUBSTRING(INSTR(campo)-5,50) FROM tabla


Es una idea para partir.


saludos

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 15 Feb 2007 03:14 pm
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 :crap:

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&uacute;squeda.';
      
     elseif( strlen($patron) < 5 ):
     
       $this->error = 'La palabra de b&uacute;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 ^^

Por Duilio

Claber

2590 de clabLevel

25 tutoriales
1 articulo

Genero:Masculino   Premio_Secretos

Venezuela

firefox
Citar            
MensajeEscrito el 16 Feb 2007 06:44 pm
Interesante :D



pd. Eso se puede hacer con MySQL, nada mas. Solo es cosa de usar REGEXP y crear un store procedure.
:P

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 16 Feb 2007 07:07 pm
Vos siempre quitándome la diversión xD

Supongo que con MySQL será aún más rápido. Pero hay un pequeñísimo detalle:

mi hosting no tiene mysql 5. es decir, no hay store procedures :(

Por cierto, ¿cuál buen hosting tiene mysql 5?

Por Duilio

Claber

2590 de clabLevel

25 tutoriales
1 articulo

Genero:Masculino   Premio_Secretos

Venezuela

firefox
Citar            
MensajeEscrito el 16 Feb 2007 10:40 pm

Duilio escribió:

Vos siempre quitándome la diversión xD

Supongo que con MySQL será aún más rápido. Pero hay un pequeñísimo detalle:

mi hosting no tiene mysql 5. es decir, no hay store procedures :(

Por cierto, ¿cuál buen hosting tiene mysql 5?


:lol:


http://www.redcoruna.com/

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.