PHP - Enlazar palabras (thesaurus)

   
Vista:

Enlazar palabras (thesaurus)

Publicado por Sebastián (7 intervenciones) el 26/04/2008 01:36:31
Hace tiempo vengo pensando de como hacer un par de cosas en PHP, pero ahora se me vino a la cabeza esta: quiero hacer que por ejemplo tengo en una base de datos con nombres de personajes con sus biografias y demas, y que a escribir un articulo se fije en la base de datos si hay algun nombre de personaje nombrado en el articulo, y que de haberlo lo enlace a la ficha del personaje (o sea que haga el hipervinculo hacia la pagina). Similar a Wikipedia, que no estoy seguro si lo hacen manualmente o automaticamente, pero en caso de ser manualmente se que hay otras paginas que lo tienen automatizado.
Se me ocurrieron un par de ideas como usar preg_replace para que en el momento que se cargue la pagina haga una busqueda en el texto del articulo y comparar si hay algun nombre de algun personaje, y en caso de haberlo que lo reemplace agregandole un hipervinculo. Un ejemplo sencillo:

Código:

<?
$articulo='La pelea de Goku contra Majin Vegeta fue...';
$reemplazo[0]= preg_replace("/Goku/","<a href='#Goku'>Goku</a>",$articulo);
$reemplazo[1]= preg_replace("/Vegeta/","<a href='#Vegeta'>Vegeta</a>",$reemplazo[0]);
echo $reemplazo[1];
?>


Por supuesto que en vez de eso tendria que haber un while y un SELECT para cargar los nombres de los personajes automaticamente, aunque no estoy muy seguro de como hacerlo pero tengo una noción.

Otra cosa de la que no estoy seguro si es conveniente hacerlo de esta forma, ya que la pagina podria demorar mas en cargarlo al tener que realizar constantemente la busqueda. Lo que se me ocurre es hacerlo a la hora de "insertar" el articulo. Peero, las desventajas de esto serian que si por ejemplo agrego un personaje nuevo despues de agregar el articulo, este no lo vincularia (no se si me explico), asi que tendria que utilizar la opcion uno, a menos que a ustedes se les ocurra otra forma magica de hacerlo, les agradeceria si me avisan.
Tambien agradeceria cualquier forma de optimizar el codigo, saludos!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Enlazar palabras (thesaurus)

Publicado por insignia (1 intervención) el 28/04/2008 12:11:29
Cualquier solución en tiempo de ejecución conllevará relentizar la carga de la página está claro. De todas maneras una solución viable en tiempo de ejecución sería guardar en las biografías el texto a enlazar y su dirección... y a la hora de mostrar los articulos llamar a una funcion que haga algo tan simple como lo siguiente:

function obtenertags($texto){
//Obtenemos todos los registros de biografía y guardamos los textos a enlazar en un array $busqueda y en otro las url ya con formato de enlace "<a href='" . $url . "'>" . $textoaenlazar . "</a>" llamado $remplaza

return str_replace($busqueda,$remplaza,$texto);
}

El mayor problema en el tiempo de carga es si tienes un gran número de biografías ya que tendrías que recorrer todos sus registros, otra solución es tener ya los arrays creados en la funcion, y al insertar una nueva biografía por ejemplo, lanzar un script que edite el archivo de la función y añada los nuevos valores.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar