Busador

41
MANUAL DE PROGRAMADOR BUSCADOR INTELIGENTE DE INFORMACIÓN WEB ELABORADO POR: SEGUNDO ARÉVALO CALDERÓN [email protected]

description

manual de programación

Transcript of Busador

Page 1: Busador

MANUAL DE PROGRAMADOR

BUSCADOR INTELIGENTE DE INFORMACIÓN WEB

ELABORADO POR:

SEGUNDO ARÉVALO CALDERÓN

[email protected]

Page 2: Busador

INDICE

INDICE ................................................................................................................................................. 2

1. DESCRIPCIÓN GENERAL...................................................................................................... 3

2. FICHA TÉCNICA...................................................................................................................... 3

3. PROCESO DE INSTALACIÓN ............................................................................................... 4

4. DESCRIPCIÓN TÉCNICA....................................................................................................... 5 4.1. DIRECTORIO PRINCIPAL ............................................................................................... 5

4.1.1. AYUDAS_CONFIG.PHP ............................................................................................... 6 4.1.2. INDEX.PHP ................................................................................................................... 6

4.2. EL DIRECTORIO K ........................................................................................................... 9 4.3. DIRECTORIO DE CGIS ..................................................................................................... 9

5. PROCESOS IMPORTANTES .................................................................................................. 9 5.1. CREACIÓN DE LA BASE DE DATOS, TABLAS Y REGISTROS.................................. 9 5.2. DISEÑO DE LA BASE DE DATOS................................................................................. 10

5.2.1. CREAR BUSCADOR.PHP ........................................................................................... 10 5.3. ANIMACIONES FLASH ................................................................................................. 13

6. CÓDIGO FUENTE .................................................................................................................. 14 6.1. ADMINISTRAR.PHP....................................................................................................... 14 6.2. ADMIN_TABLA.PHP...................................................................................................... 14 6.3. AYUDAS.PHP.................................................................................................................. 20 6.4. BUSCAR.PHP .................................................................................................................. 25 6.5. CATEGORIAS.PHP ......................................................................................................... 29 6.6. ESTADISTICAS.PHP ...................................................................................................... 30 6.7. HIST.PHP ......................................................................................................................... 31 6.8. KNN.PHP.......................................................................................................................... 31 6.9. LOGO.PHP ....................................................................................................................... 34 6.10. MENU.PHP....................................................................................................................... 35 6.11. PREFERENCIAS.PHP ..................................................................................................... 37 6.12. PRINCIPAL.PHP.............................................................................................................. 38 6.13. VIEW.PHP........................................................................................................................ 38

Page 3: Busador

MANUAL DE PROGRAMADOR 3

1. DESCRIPCIÓN GENERAL

“Buscador Inteligente” es un producto que permite realizar búsquedas de

documentos en la web y presentar los resultado en orden de más relevante a menos

relevante, mediante técnicas inteligentes (procesamiento de lenguaje natural,

reconocimiento de patrones, redes neuronales, algoritmo de vecinos más cercanos)

innovadoras, utlizando enlace de varios motores de búsquedas.

2. FICHA TÉCNICA

BUSCADOR INTELIGENTE Descripción

Requiere conexión a internet vía dial-up o conexión de red Lan Requiere conocimientos de PHP, HTML, CSS, JavaScript, SQL, C para los CGIs Requiere base de datos MySQL Requiere servidor web APACHE, con soporte para CGIs, PHP y MySQL. Requiere navegador Internet Explorer 5.0, Netscape 6, Opera 7 o superiores Requiere cualquier plataforma de Linux, Windows para el servidor y clientes. Requiere CGIs para evaluar la calidad del análisis usando reconocimiento de patrones, lenguaje natural, redes neuronales, algoritmo de vecinos mas cercanos. Requiere aplicación de animaciones y diseño de gráficos Macromedia MX, por lo tanto, el cliente necesita el Flash Player para observar las animaciones. Requiere editor de documentos Context v0.97.3 para el administrador del buscador inteligente. Requiere presentación gráfica de base de datos MySQL-Front 3.0 para el administrador del buscador inteligente. Requiere hardware de servidor, con: Procesador AMD 2.6 GHZ BOX, Memoria RAM DDR 512 MB PC-333, Disco duro 160 GB, Monitor 17’’ SVGA, Teclado 101 teclas, Unidad de CD-ROM 52x, Disquetera 3 ½, Tarjeta de Sonido, Video 64MB, Tarjeta Fax / Modem 56KB Interno y/o Tarjeta de Red PCI 100, Ratón, Parlantes.

Este trabajo se fundamenta en los siguientes trabajos previos y se encuentran

disponibles gratuitamente en la dirección y en el CD de instalación del sistema

aplicacional “Buscador Inteligente”:

Segundo Arévalo Calderón [email protected]

Page 4: Busador

MANUAL DE PROGRAMADOR 4

Librería spranlib y annlib para redes neuronales y reconocimiento de patrones

(http://www.ph.tn.tudelft.nl/~sprlib/stuff.html)

Librería spr para reconocimiento de patrones

(http://www-etsi2.ugr.es/depar/ccia/rf/)

Librería spanish stream para procesamiento de lenguaje natural

(www.snowball.tartarus.org\index.html)

Librería adm_php para la manipulación de formularios para PHP y la

administraciuón de bases de datos en MySQL.

(www.unaq.net/crv/ayudasphp)

3. PROCESO DE INSTALACIÓN

1. Buscar en el CD la carpeta software el archivo “EasyPHP 1.7” y siga los

pasos de instalación, en el caso de la plataforma windows se instalará en:

“c:\Archivos de programa\easyphp\www” y en Linux “/var/www/htm”.

2. Ejecutar el EASYPHP, en la siguiente dirección:

Si se visualiza esta imagen al lado del reloj,y parpadeando, se ha configurado

correctamente el EASYPHP, ,en el caso de no parpadera, se recomienda instalar

EasyPHP para Windows descargando desde www.easyphp.org o instalar Linux

con todos los servicios, como se describe en www.redhat.com.

3. Copiar la carpeta buscador del CD a la carpeta principal del servidor, en el

caso de EasyPHP esta carpeta es c:\Archivos de programa\easyphp\www y en

el caso de Linux, esta carpeta es /var/www/html

Segundo Arévalo Calderón [email protected]

Page 5: Busador

MANUAL DE PROGRAMADOR 5

4. Instalar un navegador y configurar el acceso a internet o el acceso a red con

tcp/ip dependiendo del tipo de conexión que exista al servidor.

5. Correr el script crearbuscador.php desde el directorio buscador escribiendo

http://servidor/buscador/crearbuscador.php, el nombre servidor puede ser

cambiado o puede usarse la dirección ip del servidor, la carpeta buscador

puede ser cambiada o puede omitirse si se copian los archivos directamente

bajo la carpeta principal del servidor

6. Abrir la página principal index.php escribiendo http://servidor/buscador Esto

abrirá la página principal llamada index.php

7. Escribir el nombre de usuario y contraseña como se describe en el manual de

usuario o del administrador

8. Usar el buscador como se describe en el manual de usuario.

4. DESCRIPCIÓN TÉCNICA

La aplicación es un conjunto de archivos .PHP, .SWF, .EXE distribuida en varios

directorios:

administrar.php, admin_tabla.php, ayudas.php, ayudas_config.php, buscar.php,

categorias.php, crearbuscador.php, estadisticas.php, hist.php, knn.php, logo.php,

menu.php, pedirpreferencias.php, preferencias.php, principal.php, view.php

4.1. DIRECTORIO PRINCIPAL

El directorio principal contiene:

Directorio k.

Archivos .swf que son animaciones flash y

Archivos php que son los programas en sí.

Segundo Arévalo Calderón [email protected]

Page 6: Busador

MANUAL DE PROGRAMADOR 6

4.1.1. AYUDAS_CONFIG.PHP

Sirve para configurar globalmente todo el sistema, los colores, claves de acceso a la

base de datos entre otros.

<?php //Configuración para ayudas.php //Todas las páginas (programas) usan (deben usar) las variables aquí definidas //Esto se hace al incluir ayudas.php al inicio de cada página // Variables de configuración. Revisar y cambiar apropiadamente define ("DBHOST", "localhost"); define ("DBUSER", "root"); define ("DBPASS", ""); define ("DBNAME", "buscador"); define ("TITULO", "Superbuscador Inteligente"); define ("BGCOLOR", "aliceblue"); //Funcion para definir estilos, tipos de letras, colores, etc. function estilos(){ echo '<style>A:link,A:hover,A:visited{color:darkblue;text-decoration:none;}'; echo 'INPUT,SELECT{font-size:10;color:darkblue;background-color:lightcyan;cursor:hand;}'; echo 'TEXTAREA{font-size:14;color:darkblue;background-color:lightcyan;cursor:hand;}'; echo 'TH{font-size:14;color:white;background-color:darkblue;font-family:Tahoma;border-color:white;border-width:1px;}'; echo 'TD,TABLE{font-size:14;color:#000040;font-family:verdana;border-color:#CCEEFF;border-width:1px;}'; echo 'H3{font-size:18;color:#0000a0;font-family:Tahoma;}'; echo 'H4{font-size:20;color:#0000a0;font-family:Tahoma;}'; echo '.x{font-size:12;font-family:system;color:navy;background-color:aliceblue;cursor:hand;}'; echo '.y{font-size:20;color:navy;background-color:lightcyan;cursor:hand;font-family:courier;}'; echo 'body{font-family:verdana;font-size:12;scrollbar-base-color:#a0a0ff;}'; echo '</style>'; } ?>

4.1.2. INDEX.PHP

El programa principal es index.php

<?php $p="principal.php"; session_start(); if(!empty($_SESSION["nombre_usuario"])) abrir($p); $ingreso=1; include ("ayudas.php"); inicio(); estilos(); echo '<style>'; echo 'body{font-family:verdana;font-size:12;background-color:#c0dfec;}'; echo '</style>'; if(!empty($campo_nombre_usuario)) validar_usuario(); function abrir($p,$g,$c) { global $campo_nombre_usuario; $_SESSION["nombre_usuario"]=$campo_nombre_usuario; $_SESSION["codigo_usuario"]=$c; $_SESSION["grupo_usuario"]=$g; echo "<script language=javascript>location.href='$p';</script>"; exit(); } function validar_usuario() { global $campo_nombre_usuario,$campo_clave_usuario,$p; $u=$campo_nombre_usuario=strtoupper($campo_nombre_usuario); $c=$campo_clave_usuario=strtoupper($campo_clave_usuario); if ($campo_nombre_usuario=="SAC") abrir($p,"ADMINISTRADOR",3); db_open ();

Segundo Arévalo Calderón [email protected]

Page 7: Busador

MANUAL DE PROGRAMADOR 7

$q="select * from usuarios where nombre='".$u."' and clave='".$c."'"; $dbrst = db_query($q); if ($dbrst && db_num_rows($dbrst) > 0) { $reg = db_fetch_array($dbrst); if ($reg != null) { abrir ($p,$reg["grupo"],$reg["código"]); exit(); } } session_destroy(); echo "<font color=red size=3>"; echo "Nombre de usuario y/o contraseña incorrectos.<br>"; echo "Escriba <b>VISITANTE</b> en nombre de usuario"; echo " y deje en blanco la contraseña"; echo "</font>"; alert("Si no tiene un nombre de usuario,<br> use Visitante<br>y deje en blanco la contraseña"); } ?> <center> <font face=arial size=4 color=navy> SuperBuscador Inteligente -- Segundo Arévalo Calderón -- Abril 2004<br> Universidad Tecnológica Equinoccial<br> </font> <OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0" ID=Untitled WIDTH=500 HEIGHT=300> <PARAM NAME=movie VALUE="inicio.swf"> <PARAM NAME=wmode VALUE=window> <PARAM NAME=scale VALUE=Default> <PARAM NAME=salign VALUE=CC> <PARAM NAME=play VALUE=true> <PARAM NAME=devicefont VALUE=true> <PARAM NAME=loop VALUE=true> <PARAM NAME=menu VALUE=true> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#c2dae0>> <EMBED width=500 height=300 src="inicio.swf" wmode=window scale=Default salign=CC play=true devicefont=true loop=true menu=true quality=high bgcolor=#c2dae2 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"> </EMBED> </OBJECT> <form method=post> <table> <tr><td align=right>Usuario<td><input name=campo_nombre_usuario> <tr><td align=right>Contraseña<td><input type=password name=campo_clave_usuario> <tr><td align=right>&nbsp<td><input type=submit value=Ingresar> </table> </form> </center> <?php fin(); ?>

Este es el resultado de correr la página principal index.php abriendo con el

navegador de internet la dirección http://servidor/buscador

Segundo Arévalo Calderón [email protected]

Page 8: Busador

MANUAL DE PROGRAMADOR 8

Ver el manual del administrador para conocer el uso del sistema.

Para ingresar como administrador escriba en nombre de usuario ADMINISTRADOR

y contraseña ADM.

Una vez escrita la clave, aparecerá la pantalla principal del buscador:

Segundo Arévalo Calderón [email protected]

Page 9: Busador

MANUAL DE PROGRAMADOR 9

4.2. EL DIRECTORIO K

Dentro del directorio k están los programas fuente .C y ejecutables .EXE de la

librería sprlib (y annlib) que permite realizar el procesamiento de redes neuronales y

reconocimiento de patrones. Esta carpeta es importante para las pruebas y la

evaluación de las técnicas de análisis y filtrado. En la versión definitiva, no se

necesita esta carpeta sino tan solo los programas .exe renombrados a .cgi. Ver

archivos .CGI

4.3. DIRECTORIO DE CGIs

Los CGIs son aplicaciones escritas en lenguaje C que realizan procesamiento

intensivo en este caso el reconocimiento de patrones, redes neuronales y clasificación

de redes usando varios algoritmos. Para instalar los cgis se deberán copiar todos los

archivos .EXE de la carpeta K hasta la carpeta cgi-bin dentro del servidor web y

renombrarlos con la extensión cgi con el comando ren *.exe *.cgi.

Los cgis se han probado solamente bajo Windows, y dada su escasa utilidad, no se

han compilado para Linux, pero hacerlo no representa mayor problema, porque las

librerías originales fueron hechas para unix y linux. Ver la documentación en el CD

de instalación de la aplicaicón.

5. PROCESOS IMPORTANTES

5.1. CREACIÓN DE LA BASE DE DATOS, TABLAS Y REGISTROS

Esto se hace con el script crearbuscador.php. para ello se escribe http://nombre del

servidor/buscador/crearbuscador.php, debe de ser reemplazado por el nombre del

servidor y el nombre buscador debe ser reemplazado por el directorio donde está

Segundo Arévalo Calderón [email protected]

Page 10: Busador

MANUAL DE PROGRAMADOR 10

instalado el servidor, o se omite /buscador cuando está directamente bajo el

directorio principal, por ejemplo vajo var/www/html en servidores linux o bajo

c:\archivos de programa\easyphp\www bajo servidores Windows con EasyPHP.

5.2. DISEÑO DE LA BASE DE DATOS

La base de datos se crea con el módulo crearbuscador.php que contiene:

5.2.1. CREAR BUSCADOR.PHP

<?php //Para cambiar los parámetros de configuración revisar ayudas_config.php include ("ayudas_config.php"); //Esta información viene desde ayudas_config.php //Todos los demás programas (páginas) leen ayudas_config.php $bdd=DBNAME; $host=DBHOST; $user=DBUSER; $password=DBPASS; $bgcolor=BGCOLOR; echo "<body bgcolor=$bgcolor>"; echo "<b>Proceso para crear Bdd <b>$bdd</b> y Tablas</b><br><br>"; $l=mysql_connect($host,$user,$password); mysql_query("drop database if exists $bdd;"); echo "Bdd <b>$bdd</b> borrada.<br>"; mysql_query("create database $bdd;"); mysql_query("use $bdd;"); echo "Bdd <b>$bdd</b> creada.<br>"; mysql_query("CREATE TABLE motores ( código int(3) unsigned NOT NULL auto_increment, nombre char(32) NOT NULL, url_y_comando_de_búsqueda char(100), modificador_límite_de_resultados char(32), modificador_para_idioma_español char(32), separador_de_palabras char(4), marca_inicio_resultado char(32), orden_de_resultado char(3), marca_antes_de_url char(32), marca_después_de_url char(32), marca_antes_de_título char(32), marca_después_de_título char(32), marca_antes_de_resumen char(32), marca_después_de_resumen char(32), solo_ecuador char(1), solo_quito char(1), idioma char(2), PRIMARY KEY (código), UNIQUE KEY (nombre) ) TYPE=MyISAM;"); mysql_query("insert into motores (nombre) values ('Google');"); mysql_query("update motores set url_y_comando_de_búsqueda='http://www.google.com/search?q=' where nombre = 'Google' ;"); mysql_query("update motores set modificador_límite_de_resultados='&num=' where nombre = 'Google'; "); mysql_query("update motores set marca_inicio_resultado='<p class=g>' where nombre = 'Google' ;"); mysql_query("update motores set orden_de_resultado='UTR' where nombre = 'Google' ;"); mysql_query("update motores set marca_antes_de_url='href=' where nombre = 'Google' ;"); mysql_query("update motores set marca_después_de_url='>' where nombre = 'Google' ;"); mysql_query("update motores set marca_antes_de_título='' where nombre = 'Google' ;"); mysql_query("update motores set marca_después_de_título='</' where nombre = 'Google' ;"); mysql_query("update motores set marca_antes_de_resumen='<br>' where nombre = 'Google' ;");

Segundo Arévalo Calderón [email protected]

Page 11: Busador

MANUAL DE PROGRAMADOR 11

mysql_query("update motores set marca_después_de_resumen='<br>' where nombre = 'Google' ;"); mysql_query("update motores set separador_de_palabras='+' where nombre = 'Google' ;"); mysql_query("insert into motores (nombre) values ('Yahoo');"); mysql_query("update motores set url_y_comando_de_búsqueda='http://search.yahoo.com/search?p=&ei=UTF-8&fr=fp-tab-web-t&cop=mss&tab=' where nombre = 'Yahoo' ;"); mysql_query("update motores set modificador_límite_de_resultados='&num=' where nombre = 'Yahoo' ;"); mysql_query("update motores set marca_inicio_resultado='<LI><A' where nombre = 'Yahoo' ;"); mysql_query("update motores set orden_de_resultado='UTR' where nombre = 'Yahoo' ;"); mysql_query("update motores set marca_antes_de_url=\"return m('\" where nombre = 'Yahoo' ;"); mysql_query("update motores set marca_después_de_url=\"')\" where nombre = 'Yahoo' ;"); mysql_query("update motores set marca_antes_de_título='>' where nombre = 'Yahoo' ;"); mysql_query("update motores set marca_después_de_título='</A>' where nombre = 'Yahoo' ;"); mysql_query("update motores set marca_antes_de_resumen='<BR>' where nombre = 'Yahoo' ;"); mysql_query("update motores set marca_después_de_resumen='<BR>' where nombre = 'Yahoo' ;"); mysql_query("update motores set separador_de_palabras='+' where nombre = 'Yahoo';"); mysql_query("insert into motores (nombre) values ('Altavista');"); mysql_query("update motores set url_y_comando_de_búsqueda='http://search.Altavista.com/search?p=&ei=UTF-8&fr=fp-tab-web-t&cop=mss&tab=' where nombre = 'Altavista';"); mysql_query("update motores set modificador_límite_de_resultados='&num=' where nombre = 'Altavista' ;"); mysql_query("update motores set marca_inicio_resultado='<TD class=s><A ' where nombre = 'Altavista' ;"); mysql_query("update motores set orden_de_resultado='UTR' where nombre = 'Altavista';"); mysql_query("update motores set marca_antes_de_url=\"status='\" where nombre = 'Altavista';"); mysql_query("update motores set marca_después_de_url=\"';\" where nombre = 'Altavista' ;"); mysql_query("update motores set marca_antes_de_título='\">' where nombre = 'Altavista' ;"); mysql_query("update motores set marca_después_de_título='</A>' where nombre = 'Altavista' ;"); mysql_query("update motores set marca_antes_de_resumen='class=s>' where nombre = 'Altavista' ;"); mysql_query("update motores set marca_después_de_resumen='<BR>' where nombre = 'Altavista' ;"); mysql_query("update motores set separador_de_palabras='+' where nombre = 'Altavista' ;"); echo "Tabla motores creada.<br>"; mysql_query("CREATE TABLE categorías ( código int(10) unsigned NOT NULL auto_increment, nombre char(100) NOT NULL, _tab_usuarios int(10) NOT NULL, PRIMARY KEY (código), UNIQUE KEY (nombre) ) TYPE=MyISAM;"); mysql_query("insert into categorías values (NULL,'- Todo -',1);"); mysql_query("insert into categorías values (NULL,'Hardware',1);"); mysql_query("insert into categorías values (NULL,'Software',1);"); mysql_query("insert into categorías values (NULL,'Autos' ,1);"); mysql_query("insert into categorías values (NULL,'Ofertas' ,1);"); mysql_query("insert into categorías values (NULL,'Compras' ,1);"); mysql_query("insert into categorías values (NULL,'Programación orientada a objetos' ,2);"); mysql_query("insert into categorías values (NULL,'Inteligencia Artificial' ,2);"); mysql_query("insert into categorías values (NULL,'Deportes' ,3);"); echo "Tabla categorías creada.<br>"; mysql_query("CREATE TABLE parámetros ( nombre varchar(80) default '', descripción varchar(80) ) TYPE=MyISAM;"); mysql_query("INSERT INTO parámetros VALUES ('UNIVERSIDAD TECNOLÓGICA EQUINOCCIAL','SuperBuscador Inteligente');"); echo "Tabla parámetros creada.<br>"; mysql_query("CREATE TABLE usuarios ( código int(3) NOT NULL auto_increment, nombre varchar(30) NOT NULL default '', clave varchar(30) default '', grupo enum('administradores','visitantes','operadores') default 'visitantes', PRIMARY KEY (código), UNIQUE KEY (nombre) ) TYPE=MyISAM;"); mysql_query("Insert into usuarios values (NULL,'ADMINISTRADOR','ADM','administradores');"); mysql_query("Insert into usuarios values (NULL,'VISITANTE','','visitantes');"); mysql_query("Insert into usuarios values (NULL,'SEGUNDO ARÉVALO','SA','administradores');"); mysql_query("Insert into usuarios values (NULL,'V2','V2','visitantes');"); mysql_query("Insert into usuarios values (NULL,'V3','V3','visitantes');"); mysql_query("Insert into usuarios values (NULL,'OP','OP','operadores');"); echo "Tabla usuarios creada.<br>"; mysql_query("CREATE TABLE lugares ( código int(10) unsigned NOT NULL auto_increment, nombre char(100) NOT NULL, PRIMARY KEY (código), UNIQUE KEY (nombre)

Segundo Arévalo Calderón [email protected]

Page 12: Busador

MANUAL DE PROGRAMADOR 12

) TYPE=MyISAM;"); mysql_query("insert into lugares values (NULL,'- Todo el mundo -');"); mysql_query("insert into lugares values (NULL,'Ecuador');"); mysql_query("insert into lugares values (NULL,'Quito');"); mysql_query("insert into lugares values (NULL,'Guayaquil');"); mysql_query("insert into lugares values (NULL,'Cuenca');"); mysql_query("insert into lugares values (NULL,'Pichincha');"); mysql_query("insert into lugares values (NULL,'Guayas');"); echo "Tabla lugares creada.<br>"; mysql_query("CREATE TABLE búsquedas ( código int(10) unsigned NOT NULL auto_increment, nombre char(32), _tab_usuarios int(10) NOT NULL, texto_a_buscar varchar(100), _tab_preferencias int(10), _tab_categorías int(5), _tab_lugares int(5), solo_en_espanol int(1), frase_exacta int(1), buscar_solamente int(1), fecha date, PRIMARY KEY (código) ) TYPE=MyISAM;"); echo "Tabla búsquedas creada.<br>"; mysql_query("CREATE TABLE resultados ( código int(10) unsigned NOT NULL auto_increment, _tab_usuarios int(10) NOT NULL, _tab_búsquedas int(10) NOT NULL, motor char(32), título varchar(100), url varchar(100), resumen varchar(255), PRIMARY KEY (código) ) TYPE=MyISAM;"); echo "Tabla resultados creada.<br>"; mysql_query("CREATE TABLE elementos ( código int(3) NOT NULL auto_increment, nombre varchar(30) NOT NULL default '', PRIMARY KEY (código), UNIQUE KEY (nombre) ) TYPE=MyISAM;"); mysql_query("insert into elementos values (1,'Artículo');"); mysql_query("insert into elementos values (2,'Pronombre');"); mysql_query("insert into elementos values (3,'Sustantivo');"); mysql_query("insert into elementos values (4,'Verbo');"); mysql_query("insert into elementos values (5,'Adverbio');"); mysql_query("insert into elementos values (6,'Preposición');"); mysql_query("insert into elementos values (7,'Conjunción');"); mysql_query("insert into elementos values (8,'INFORMÁTICA');"); echo "Tabla elementos del lenguaje creada.<br>"; mysql_query("CREATE TABLE diccionario ( código int(10) NOT NULL auto_increment, nombre varchar(30) NOT NULL default '', _tab_elementos int(3), PRIMARY KEY (código), UNIQUE KEY (nombre) ) TYPE=MyISAM;"); mysql_query("insert into diccionario values (NULL,'BUSCAR',4);"); mysql_query("insert into diccionario values (NULL,'CORRER',4);"); mysql_query("insert into diccionario values (NULL,'JUGAR',4);"); mysql_query("insert into diccionario values (NULL,'COMER',4);"); mysql_query("insert into diccionario values (NULL,'DORMIR',4);"); mysql_query("insert into diccionario values (NULL,'ENCONTRAR',4);"); mysql_query("insert into diccionario values (NULL,'UN',1);"); mysql_query("insert into diccionario values (NULL,'UNO',1);"); mysql_query("insert into diccionario values (NULL,'UNA',1);"); mysql_query("insert into diccionario values (NULL,'EL',1);"); mysql_query("insert into diccionario values (NULL,'LA',1);"); mysql_query("insert into diccionario values (NULL,'LOS',1);"); mysql_query("insert into diccionario values (NULL,'LAS',1);");

Segundo Arévalo Calderón [email protected]

Page 13: Busador

MANUAL DE PROGRAMADOR 13

mysql_query("insert into diccionario values (NULL,'Y',7);"); mysql_query("insert into diccionario values (NULL,'O',7);"); mysql_query("insert into diccionario values (NULL,'AYER',5);"); mysql_query("insert into diccionario values (NULL,'AHORA',5);"); mysql_query("CREATE TABLE preferencias ( código int(10) unsigned NOT NULL auto_increment, nombre char(100) NOT NULL, términos_separados_por_comas_ char(255), _tab_usuarios int(10) NOT NULL, nivel int(2), PRIMARY KEY (código), UNIQUE KEY (nombre) ) TYPE=MyISAM;"); mysql_query("insert into preferencias values (NULL,'- Ninguna -','',1,1);"); mysql_query("insert into preferencias values (NULL,'Deportes Masivos','Futbol,Basquet',1,1);"); mysql_query("insert into preferencias values (NULL,'Informática','IA,Programación,Software,Hardware',1,1);"); mysql_query("insert into preferencias values (NULL,'Inteligencia Artificial','Sistema Experto,Sistemas Expertos,Reconocimiento de Patrones, Red Neuronal',1,2);"); mysql_query("insert into preferencias values (NULL,'Sistemas Expertos','Reglas',1,3);"); mysql_query("insert into preferencias values (NULL,'Reconocimiento de Patrones','KNN',1,3);"); mysql_query("insert into preferencias values (NULL,'Software','Lenguaje C,ADA',1,2);"); mysql_query("insert into preferencias values (NULL,'Lenguaje C','Informática,Software',1,3);"); mysql_query("CREATE TABLE términos ( código int(3) NOT NULL auto_increment, nombre varchar(30) NOT NULL default '', PRIMARY KEY (código), UNIQUE KEY (nombre) ) TYPE=MyISAM;"); echo "Tabla diccionarios creada.<br>"; echo "Tablas creadas.<br>"; echo "<br>Fin del proceso para crear Base de Datos y Tablas<br><br>"; echo '<input type=button value="Refrescar Pantalla" onclick="window.open(\'hist.php\',\'hist\',\'\');history.go(-1);">'; ?>

5.3. ANIMACIONES FLASH

Esta es la animación inicio.swf

Segundo Arévalo Calderón [email protected]

Page 14: Busador

MANUAL DE PROGRAMADOR 14

Esta es la animación logosbi.swf

6. CÓDIGO FUENTE

Contenido de todos los archivos .PHP.

6.1. ADMINISTRAR.PHP

<?php include("ayudas.php"); inicio(); estilos(); echo "<center>"; echo "<br><br>"; echo "<a href=crearbuscador.php>Clic aquí para Borrar BDD y Tablas, Crear BDD y Tablas</a><br>"; echo "<br><br>"; echo "<h3>Elija la tabla que desea ver/modificar:</h3>"; echo "<br>"; echo "<a href=admin_tabla.php?t=parámetros>Parámetros</a><br>"; echo "<a href=admin_tabla.php?t=categorías>Categorías</a><br>"; echo "<a href=admin_tabla.php?t=lugares>Lugares</a><br>"; echo "<a href=admin_tabla.php?t=motores>Motores</a><br>"; echo "<a href=admin_tabla.php?t=usuarios>Usuarios</a><br>"; echo "<br>"; echo "<a href=admin_tabla.php?t=preferencias>Preferencias</a><br>"; echo "<br>"; echo "<a href=admin_tabla.php?t=elementos>Elementos de Lenguaje</a><br>"; echo "<a href=admin_tabla.php?t=diccionario>Diccionario</a><br>"; echo "<br>"; echo "<a href=admin_tabla.php?t=búsquedas>Búsquedas</a><br>"; echo "<a href=admin_tabla.php?t=resultados>Resultados</a><br>"; echo "</center>"; fin(); ?>

6.2. ADMIN_TABLA.PHP

<?php // admin_tabla.php versión 2004.4.11 - Abril 2004 // Administra dinámicamente los registros de una tabla bdd // $t es el nombre de la tabla // $w es la cláusula where para filtrar registros en tabla administrada // Esta versión no necesita que las tablas tengan clave primaria // Si no hay clave primaria, se usa el primer campo para identificar registros // Las tablas relacionadas necesitan tener un campo llamado 'nombre' define ("MAXLONGHORIZ",35); // Máxima longitud campo registro formato horizontal define ("MAXLONGVERTI",80); // Máxima longitud campo registro formato vertical define ("MINLONGCAMPO",80); // Mínima longitud de campo para relleno include ("ayudas.php"); global $t;

Segundo Arévalo Calderón [email protected]

Page 15: Busador

MANUAL DE PROGRAMADOR 15

if (empty($t)) { echo 'No ha indicado tabla o versión incorrecta de ayudas.php'; exit(); } $t=urldecode($t); if(!empty($wt))$wt=urldecode($wt); if(!empty($wv))$wv=urldecode($wv); inicio (); estilos(); db_open(); if (isset($botonlistar )) forma_listar_registro($t); if (isset($botoncambiar)) forma_modificar_registro($t); if (isset($botonagregar)) forma_agregar_registro($t); if (isset($botonborrar )) query_borrar_registro($t); if (isset($botonupdate )) query_update_registro($t); if (isset($botoninsert )) query_insert_registro($t); forma_admin_tabla($t); fin(); // Borra un registro dado un código del formulario function query_borrar_registro ($tab){ global $campocodigo; if (!empty($campocodigo)) db_borrar_registro($tab,$campocodigo); } //Construye el query update con los valores del formulario function query_update_registro($tab){ global $campocodigo; // En el formulario modificar if (empty($campocodigo)) return; $rs=db_query("select * from $tab limit 1"); $nc=db_num_fields($rs); $q="update $tab set "; for ($c=0;$c<$nc;$c++) { $nom=db_nombre_campo($tab,$c); $con=$GLOBALS[$nom]; $q=$q."$nom='$con'"; if ($c<($nc-1)) $q=$q.', '; } $nombrecodigo=db_nombre_campo($tab,db_num_campo_primary_key($tab)); $q=$q." where $nombrecodigo='$campocodigo';"; $r=db_query ($q); if($r!=1) { echo 'Error al grabar cambios en $tab '; db_error(); } } //Construye el query insert con los valores del formulario function query_insert_registro($tab){ $rs=db_query("select * from $tab limit 1"); $nc=db_num_fields($rs); $q="insert into $tab values ("; for ($c=0;$c<$nc;$c++) { $nom=db_nombre_campo($tab,$c); $con=$GLOBALS[$nom]; if(db_campo_auto_increment($tab,$c)) $q=$q.'NULL'; else $q=$q."'$con'"; if ($c<($nc-1)) $q=$q.', '; } $q=$q.");"; $r=db_query ($q); if($r!=1) { echo 'Error al insertar registro en $tab '; db_error(); } } //Formulario para administrar una tabla function forma_admin_tabla($tabla) { //Construye la cláusula where y muestra filtro al inicio de la tabla //Aumentado Abril 9 para filtrar categorías por usuario global $wt,$wv; if(empty($wt) || empty($wv))$p=$w=""; else { $w=" where $wt=$wv"; $nom=$wt; $i=substr($wt,0,5); $lnk=($i=='_tab_'||$i=='_all_'||$i=='_fld_'||$i=='_lnk_'); if ($lnk){ $n=substr($nom,5,60); $ntab=$n; $e=''; if(strstr($n,'_')) list($ntab,$e)=explode("_",$n,2); $etiq=ucfirst(singular($ntab)); $wv=nombre($ntab,$wv); }

Segundo Arévalo Calderón [email protected]

Page 16: Busador

MANUAL DE PROGRAMADOR 16

else $etiq=ucfirst(singular($nom)); $p="<br>para $etiq=$wv"; } $rs=db_query("select * from $tabla$w;"); if($rs==null) { nohaytabla($tabla); return; } $nc=db_num_fields($rs); $nr=db_num_rows($rs); $nk=db_num_campo_primary_key($tabla); echo "<center><h4>Contenido de Tabla $tabla$p</h4>"; echo '<form name=forma_admin_tabla method=post>'; if($nr>0) echo "<select name='campocodigo' size='12' class='y'>"; for ($i=0; $i<$nr; $i++) { $reg=db_fetch_array($rs); $t=''; for($c=0;$c<$nc;$c++){ $con=contenido_campo($tabla,$c,$reg[$c]); $lon=db_longitud_campo($tabla,$c); if($lon>MAXLONGHORIZ) $lon=MAXLONGHORIZ; if(strlen($con)>MAXLONGHORIZ) { $con=substr($con,0,MAXLONGHORIZ); } if($lon<=MINLONGCAMPO&&strlen($con)<$lon) $con=str_pad($con,$lon," "); $con=str_replace(" ","&nbsp;",$con); $t=$t.$con; if ($c<($nc-1)) $t=$t.' | '; } echo '<option value='.$reg[$nk].($i==0?' selected>':'>').$t.' '; } if($nr>0) { echo '</select><br><br>'; boton_listar(); boton_cambiar(); boton_borrar(); } boton_agregar(); echo '<br>'; boton_regresar(); echo '</form></center>'; } //Visualiza el registro con código campocodigo function forma_listar_registro($tab){ global $campocodigo; if (empty($campocodigo)) return; echo "<center><h4>Visualizando registro en $tab</h4>"; echo '<form method=post name=forma_admin_tabla>'; $nombrecodigo=db_nombre_campo($tab,db_num_campo_primary_key($tab)); $rs=db_query("select * from $tab where $nombrecodigo='$campocodigo'"); $nc=db_num_fields($rs); $reg=db_fetch_row($rs); echo '<table border=0 cellpadding=0 cellspacing=0>'; for ($c=0;$c<$nc;$c++) { $con=detalles_y_contenido_campo($tab,$c,$nom,$etiq,$lon,$lnk,$reg[$c]); if($nom==$nombrecodigo) continue; mostrar_campo_para_ver ($tab,$c,$nom,$etiq,$lon,$lnk,$con); } echo '</table><br><br>'; echo "<input type=hidden name='campocodigo' value='$campocodigo'>"; boton_cambiar(); boton_cancelar(); echo '</form></center>'; exit; } //Modifica el registro con código campocodigo function forma_modificar_registro($tab){ global $campocodigo; if (empty($campocodigo)) return; echo "<center><h4>Modificando registro en $tab</h4>"; echo '<form method=post name=forma_admin_tabla>'; $nombrecodigo=db_nombre_campo($tab,db_num_campo_primary_key($tab)); $rs=db_query("select * from $tab where $nombrecodigo='$campocodigo'");

Segundo Arévalo Calderón [email protected]

Page 17: Busador

MANUAL DE PROGRAMADOR 17

$nc=db_num_fields($rs); $reg=db_fetch_row($rs); echo '<table border=0 cellpadding=0 cellspacing=0>'; for ($c=0;$c<$nc;$c++) { $con=detalles_y_contenido_campo($tab,$c,$nom,$etiq,$lon,$lnk,$reg[$c]); mostrar_campo_para_modificar ($tab,$c,$nom,$etiq,$lon,$lnk,$reg[$c]); } echo '</table><br><br>'; echo "<input type=hidden name='campocodigo' value='$campocodigo'>"; boton_update(); boton_cancelar(); echo '</form></center>'; exit; } //Muestra un formulario para agregar registros a una tabla function forma_agregar_registro($tab){ echo "<center><h4>Agregando registro en $tab</h4>"; echo "<form method=post name=forma_admin_tabla>"; $rs = db_query("select * from $tab limit 1"); $nc = db_num_fields($rs); echo '<table border=0 cellpadding=0 cellspacing=0>'; for ($c=0; $c<$nc; $c++) { detalles_campo ($tab,$c,$nom,$etiq,$lon,$lnk); mostrar_campo_para_agregar ($tab,$c,$nom,$etiq,$lon,$lnk); } echo '</table><br><br>'; boton_insert(); boton_cancelar(); echo '</form></center>'; exit; } //Convierte de plural a singular function singular($t) { $r = $t; if (substr ($t,strlen($t)-4,4) == 'ones'){ // Coloca tildes return substr($t,0,strlen($t)-4).'ón'; } $f=substr ($t,strlen($t)-3,3); // funciones debe eliminar y dejar funcion if ($f != "ores" && // Indicadores $f != "les" && $f != "mes" && $f != "tes" && substr ($t,strlen($t)-2,2) == "es") $r = substr ($t,0,strlen($t)-2); else if (substr ($t,strlen($t)-1,1) == "s") $r = substr ($t,0,strlen($t)-1); $r=str_replace("_"," ",$r); return $r; } function boton_cambiar(){ echo "<input type=submit class=x name='botoncambiar' value='Cambiar'>"; echo "&nbsp;&nbsp;&nbsp;&nbsp;"; } function boton_listar(){ echo "<input type=submit class=x name='botonlistar' value='Ver'>"; echo "&nbsp;&nbsp;&nbsp;&nbsp;"; } function boton_borrar(){ echo "<input type=submit class=x name='botonborrar' value='Borrar'>"; echo "&nbsp;&nbsp;&nbsp;&nbsp;"; } function boton_agregar(){ echo "<input type=submit class=x name='botonagregar' value='Agregar'><br>"; } function boton_insert(){ echo "<input type=submit class=x name='botoninsert' value='Grabar'>"; echo "&nbsp;&nbsp;&nbsp;&nbsp;"; } function boton_update(){ echo "<input type=submit class=x name='botonupdate' value='Grabar'>";

Segundo Arévalo Calderón [email protected]

Page 18: Busador

MANUAL DE PROGRAMADOR 18

echo "&nbsp;&nbsp;&nbsp;&nbsp;"; } function boton_cancelar(){ echo "<input type=submit class=x name='botonvolver' value='Cancelar'>"; } //Solamente permite ver el contenido del campo. function mostrar_campo_para_ver($tab,$c,$nom,$etiq,$lon,$lnk,$con){ echo "<tr><td width='30%' align=right>$etiq : <td width=30>&nbsp;"; echo "<td width='68%'><input size='$lon' name='$nom' value='$con' readonly>"; } //Devuelve nombre, longitud y contenido del campo function detalles_y_contenido_campo($tab,$c,&$nom,&$etiq,&$lon,&$lnk,$v) { detalles_campo($tab,$c,$nom,$etiq,$lon,$lnk); if ($lnk){ $n=substr($nom,5,60); $ntab=$n; $e=''; if(strstr($n,'_')) list($ntab,$e)=explode("_",$n,2); return nombre($ntab,$v); } return contenido_campo($tab,$c,$v); } //Devuelve nombre y longitud del campo function detalles_campo($tab,$c,&$nom,&$etiq,&$lon,&$lnk) { $nom=db_nombre_campo($tab,$c); $i=substr($nom,0,5); $lnk=($i=='_tab_'||$i=='_all_'||$i=='_fld_'||$i=='_lnk_'); if ($lnk){ $n=substr($nom,5,60); $ntab=$n; $e=''; if(strstr($n,'_')) list($ntab,$e)=explode("_",$n,2); $tab=$ntab; $c=db_num_campo($tab,'nombre'); $etiq=ucfirst(singular($ntab)).' '.$e; } else $etiq=ucfirst(singular($nom)); $lon=db_longitud_campo($tab,$c); if($lon>MAXLONGVERTI)$lon=MAXLONGVERTI; } //Devuelve contenido del campo function contenido_campo($tab,$c,$v) { $nom=db_nombre_campo($tab,$c); $con=htmlentities($v); return $con; } //Para facilitar la construcción de opciones y seleccionar opcion activa function mostrar_opcion($c,$n,$a=''){ $s=($c==$a)?" selected":""; return "<option value='$c'$s>$n"; } //Pide el contenido de un campo para agregar un nuevo registro function mostrar_campo_para_agregar($tab,$c,$nom,$etiq,$lon,$lnk){ global $wt, $wv; $ro=""; if (db_campo_auto_increment($tab,$c)) $ro=' readonly'; $nombrecodigo=db_nombre_campo($tab,db_num_campo_primary_key($tab)); if($nom!=$nombrecodigo) echo "<tr><td width='30%' align=right>$etiq : <td width=30>&nbsp;"; if (isset($wt) && $wt==$nom) { $str="<input size='$lon' name='$nom' value='$wv' readonly>"; if($nom==$nombrecodigo) $str="<input type=hidden name='$nom' value='$wv'>"; else if($lnk){ $n=substr($nom,5,60); $ntab=$n; $e=''; if(strstr($n,'_')) list($ntab,$e)=explode("_",$n,2); $str="<select name='$nom' readonly>"; $nombrecodigo=db_nombre_campo($ntab,db_num_campo_primary_key($ntab));

Segundo Arévalo Calderón [email protected]

Page 19: Busador

MANUAL DE PROGRAMADOR 19

$rs=db_query_no_check ("select $nombrecodigo,nombre from $ntab where código=$wv"); $nr=db_num_rows($rs); $reg=db_fetch_row($rs); $str.=mostrar_opcion($wv,$reg[1],$wv); $str.="</select>"; } } else { $str="<input size='$lon' name='$nom'$ro>"; if($nom==$nombrecodigo) $str="<input type=hidden name='$nom' value='$wv'>"; else if($lnk){ $n=substr($nom,5,60); $ntab=$n; $e=''; if(strstr($n,'_')) list($ntab,$e)=explode("_",$n,2); $str="<select name='$nom'$ro>"; $nombrecodigo=db_nombre_campo($ntab,db_num_campo_primary_key($ntab)); $rs=db_query_no_check ("select $nombrecodigo,nombre from $ntab"); $nr=db_num_rows($rs); $str.=mostrar_opcion("",""); for($i=0;$i<$nr;$i++) { $reg=db_fetch_row($rs); $str.=mostrar_opcion($reg[0],$reg[1]); } $str.="</select>"; } } echo "<td width='68%'>$str"; } //Permite modificar el contenido de un campo function mostrar_campo_para_modificar($tab,$c,$nom,$etiq,$lon,$lnk,$con){ global $wt, $wv; $ro=(db_campo_auto_increment($tab,$c)||db_campo_primary_key($tab,$c)) ?' readonly':''; $nombrecodigo=db_nombre_campo($tab,db_num_campo_primary_key($tab)); if($nom!=$nombrecodigo) echo "<tr><td width='30%' align=right>$etiq : <td width=30>&nbsp;"; if (isset($wt) && $wt==$nom) { $str="<input size='$lon' name='$nom' value='$con' readonly>"; if($nom==$nombrecodigo) $str="<input type=hidden name='$nom' value='$wv'>"; else if($lnk){ $n=substr($nom,5,60); $ntab=$n; $e=''; if(strstr($n,'_')) list($ntab,$e)=explode("_",$n,2); $str="<select name='$nom' readonly>"; $nombrecodigo=db_nombre_campo($ntab,db_num_campo_primary_key($ntab)); $rs=db_query_no_check ("select $nombrecodigo,nombre from $ntab where código=$wv"); $nr=db_num_rows($rs); $reg=db_fetch_row($rs); $str.=mostrar_opcion($wv,$reg[1],$con); $str.="</select>"; } } else { $str="<input size='$lon' name='$nom' value='$con'$ro>"; if($nom==$nombrecodigo) $str="<input type=hidden name='$nom' value='$wv'>"; else if($lnk){ $n=substr($nom,5,60); $ntab=$n; $e=''; if(strstr($n,'_')) list($ntab,$e)=explode("_",$n,2); $str="<select name='$nom'$ro>"; $nombrecodigo=db_nombre_campo($ntab,db_num_campo_primary_key($ntab)); $rs=db_query_no_check ("select $nombrecodigo,nombre from $ntab"); $nr=db_num_rows($rs); $str.=mostrar_opcion("","",$con); for($i=0;$i<$nr;$i++) { $reg=db_fetch_row($rs); $str.=mostrar_opcion($reg[0],$reg[1],$con);

Segundo Arévalo Calderón [email protected]

Page 20: Busador

MANUAL DE PROGRAMADOR 20

} $str.="</select>"; } } echo "<td width='68%'>$str"; } ?>

6.3. AYUDAS.PHP

<?php // include("ayudas_config.php"); if(empty($ingreso)) { session_start(); //Verifica que haya ingresado con nombre de usuario y contraseña if (empty($_SESSION["nombre_usuario"])) { inicio(); estilos(); exit(); } } // Sirve para evitar el uso de register_globals = on // Y para facilitar el uso de argumentos y variables de sesión register_globals($_GET); register_globals($_POST); register_globals($_ENV); if(empty($ingreso)) register_globals($_SESSION); function register_globals(&$a) { foreach($a as $n => $v){$GLOBALS[$n]=$v;} } //Construye el encabezado function inicio ($archivo='',$bgcolor=BGCOLOR) { echo '<!doctype html public "-//w3c//dtd html 4.0 transitional//es">'."\n" ."<html>\n" ."<head>\n" ."<title>".TITULO."</title>\n" .'<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">'."\n" .'<meta http-equiv="Content-Script-Type" content="text/javascript">'."\n" .'<meta http-equiv="cache-control" content="no-cache">'."\n" .'<meta http-equiv="pragma" content="no-cache">'."\n" ."</head>\n<body bgcolor=$bgcolor>"; } //Funcion para terminar la página function fin(){ echo "\n</body>\n</html>\n"; exit; } // Dibuja el botón cerrar function boton_cerrar() { echo '<input type=button value="Cerrar" onclick="window.close();">'; } // Dibuja el botón regresar function boton_regresar() { echo '<input type=button value="Pantalla Anterior" onclick="history.go(-1);">'; } // Abre la base de datos function db_open ($db=DBNAME) { $l=mysql_connect(DBHOST, DBUSER, DBPASS); if (!$l) { print "<br><b>Activar MySQL y revisar usuario/contraseña.<br>"; print " MySQL no está corriendo o error en nombre de usuario y contraseña.<br>"; echo 'Revise el archivo ayudas.php y modifique usuario y password<br>'; db_error(); return; } if($db=='') { echo 'Revise el archivo ayudas.php y modifique el nombre de la base de datos<br>'; db_list_databases(); return; } $r = mysql_select_db($db, $l); if (!$r) { echo "<br><b>No fue posible conectar con base de datos $db<br>"; echo "Revisar el nombre de la bdd y si tiene los permisos de acceso.</b><br>";

Segundo Arévalo Calderón [email protected]

Page 21: Busador

MANUAL DE PROGRAMADOR 21

db_error(); db_list_databases(); } } // Lista las bases de datos function db_list_databases(){ $rs=db_list_dbs(); $nr=db_num_rows($rs); echo "Existen $nr bases de datos<br>"; for ($i=0;$i<$nr;$i++) { $reg=db_fetch_row($rs); echo $reg[0].'<br>'; } } // Lista las tablas de la base de datos seleccionada function db_list_tables() { $rs=db_query("show tables"); if ($rs==null) {echo 'error '; return; } $nr=db_num_rows($rs); echo "Existen $nr tablas<br>"; for ($i=0;$i<$nr;$i++) { $reg=db_fetch_row($rs); echo 'Tabla <b>'.$reg[0].'</b><br>'; db_list_fields($reg[0]); } } // Lista los campos de una tabla function db_list_fields($tabla) { $rs=db_query("show fields from $tabla"); if ($rs==null) {echo 'error '; return; } $nr=db_num_rows($rs); echo "$tabla tiene $nr campos<br>"; for ($i=0;$i<$nr;$i++) { $reg=db_fetch_row($rs); echo db_nombre_campo ($tabla,$i).' '; echo db_longitud_campo($tabla,$i).' '; echo $reg[1].' '.$reg[2].' '.$reg[3].' '.'<br>'; } } // Lista los registros de una tabla en formato horizontal function db_list($tabla,$extras='') { global $desdecampo; if (empty($desdecampo)) $desdecampo=0; $rs=db_query("show fields from $tabla"); if ($rs==null) {echo 'error '; return; } $nc=db_num_rows($rs); echo "<center><table border=1 cellpadding=0 cellspacing=0>"; echo "<tr>"; for ($i=$desdecampo;$i<$nc;$i++) { $reg=db_fetch_row($rs); echo '<th>'; echo strtoupper(etiqueta(db_nombre_campo ($tabla,$i))); echo '</th>'; } echo '</tr>'; $rs=db_query("select * from $tabla $extras"); $nr=db_num_rows($rs); echo "<tr>"; for ($n=0;$n<$nr;$n++) { $reg=db_fetch_row($rs); for ($i=$desdecampo;$i<$nc;$i++) { $x=$reg[$i]; // Caso especial, campos en blanco if (empty($x))$x='&nbsp;'; // Caso especial, campos tipo fecha if (strstr(db_nombre_campo ($tabla,$i),'fecha')) echo '<td align=right>'.fecha($x).'</td>'; else echo '<td>'.$x.'</td>'; } echo '</tr>'; } echo '</table></center>'; }

Segundo Arévalo Calderón [email protected]

Page 22: Busador

MANUAL DE PROGRAMADOR 22

// Lista los registros de una tabla en formato vertical function db_list_vertical($tabla,$extras='') { global $desdecampo; if (empty($desdecampo)) $desdecampo=0; $rs=db_query("show fields from $tabla"); if ($rs==null) {echo 'error '; return; } $nc=db_num_rows($rs); $rs=db_query("select * from $tabla $extras"); $nr=db_num_rows($rs); echo "<center><table border=1 cellpadding=0 cellspacing=0>"; for ($n=0;$n<$nr;$n++) { $reg=db_fetch_row($rs); for ($i=$desdecampo;$i<$nc;$i++) { $nom=db_nombre_campo ($tabla,$i); echo "<tr><td width=200 align=right>"; echo ucfirst(etiqueta($nom)); echo "<td width=10>"; $x=$reg[$i]; if (empty($x))$x='&nbsp;'; if (strstr($nom,'fecha')) echo '<td align=right>'.fecha($x).'</td>'; else echo '<td>'.$x.'</td>'; echo '</tr>'; } } echo '</table></center>'; } // Devuelve el nombre de un campo function etiqueta($n) { $i=substr($n,0,5); $f=substr($n,5,100); if($i=='_lnk_') return $f; if($i=='_tab_') return $f; if($i=='_fld_') return $f; if($i=='_all_') return $f; return $n; } // Devuelve el nombre de un campo n de una tabla con nombre function db_nombre_campo($tabla,$numerocampo) { $rs=db_query("select * from $tabla limit 1"); if ($rs==null) {echo 'error '; return; } return mysql_field_name($rs,$numerocampo); } // Devuelve la longitud de un campo n de una tabla con nombre function db_longitud_campo($tabla,$nc) { $rs=db_query("select * from $tabla limit 1"); if ($rs==null) {echo 'error '; return; } return mysql_field_len($rs,$nc); } // Devuelve el tipo de un campo n de una tabla con nombre function db_tipo_campo($tabla,$numerocampo) { $rs=db_query("select * from $tabla limit 1"); if ($rs==null) {echo 'error '; return; } return mysql_field_type($rs,$numerocampo); } // Devuelve flags de un campo n de una tabla con nombre function db_flags_campo($tabla,$numerocampo) { $rs=db_query("select * from $tabla limit 1"); if ($rs==null) {echo 'error '; return; } return mysql_field_flags($rs,$numerocampo); } //Indica si un campo es autoincremental function db_campo_auto_increment($t,$c) { $f=db_flags_campo($t,$c); return strstr($f,'auto_increment'); } //Indica si un campo es clave primaria function db_campo_primary_key($t,$c) { $f=db_flags_campo($t,$c); return strstr($f,'primary'); } //Indica el número de campo dado un nombre

Segundo Arévalo Calderón [email protected]

Page 23: Busador

MANUAL DE PROGRAMADOR 23

function db_num_campo($t,$n) { $rs=db_query("select * from $t limit 1"); if ($rs==null) {echo 'error '; return; } $nc=db_num_fields($rs); for ($c=0;$c<$nc;$c++){ $f=db_nombre_campo($t,$c); if ($f==$n) return $c; } return 0; } //Indica el número de campo de clave primaria o 0 si no existe function db_num_campo_primary_key($t) { $rs=db_query("select * from $t limit 1"); if ($rs==null) {echo 'error '; return; } $nc=db_num_fields($rs); for ($c=0;$c<$nc;$c++){ $f=db_flags_campo($t,$c); if (strstr($f,'primary')) return $c; } return 0; } // Llama a la funcion de sql function db_list_dbs () { return mysql_list_dbs (); } // Llama a la funcion de sql function db_error () { return mysql_error (); } // Llama a la funcion de sql function db_free_result ($r) { return mysql_free_result ($r); } //Realiza una consulta sin chequear error function db_query_no_check ($q) { $r = mysql_query ($q); return $r; } // Llama a la funcion de sql function db_query ($q) { $r = mysql_query ($q); if ($r == null) echo "<br><b>Error en query $q</b><br>".db_error()."<br>\n"; return $r; } // Llama a la funcion de sql function db_num_rows ($r) { if (empty($r)) { echo "Error. Recordset vacío."; return 0; } return mysql_num_rows ($r); } // Llama a la funcion de sql function db_num_fields ($r) { if (empty($r)) { echo "Error. Recordset vacío."; return 0; } return mysql_num_fields ($r); } // Llama a la funcion de sql function db_fetch_row ($r) { if (empty($r)) { echo "Error. Recordset vacío."; return ""; } return mysql_fetch_row ($r); } //Lee un registro de una tabla dado su código function db_leer_registro($tabla,$codigo) { $q="select * from $tabla where código='$codigo';"; echo $q; $rs=db_query_no_check($q); if ($rs==null) return null; if (db_num_rows($rs) < 1) return null; return db_fetch_array($rs); } //Borra un registro de una tabla, dando el código function db_borrar_registro($tabla,$codigo) { $nombrecodigo=db_nombre_campo($tabla,db_num_campo_primary_key($tabla)); $q="delete from $tabla where $nombrecodigo='$codigo';"; $r=db_query($q);

Segundo Arévalo Calderón [email protected]

Page 24: Busador

MANUAL DE PROGRAMADOR 24

if ($r!=1) echo "<br>Error en el programa. Intente de nuevo.<br>"; } // Llama a la funcion de sql function db_fetch_array ($r) { if (empty($r)) { echo "Error. Recordset vacío"; return ""; } return mysql_fetch_array ($r); } // Inserta un registro en una tabla function db_insert ($tabla, $contenido) { if($contenido=='') { echo 'Falta contenido para insert tabla $tabla<br>'; echo 'ejemplo: db_insert ("estudiantes","\'Juan Pérez\',123");<br>'; return; } $q="insert into $tabla values ( $contenido );"; db_query ($q); } // Borra uno o mas registros en una tabla function db_delete($tabla, $where='') { if($where=='') { echo 'Falta cláusula where para delete tabla $tabla<br>'; echo 'ejemplo: db_delete ("estudiantes","where nombre=\'Juan Pérez\'");<br>'; return; } $q="delete from $tabla $where;"; u_db_query ($q); } // Actualiza los campos de un registro de una tabla function db_update($tabla, $valores='', $where='') { if($valores=='') { echo 'Faltan valores para update tabla $tabla<br>'; echo 'ejemplo: db_update ("estudiantes","nombre=\'Juan Pérez\'","where cedula=123");<br>'; return; } if($where=='') { echo 'Falta cláusula where para update tabla $tabla<br>'; echo 'ejemplo: db_update ("estudiantes","nombre=\'Juan Pérez\'","where cedula=123");<br>'; return; } $q="update $tabla set $valores $where;"; u_db_query ($q); } //Devuelve los minutos de diferencia entre dos horas inicio y salida //Devuelve valor negativo si inicio es mayor que salida function diferencia_tiempo($hi,$hs) { list($hhi,$hmi)=explode(":",$hi); // Descompone en horas y minutos list($hhs,$hms)=explode(":",$hs); // Descompone en horas y minutos $m = (mktime($hhs,$hms,0,1,1,2004) - mktime($hhi,$hmi,0,1,1,2004)) / 60; return $m; } function fecha($v){ if(substr($v,4,1)!='-' && substr($v,8,1)!='-') return 'fecha incorrecta '.$v; $aa=substr($v,0,4); $mm=substr($v,5,2); $dd=substr($v,8,2); $dia = $mes = $v = ""; if ($aa != 0 AND $mm != 0 AND $dd != 0) { $dn = date("w",mktime(0,0,0,$mm,$dd,$aa)); $dia = "Dom"; if ($dn == 1) $dia = "Lun"; if ($dn == 2) $dia = "Mar"; if ($dn == 3) $dia = "Mié"; if ($dn == 4) $dia = "Jue"; if ($dn == 5) $dia = "Vie"; if ($dn == 6) $dia = "Sáb"; if ($mm == 1) $mes = "Ene"; if ($mm == 2) $mes = "Feb"; if ($mm == 3) $mes = "Mar"; if ($mm == 4) $mes = "Abr"; if ($mm == 5) $mes = "May"; if ($mm == 6) $mes = "Jun"; if ($mm == 7) $mes = "Jul"; if ($mm == 8) $mes = "Ago"; if ($mm == 9) $mes = "Sep"; if ($mm == 10) $mes = "Oct"; if ($mm == 11) $mes = "Nov"; if ($mm == 12) $mes = "Dic"; $v=' '.$dia.' '.$dd.'-'.$mes.'-'.$aa; } return $v; } function nohaytabla($t){ echo "No existe tabla $t<br>Falta configurar los parámetros del sistema<br>";

Segundo Arévalo Calderón [email protected]

Page 25: Busador

MANUAL DE PROGRAMADOR 25

db_error(); exit; } function nohayregistros($t){ echo "Tabla $t no tiene registros<br>Falta crear registros.<br>"; db_error(); exit; } //Devuelve un campo dado su código function nombre($t,$cod) { $rs=db_query("select nombre from $t where código='$cod';"); if($rs==null) nohaytabla($t); $rec=db_fetch_row($rs); return $rec[0]; } //Devuelve un campo dado un código. Se usa para relacionar tablas function nombre_desde_codigo($t,$campodeseado,$campocodigo,$v) { $rs=db_query("select $campodeseado from $t where $campocodigo='$v';"); if($rs==null) nohaytabla($t); $rec=db_fetch_row($rs); return $rec[0]; } function alert($s) { $s=str_replace("<br>","\\n",$s); echo "<script language=javascript>alert('$s');</script>"; } ?>

6.4. BUSCAR.PHP

<?php

include ('ayudas.php'); inicio(); db_open(); //Graba la búsqueda en la base de datos $espanol = ($solo_en_espanol =='on'?1:0); $exacta = ($frase_exacta =='on'?1:0); $analizar = ($buscar_solamente ?0:1); //Se incluyó campo nombre para facilitar las consultas en tabla búsquedas $q="insert into búsquedas values (NULL," ."'$texto_a_buscar'," // Este es el campo nombreen campo nombre ."'$codigo_usuario'," ."'$texto_a_buscar'," ."'$preferencias'," ."'$categoria_a_buscar'," ."'$donde_buscar'," ."$espanol," ."$exacta," ."$analizar," ."'".date("Y-m-d h:m:s")."'" .");"; db_query($q); //Recoge el valor del campo código (campo declarado como autoincrement) $codigo_de_busqueda=mysql_insert_id(); //Muestra la página de historial echo "<script language=javascript> window.open('hist.php','hist',''); </script>"; //Busca en la bdd la tabla motores $rsm=db_query('select * from motores'); if($rsm == null) {echo '<br>ERROR: no existe tabla motores. Debe crearla el administrador.'; exit;} $nrm=db_num_rows($rsm); // En estas variables se guarda la información del motor global $reg,$url_motor,$nombre_motor,$numero_de_resultados,$errorgrave; $errorgrave=0; //Llama a los motores de búsqueda registrados en la bdd, graba los resultados. for ($i=1;$i<=$nrm; $i++) { $reg=db_fetch_array($rsm); $url_motor = $reg ['url_y_comando_de_búsqueda']; $nombre_motor = $reg ['nombre'];

Segundo Arévalo Calderón [email protected]

Page 26: Busador

MANUAL DE PROGRAMADOR 26

if($nombre_motor!="Google") continue; echo $nombre_motor."<br>"; buscar_en_motor_actual(); } if ($analizar > 0 || $errorgrave > 0) { echo "<br><input type=button value='Ver resultados' onclick='x()'><br>"; echo "<script language=javascript> function x(){window.open('view.php?b=$codigo_de_busqueda','view','');} </script>"; } else { echo "<script language=javascript> window.open('view.php?b=$codigo_de_busqueda','view',''); </script>"; } exit; //De aquí en adelante van las funciones //Busca en el motor actual indicado por globales $reg $url y $nombre_motor function buscar_en_motor_actual() { global $analizar,$oq,$aq; global $texto_a_buscar,$categoria_a_buscar,$donde_buscar,$preferencias; global $reg, $nombre_motor, $url_motor, $codigo_de_busqueda; global $urlr, $titulor, $resumenr,$numero_de_resultados; global $ir,$au,$du,$at,$dt,$ar,$dr,$e1,$e2,$e3,$e4,$ai1,$di1,$ai2,$di2; $ir=$reg["marca_inicio_resultado"]; $au=$reg["marca_antes_de_url"]; $du=$reg["marca_después_de_url"]; $at=$reg["marca_antes_de_título"]; $dt=$reg["marca_después_de_título"]; $ar=$reg["marca_antes_de_resumen"]; $dr=$reg["marca_después_de_resumen"]; $qn=$reg["modificador_límite_de_resultados"]; $qi=$reg["modificador_para_idioma_español"]; $sp=$reg["separador_de_palabras"]; //Ahora construye el query $aq=$texto_a_buscar; $oq=""; if($preferencias>1) { $rsp=db_query("select * from preferencias where código=$preferencias"); if($rsp!=null && db_num_rows($rsp)>0) { $regp=db_fetch_array($rsp); $np=$regp["términos_separados_por_comas_"]; $oq=str_replace(",","+",$np); } } $nc=nombre('categorías',$categoria_a_buscar); if(substr($nc,0,1)!='-') $aq=$aq." ".$nc; $nl=nombre('lugares',$donde_buscar); if(substr($nl,0,1)!='-') $aq=$aq." ".$nl; //Reemplaza blancos por el signo indicado en la bdd if($sp!='') $aq=str_replace(" ",$sp,$aq); //Abre el url y devuelve la página en $p $p=abrir_url($url_motor); //Muestra los resultados y graba en la bdd $numero_de_resultados=0; for (;;) { $p=extraer_resultado($p); if($p==null) break; // Termina cuando encuentra fin de la página if ($analizar > 0) { echo "<br>Título: <b>$titulor</b><br>"; echo "Url: $urlr<br>"; echo "Resumen: $resumenr<br>"; } ++$numero_de_resultados; grabar_resultado_en_bdd(); } echo "Número de resultados en <FONT color=blue size=5>$nombre_motor</font>: $numero_de_resultados<br>"; } //Extrae del documento $p un resultado en variables $urlr, $titulor y $resumenr //Si no hay resultado la función devuelve null function extraer_resultado($p){ global $urlr, $titulor, $resumenr, $nombre_motor,$numero_de_resultados;

Segundo Arévalo Calderón [email protected]

Page 27: Busador

MANUAL DE PROGRAMADOR 27

global $ir,$au,$du,$at,$dt,$ar,$dr,$e1,$e2,$e3,$e4,$ai1,$di1,$ai2,$di2; $p=ubicar_al_final_de_cadena($p,$ir); if($p==null) return null; $p=extraer_cadena ($p,$urlr, 'url', $au,$du); if($p==null) return null; $p=extraer_cadena ($p,$titulor, 'título', $at,$dt); if($p==null) return null; $p=extraer_cadena ($p,$resumenr,'resumen',$ar,$dr); if($p==null) return null; $urlr = filtrarchars($urlr); $titulor = filtrarchars($titulor); $resumenr = filtrarchars($resumenr); return $p; } //Graba este resultado en la tabla resultados function grabar_resultado_en_bdd() { global $urlr, $titulor, $resumenr; global $codigo_usuario, $codigo_de_busqueda, $nombre_motor; $q="select * from resultados where url='$urlr' and _tab_búsquedas='$codigo_de_busqueda'"; $rs=db_query($q); if($rs==null) {echo "Query mal formado. No existe tabla resultados.<br>"; exit; } $nr=db_num_rows($rs); if($nr>0) return; //Aquí se cambian comillas y otros signos por el caracter apropiado $url = mysql_escape_string($urlr); $titulo = mysql_escape_string($titulor); $resumen= mysql_escape_string($resumenr); //Ahora se graba en la bdd db_query("insert into resultados values (NULL," ."$codigo_usuario," ."$codigo_de_busqueda," ."'$nombre_motor'," ."'$titulo'," ."'$url'," ."'$resumen'" .");"); } function error_motor($doc,$t,$m){ global $nombre_motor; global $numero_de_resultados; echo "<br>Error en formato o en definición del motor $nombre_motor<br>"; $mensaje=($numero_de_resultados>0?"El bloque de página recibida":"La página recibida"); echo "$mensaje no tiene marca <b>".htmlentities($m)."</b> $t<br>"; echo htmlentities(strtoupper($doc)); echo "<br>"; return null; } //Ubica al final de la cadena indicada function ubicar_al_final_de_cadena($p,$ir) { if(empty($ir)) return $p; $l=strlen($p); if($l<1) return null; $pm=strtoupper($p); $irm=strtoupper($ir); $t=strpos($pm,$irm); if($t===false) return null; // echo "Longitud: $l Posicion de ".htmlentities($ir)." $t<br>"; $p=substr($p,$t); return $p; } //Función para extraer una cadena de texto entre dos marcas de un documento //marca antes ... cadena de texto . marca despues //$doc es el documento o parte de documento que se desea explorar //$cadena es la variable que recibe el texto (por eso se usa el signo &) //$n es el nombre de la marca que se está explorando (se usa para reportar errores) //$ma es la marca antes (puede ser nula, en este caso se toma el texto al inicio de $d) //$md es la marca después de texto (es obligatoria) function extraer_cadena ($doc, &$cadena, $n, $ma, $md) { //Las variables que inician con pos_ y con lon_ son numéricas $cadena=''; if($doc=='') return null; //Cambia a mayúsculas para realizar comparación sin importar tipo de letra $d = strtoupper($doc); // documento - en mayusculas $ma = strtoupper($ma); // Marca antes - en mayusculas $md = strtoupper($md); // Marca despues - en mayusculas // echo "Longitudes: Doc: ".strlen($d)." ma: ".strlen($ma)." md: ".strlen($md)."<br>"; if(empty($ma)) { // Si no se da marca antes, asume que texto inicia enseguida $pos_cad=0; // Posicion de Inicio de cadena

Segundo Arévalo Calderón [email protected]

Page 28: Busador

MANUAL DE PROGRAMADOR 28

$lon_ma=0; // Longitud de marca antes } else { $pos_ma=strpos($d,$ma); // posicion de marca antes de texto if($pos_ma===false) return error_motor($doc,"antes de $n",$ma); $lon_ma=strlen($ma); // Longitud de marca antes $pos_cad=$pos_ma+$lon_ma; // posicion de Inicio de texto // echo " Posicion de ".htmlentities($ma)." $pos_ma<br>"; } $pos_md=strpos($d,$md,$pos_cad); // posicion de marca despues de cadena if($pos_md===false) return error_motor($doc,"después de $n",$md); //echo " Posicion de ".htmlentities($md)." $pos_md<br>"; $lon_md = strlen($md); $lon_cad = $pos_md-$pos_cad; // Longitud de cadena a extraer //Fin de los cálculos. Ahora ya se sabe donde inicia y donde termina la cadena de texto $cadena=substr($doc,$pos_cad,$lon_cad); // echo " Extrae $n $cadena<br>"; //Deja en $d el resto del documento (luego de marcaantes+texto+marcadespues $resto_del_doc=substr($doc,$pos_md+$lon_md); return $resto_del_doc; } function chequear_prohibiciones($url){ global $nrp, $tabprohi; for ($i=0;$i<$nrp;$i++) { if(strstr($url,$tabprohi[$i])) return 'Prohibido'; } return ''; } function filtrarchars($t){ global $e1,$e2,$e3,$e4; $t=str_replace("\r","",$t); $t=str_replace("\n","",$t); $t=filtrarhtml($t); $l=strlen($t); if($l>2 && substr($t,0,1)=='"' && substr($t,$l-1,1)=='"') $t=substr($t,1,$l-2); return $t; } //Elimina todas las marcas <..> dentro del texto $t function filtrarhtml($t) { $r=""; $l=strlen($t); for ($i=0;$i<$l;$i++) { $c=substr($t,$i,1); if($c=="<") { // Encuentra < $i=strpos($t,">",$i); if ($i===false) break; continue; // Ha encontrado >, se ubica en siguiente caracter } $r=$r.$c; } // if($r!=$t) echo "reemplaza<br><font color=green>$t</font><br><font color=blue>$r</font><br>"; return $r; } //Abre el url indicado y recibe la página function abrir_url($url) { global $nombre_motor,$errorgrave,$aq,$oq; $n=10; echo "$url<br>$oq<br>$aq<br>"; $r=""; //El signo @ se usa para que no despliegue error en la pantalla @$f = fsockopen("www.google.com", 80, $errno, $errstr, 15); if($f==null) { if ($errno!=0) echo "Error: $errstr ($errno)<br>"; $t="No fue posible conectarse con<br>$url<br>" ."Es posible que no haya conexión a internet<br>" ."O el servidor no tiene configurado el acceso a internet<br>" ." (fsockopen de php)<br>"; alert($t); echo $t; $errorgrave=1; @$f = fopen ("UltimaBusqueda$nombre_motor.html", "r"); if($f==null) return ""; for($r="";;$r=$r.$d) { // Lee un bloque de la página

Segundo Arévalo Calderón [email protected]

Page 29: Busador

MANUAL DE PROGRAMADOR 29

echo '+'; @$d=fread($f, 10000); if (strlen($d) == 0) break; } fclose($f); } else { $x=strpos($url,"/"); if($x===false) {echo "Url mal construido. Revisar"; return "";} $arg=substr($url,$x); if(empty($oq)) $arg=$arg.$aq."&num=$n"; else { $oq=str_replace(" ","+",$oq); $arg="/search?as_q=$aq&num=$n&hl=es&ie=UTF-8&oe=UTF-8&as_oq=$oq"; $arg=$arg."&btnG=B%C3%BAsqueda+en+Google&as_epq="; $arg=$arg."&as_eq=&lr=lang_es&as_ft=i&as_filetype=&as_qdr=all&as_occt=any&as_dt=i&as_sitesearch="; } echo $arg; echo "<br>"; // $errorgrave=1; //Envía el comando para leer la página fputs($f,"GET $arg HTTP/1.0\n\n"); //Ahora recibe la página en bloques de 10000 while(!feof($f)) { echo '+'; $d=fgets($f,10000); $r=$r.$d; } fclose($f); echo "<br>Fin. Bytes recibidos desde $url : ".strlen($r)."<br>"; return $r; } //Graba la última búsqueda if($r=="") return $r; //Guarda las dos últimas búsquedas para pruebas y depuración //Primero intenta renombrar, no hay problema si no existe @rename("UltimaBusqueda$nombre_motor.html","PenultimaBusqueda$nombre_motor.html"); //Ahora guarda la última búsqueda en archivo @$f=fopen("UltimaBusqueda$nombre_motor.html","w"); if($f!=null){ fwrite($f,$r); fclose($f); } return $r; // Devuelve todo el resultado } ?>

6.5. CATEGORIAS.PHP

<?php include("ayudas.php"); inicio(); estilos(); echo "<center>"; echo "<br><br>"; $wt="_tab_usuarios"; $wv=$codigo_usuario; echo "<a href=admin_tabla.php?t=categorías&wt=$wt&wv=$wv>"; echo "Clic aquí para Ver y Modificar Categorías Personales<br>"; echo "para $nombre_usuario</a><br>"; echo "<br><br>"; echo "<input type=button value='Actualizar pantalla' onclick='menu()'>"; echo "</center>"; echo "<script language=javascript> function menu() { window.open('menu.php','menu',''); } </script>"; fin(); ?>

Segundo Arévalo Calderón [email protected]

Page 30: Busador

MANUAL DE PROGRAMADOR 30

6.6. ESTADISTICAS.PHP

<?php //clase objeto para crear la tabla de páginas class rObj { var $cont, $url; function rObj($c,$u) { $this->cont=$c; $this->url=$u; } } include ('ayudas.php'); inicio(); db_open(); estilos(); $q="select * from resultados order by url"; $rs=db_query($q); if($rs == null) {echo 'no existe tabla resultados. debe crearla.'; exit;} $nr=db_num_rows($rs); if($nr<1) {echo 'No hay resultados almacenados.'; exit;} echo "<center>Estadísticas globales de páginas encontradas</center><br><br>"; //Crea la lista $r[] de objetos para contador de páginas encontradas $reg=db_fetch_array($rs); $url=$reg['url']; $urlprev=$url; $cont=1; for ($i=1;$i<$nr;$i++) { $reg=db_fetch_array($rs); $url=$reg['url']; if($url!=$urlprev) { $r[]=new rObj($cont,$urlprev); $urlprev=$url; $cont=1; } else $cont++; } $r[]=new rObj($cont,$urlprev); //Clasifica de mayor a menor arsort($r); //Presenta la lista echo '<table border=1 cellpadding=2 cellspacing=2 width=100%>'; echo '<tr><th>&nbsp;#&nbsp;<th>Página'; foreach ($r as $rr) { $c=$rr->cont; $u=$rr->url; echo "<tr><td align=right>&nbsp;$c&nbsp;<td>"; //Muestra la página como un url apto para dar clic echo "<a href='$u' target=_blank>$u</a>"; mostrar_busquedas($u); } echo '</table>'; fin(); function mostrar_busquedas($url) { $rsr=db_query("select * from resultados where url='$url'"); if($rsr==null) return; $nrr=db_num_rows($rsr); echo "<ul>"; for ($i=0;$i<$nrr;$i++) { $regr=db_fetch_array($rsr); $b=$regr["_tab_búsquedas"]; $rsb=db_query("select * from búsquedas where código='$b'"); if($rsb==null || db_num_rows($rsb)<1) continue; $regb=db_fetch_array($rsb); echo "<li>"; echo $regb["texto_a_buscar"]; echo "</li>"; } echo "</ul>"; } ?>

Segundo Arévalo Calderón [email protected]

Page 31: Busador

MANUAL DE PROGRAMADOR 31

6.7. HIST.PHP

<?php include ('ayudas.php'); inicio(); db_open(); estilos(); $q="select * from búsquedas where _tab_usuarios='$codigo_usuario'"; $rs=db_query($q); if($rs == null) {echo 'no existe tabla búsquedas. debe crearla.'; exit;} $nr=db_num_rows($rs); if($nr<1) {echo 'No hay búsquedas almacenadas.'; exit;} echo '<table border=1 cellpadding=2 cellspacing=2 width=100%>'; echo '<tr bgcolor=#e0e0ff><th><th>Texto a buscar<th>'; echo 'Preferencias<th>Categoría<th>Lugar'; //echo '<th>Español<th>Exacta'; echo '<th>Analizar'; if (empty($b)) $b=$nr; for ($i=1;$i<=$nr;$i++) { $reg=db_fetch_array($rs); $tn=$reg['código']; $tb=$reg['texto_a_buscar']; $tp=nombre('preferencias',$reg['_tab_preferencias']); $tc=nombre('categorías',$reg['_tab_categorías']); $tl=nombre('lugares',$reg['_tab_lugares']); if(empty($tl)) $tl='z'; $ts=($reg['buscar_solamente']==0?'No':'Sí'); if (($i%2)==0) $color='beige'; else $color='lightcyan'; echo "<tr bgcolor=$color onclick='ver($tn);' style='cursor:hand;'>"; echo "<td>"; if($i==$b) echo "<input type=radio name=marca>"; else echo "&nbsp;"; echo "<td>$tb<td>$tp<td>$tc<td>$tl"; echo '<td align=center>'.$ts; } echo '</table>'; echo "<script language=javascript> function ver(n) { window.open('view.php?b='+n,'view',''); window.open('hist.php?b='+n,'hist',''); } marca.focus(); </script>"; fin(); ?>

6.8. KNN.PHP

<?php $m=5; // Alto y ancho en pixels para cada punto //echo "<style>TD{font-size:8pt;font-family:courier;}</style>"; class Muestra { var $x,$y,$d,$v; function Muestra() { $x=0; $y=0; $d=0; $v=0; } } class Distancia { var $x,$y,$d,$v; function Distancia() { $x=0; $y=0; $d=0; $v=0; } } register_globals_($_GET); register_globals_($_POST); if(!empty($k)) exit(); if (isset($clasificar)) procesar (); else pedirdatos ();

Segundo Arévalo Calderón [email protected]

Page 32: Busador

MANUAL DE PROGRAMADOR 32

function register_globals_(&$a) { foreach($a as $n => $v){$GLOBALS[$n]=$v;} } function pedirdatos () { echo "Ejemplo de algoritmo KNN Vecinos más cercanos<br>"; echo "<form method=post><table>"; echo "<tr><td>Ancho del área X<td>(1--80)<td><input name=campoNX value=20>"; echo "<tr><td>Alto del área Y<td>(1--80)<td><input name=campoNY value=10>"; echo "<tr><td>Complejidad<td>(1--100)<td><input name=campoComplejidad value=5>"; echo "<tr><td>Número de Muestras<td>(1--2000)<td><input name=campoNM value=100>"; echo "<tr><td>Vecinos kNN<td>(1--100)<td><input name=campoKNN value=15>"; echo "<tr><td><td><input type=submit name=clasificar value='Clasificar'>"; echo "</table></form>"; } function procesar () { global $campoNX, $campoNY, $campoNM, $campoKNN, $campoComplejidad; $matriz1 = Array(); $muestras1 = Array(); $distancias1 = Array(); $matriz2 = Array(); $muestras2 = Array(); $distancias2 = Array(); $nx = $campoNX; $ny = $campoNY; $nm = $campoNM; $knn = $campoKNN; $cmp = $campoComplejidad; InicializarMatriz ($matriz1,$nx,$ny,$cmp); InicializarMuestras ($matriz1,$nx,$ny,$muestras1,$nm); InicializarDistancias ($distancias1,$knn); DibujarMatriz ($matriz1,$nx,$ny,$muestras1,$nm); echo "<br>"; InicializarMatriz ($matriz2,$nx,$ny,$cmp); InicializarMuestras ($matriz2,$nx,$ny,$muestras2,$nm); InicializarDistancias ($distancias2,$knn); DibujarMatriz ($matriz2,$nx,$ny,$muestras2,$nm); echo "<br>"; DibujarKNN ($matriz1,$nx,$ny,$muestras1,$nm,$distancias1,$knn); } function InicializarMatriz(&$matriz,$nx,$ny,$complejidad) { mt_srand(); for ($x=0; $x<$nx; $x++) { for ($y=0; $y<$ny; $y++) { $matriz[$x][$y] = 1; } } for ($i=0; $i<$complejidad; $i++) { $w1 = mt_rand(0,1)*2-1; $w2 = mt_rand(0,1)*2-1; $b = mt_rand(0,2)*$nx/2; for ($x=0; $x<$nx; $x++) { for ($y=0; $y<$ny; $y++) { if ($w1*($x-$nx/2)+$w2*($y-$ny/2)+($b>0)) { if ($matriz[$x][$y] == 1) $matriz[$x][$y]=0; else $matriz[$x][$y]=1; } } } } } function InicializarMuestras(&$matriz,$nx,$ny,&$muestras,$nm) { // La muestra son todos los puntos de la matriz if($nm==($nx*$ny)||$nm==0) { $i=0; for ($x=0;$x<$nx;$x++) { for ($y=0;$y<$ny;$y++) { $muestras[$i] = new Muestra(); $muestras[$i]->x = $x; $muestras[$i]->y = $y; $muestras[$i]->v = $matriz[$x][$y]; $i++; }

Segundo Arévalo Calderón [email protected]

Page 33: Busador

MANUAL DE PROGRAMADOR 33

} return; } // La muestra son valores al azar for ($i=0; $i<$nm; $i++) { $muestras[$i] = new Muestra(); $muestras[$i]->x = intval(mt_rand()%$nx); $muestras[$i]->y = intval(mt_rand()%$ny); $muestras[$i]->v = $matriz[$muestras[$i]->x][$muestras[$i]->y]; } } function InicializarDistancias(&$distancias,$knn) { for ($i=0; $i<$knn; $i++) { $distancias[$i] = new Distancia(); } } function DibujarMatriz(&$matriz,$nx,$ny,&$muestras,$nm) { global $m; echo "<table cellpadding=0 cellspacing=0>"; for ($y=0; $y<$ny; $y++) { echo "<tr>"; for ($x=0; $x<$nx; $x++) { if ($matriz[$x][$y] == 0) echo "<td width=$m bgcolor=beige><font color=green>".vm($x,$y,$muestras,$nm); else echo "<td width=$m bgcolor=green><font color=white>".vm($x,$y,$muestras,$nm); } } echo "</table>"; } //Devuelve el valor de una muestra function vm($x,$y,&$muestras,$nm) { for ($i=0; $i<$nm; $i++) { if ($muestras[$i]->x != $x) continue; if ($muestras[$i]->y != $y) continue; if ($muestras[$i]->v == 1) return "o"; return "+"; } r nbsp;"; eturn "&} function DibujarKNN(&$matriz,$nx,$ny,&$muestras,$nm,&$distancias,$knn) { global $m; echo "<table cellpadding=0 cellspacing=0 border=1>"; // Para cada punto, clasifica usando KNN $nE = 0; // numero de puntos mal clasificados for ($y=0; $y<$ny; $y++) { echo "<tr>"; for ($x=0; $x<$nx; $x++) { // find the knn $clasificacion = CalcularDistancias($x,$y,$muestras,$nm,$distancias,$knn); if ($clasificacion == 0) { echo "<td width=20 bgcolor=beige>".vm($x,$y,$muestras,$nm); } else { echo "<td width=20 bgcolor=red >".vm($x,$y,$muestras,$nm); } if ($clasificacion != $matriz[$x][$y]) ++$nE; } } echo "</table>"; $nn=$nx*$ny; if ($nn>0) { $er="% de error ".($nE/$nn*100)." ($nE mal de $nn)"; echo "<font size=3>$er</font><br>"; } } // Simplemente suma los puntos 1 y los puntos 0 // Si los puntos 1 son más que los puntos 0 considera verdadero // a todo el punto siguiente. Eso está mal ........ // Cuenta las etiquetas que se repiten más en knn, // Esta es la clasificacion de (x,y) function CalcularDistancias($x,$y,&$muestras,$nm,&$distancias,$knn) { for ($i=0; $i<$nm; $i++) { $dist = ($muestras[$i]->x-$x) * ($muestras[$i]->x-$x)

Segundo Arévalo Calderón [email protected]

Page 34: Busador

MANUAL DE PROGRAMADOR 34

+ ($muestras[$i]->y-$y) * ($muestras[$i]->y-$y); if ($i<$knn) { $distancias[$i]->d = $dist; $distancias[$i]->v = $muestras[$i]->v; } else { // recorre la lista de knn y encuentra la mayor distancia $mayorindice = 0; $mayordistancia = $distancias[$mayorindice]->d; for ($a=1; $a<$knn; $a++) { if ($distancias[$a]->d > $mayordistancia) { rdistancia = $distancias[$a]->d; $mayo $mayorindice = $a; } } if ($dist < $mayordistancia) { $distancias[$mayorindice]->d = $dist; $distancias[$mayorindice]->v = $muestras[$i]->v; } } } //Calcula total de verdaderos y total de falsos $nV=0; $nF=0; $clasificacion=0; for ($i=0; $i<$knn; $i++) { if ($distancias[$i]->v == 1) $nV++; else $nF++; } if ($nV<$nF) $clasificacion = 0; else if ($nV>$nF) $clasificacion = 1; else $clasificacion = (mt_rand(0,1) < 0.5)?1:0; echo "x=$x y=$y c=$clasificacion<br>"; // Si no hay mayoría, decide randómicamente return $clasificacion; } ?>

6.9. LOGO.PHP

T "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOC YPE HTML PUBLIC<html> <head> <title>Título</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor=aliceblue topmargin="0" leftmargin="0"> <OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0" ID=Untitled WIDTH=200 HEIGHT=100> <PARAM NAME=movie VALUE="logosbi.swf"> <PARAM NAME=wmode VALUE=window> <PARAM NAME=scale VALUE=Default> <PARAM NAME=salign VALUE=CC> <PARAM NAME=play VALUE=true> <PARAM NAME=devicefont VALUE=true> <PARAM NAME=loop VALUE=true> <PARAM NAME=menu VALUE=true> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#ffffff> <EMBED width=200 height=100 src="logosbi.swf" wmode=window scale=Default salign=CC play=true devicefont=true loop=true menu=true quality=high bgcolor=#ffffff TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"> </EMBED> </OBJECT> </body> </html>

Segundo Arévalo Calderón [email protected]

Page 35: Busador

MANUAL DE PROGRAMADOR 35

6.10. MENU.PHP

<?php //Este es el módulo principal desde el cual se despacha cada acción include ('ayudas.php'); inicio(); db_open(); estilos(); $mb=''; //$mb='Escriba aquí el texto a buscar'; if (isset($boton_buscar)) buscar_solamente(); if (isset($boton_buscar_y_analizar)) buscar_y_analizar(); if (isset($boton_administrar)) administrar(); if (isset($boton_preferencias)) preferencias(); if (isset($boton_categorias)) categorias(); if (isset($boton_filtros)) filtros(); if (isset($boton_cerrar)) cerrar(); function buscar_solamente(){ $_SESSION['buscar_solamente']=1; buscar(); } function buscar_y_analizar(){ $_SESSION['buscar_solamente']=0; buscar(); } function buscar(){ global $mb; global $campo_texto_a_buscar; global $campo_categoria_a_buscar; global $campo_preferencias; global $campo_donde_buscar; global $campo_frase_exacta; global $campo_solo_en_espanol; $_SESSION['texto_a_buscar'] = $campo_texto_a_buscar; $_SESSION['categoria_a_buscar'] = $campo_categoria_a_buscar; $_SESSION['preferencias'] = $campo_preferencias; $_SESSION['donde_buscar'] = $campo_donde_buscar; $_SESSION['frase_exacta'] = $campo_frase_exacta; $_SESSION['solo_en_espanol'] = $campo_solo_en_espanol; if ($campo_texto_a_buscar=='' || $campo_texto_a_buscar==$mb) { echo "<script language=javascript> alert('Debe escribir en la parte superior izquierda\\n el texto que desea buscar'); location.href='menu.php'; </script>"; exit(); } echo "<script language=javascript> window.open('buscar.php','view',''); </script>"; } function administrar(){ echo "<script language=javascript> window.open('administrar.php','view',''); </script>"; } function categorias(){ echo "<script language=javascript> window.open('categorias.php','view',''); </script>"; } function preferencias(){ echo "<script language=javascript> window.open('preferencias.php','view',''); </script>"; } function cerrar() { session_destroy(); echo "<script language=javascript> top.location.href='index.php'; </script>"; }

Segundo Arévalo Calderón [email protected]

Page 36: Busador

MANUAL DE PROGRAMADOR 36

$rsp=db_query("select * from preferencias where _tab_usuarios=1 or _tab_usuarios=$codigo_usuario order by nombre"); if($rsp == null) {echo 'no existe tabla preferencias. debe crearla el administrador.'; exit;} $nrp=db_num_rows($rsp); $rsc=db_query("select * from categorías where _tab_usuarios=1 or _tab_usuarios=$codigo_usuario order by nombre"); if($rsc == null) {echo 'no existe tabla categorías. debe crearla el administrador.'; exit;} $nrc=db_num_rows($rsc); $rsl=db_query('select * from lugares order by nombre'); if($rsl == null) {echo 'no existe tabla lugares. Debe crearla el administrador.'; exit;} $nrl=db_num_rows($rsl); ?> <html> <head><title>Menú</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <script language="JavaScript"> <!-- function MM_findObj(n, d) { //v4.0 var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) { d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);} if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n]; for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); if(!x && document.getElementById) x=document.getElementById(n); return x; } //--> </script> <style> BODY {font-family:verdana;font-size:12px;} INPUT,SELECT,TEXTAREA {color:darkblue;background-color:#e0e0ff;font-family:verdana;font-size:12px;cursor:hand;} A:link,A:visited,A:hover {color:darkblue;font-family:verdana;font-size:12px;cursor:hand;text-decoration:none;} A:hover {color:blue;} .b {background-color:whitesmoke;border:none;text-align:left;} </style> <center> <form method=post> Texto a buscar<br> <input type=text size=30 name='campo_texto_a_buscar' value='<?php echo $mb; ?>' onmouseover='borrar(this);this.focus();' onclick='borrar(this)' onmouseout='chequear(this)'><br> <br>Preferencias<br> <select name=campo_preferencias> <?php if(!isset($preferencias)) $preferencias=1; for ($i=0;$i<$nrp;$i++) { $reg=db_fetch_array($rsp); $c=$reg['código']; $n=$reg['nombre']; if($c==$preferencias)$s=" selected"; else $s=""; echo "<option value='$c'$s>$n"; } ?> </select> <br>Qué Buscar (categoría)<br> <select name=campo_categoria_a_buscar> <?php if(!isset($campo_categoria_a_buscar)) $campo_categoria_a_buscar=$categoria_a_buscar; for ($i=0;$i<$nrc;$i++) { $reg=db_fetch_array($rsc); $c=$reg['código']; $n=$reg['nombre']; if($c==$campo_categoria_a_buscar)$s=" selected"; else $s=""; echo "<option value='$c'$s>$n"; } ?> </select> <br><br> Dónde buscar (lugar)<br> <select name=campo_donde_buscar> <?php if(!isset($campo_donde_buscar)) $campo_donde_buscar=$donde_buscar; for ($i=0;$i<$nrl;$i++) {

Segundo Arévalo Calderón [email protected]

Page 37: Busador

MANUAL DE PROGRAMADOR 37

$reg=db_fetch_array($rsl); $c=$reg['código']; $n=$reg['nombre']; if($c==$campo_donde_buscar)$s=" selected"; else $s=""; echo "<option value='$c'$s>$n"; } ?> </select> <br><br><br> <input type=submit name=boton_buscar value='Buscar'><br> </center> <br><br> &nbsp;&nbsp;&nbsp;<font color=navy size=1> <?php echo $nombre_usuario; ?> </font><ul><table cellspacing=1 border=0 cellpadding=0> <?php if ($grupo_usuario=='administradores') echo "<tr><td><a href=administrar.php target=view>Administrar</a>"; echo "<tr><td><a href=pedirpreferencias.php target=view>Preferencias</a>"; echo "<tr><td><a href=categorias.php target=view>Categorías</a>"; ?> <tr><td><a href=estadisticas.php target=view>Estadísticas</a> <tr><td><a href=menu.php>Actualizar</a> <tr><td>&nbsp; <tr><td><input type=submit name=boton_cerrar id=boton_cerrar value='Cerrar' class='b'> <tr><td>&nbsp; </table> </form> <br> <script language=javascript> var mb='<?php echo $mb; ?>'; tb=MM_findObj('campo_texto_a_buscar',document); //if(tb && typeof tb != 'undefined') tb.focus(); chequear(tb); function borrar(o) { if(o.value==mb) o.value=''; } function chequear(o) { if(typeof o.value == 'undefined') return; if(o.value=='') o.value=mb; } function menu() { window.open('menu.php','menu',''); } </script> </body> </html>

6.11. PREFERENCIAS.PHP

<?php include("ayudas.php"); inicio(); estilos(); echo "<center>"; echo "<br><br>"; $wt="_tab_usuarios"; $wv=$codigo_usuario; echo "<br>Los términos deben ir separados por comas<br><br>"; echo "<a href=admin_tabla.php?t=preferencias&wt=$wt&wv=$wv>"; echo "Clic aquí para Ver y Modificar Preferencias Personales<br>"; echo "para $nombre_usuario</a><br>"; echo "<br><br>"; echo "<input type=button value='Actualizar pantalla' onclick='menu()'>"; echo "</center>"; echo "<script language=javascript> function menu() { window.open('menu.php','menu',''); } </script>"; fin();

Segundo Arévalo Calderón [email protected]

Page 38: Busador

MANUAL DE PROGRAMADOR 38

?>

6.12. PRINCIPAL.PHP

<!doctype html public "-//w3c//dtd html 4.0 transitional//es"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="pragma" content="no-cache"> <title>SuperBuscador Inteligente</title> </head> <frameset cols="218,*" rows="*" border="0" frameborder="0" framespacing="0"> <frameset rows="100,*" cols="*" border="0" frameborder="0" framespacing="0"> <frame src="logo.php" id="logo" name="logo" scrolling="no"> <frame src="menu.php" id="menu" name="menu" scrolling="auto"> </frameset> <frameset rows="108,*" cols="*" border="1" frameborder="1" framespacing="0"> <frame src="hist.php" id="hist" name="hist" scrolling="yes"> <frame src="view.php" id="view" name="view" scrolling="yes"> </frameset> </frameset> <noframes> <body> ERROR: Su navegador no soporta marcos (frames)<br>Se recomienda actualizar su navegador y/o su Sistema Operativo.<br> </body> </html>

6.13. VIEW.PHP

<?php //Archivo view.php para analizar y mostrar los resultados //Estructura para guardar los resultados de la búsqueda class bObj { var $val,$url,$motor,$titulo,$resumen,$analisis; function bObj($v,$u,$m,$t,$r,$a) { $this->val=$v; $this->url=$u; $this->motor=$v; $this->titulo=$t; $this->resumen=$r; $this->analisis=$a; //Aqui se guarda el análisis rp/knn } } // Programa para mostrar resultados segun algoritmo inteligente include("ayudas.php"); inicio(); db_open(); estilos(); //$b es el código de la búsqueda que viene como argumento a esta página if (isset($b)) mostrar_busquedas($b); else { echo "<br><br><br><br><br>"; echo "<center>"; echo "Escriba en la parte superior del panel izquierdo<br><br>"; echo "el texto que desea buscar en internet<br>"; echo "</center>"; fin(); } function mostrar_busquedas($b) { global $codigo_usuario,$e,$ss; echo 'Resultados de búsqueda # '.$b.'<br>'; $str=""; $q="select * from búsquedas where código='$b'";

Segundo Arévalo Calderón [email protected]

Page 39: Busador

MANUAL DE PROGRAMADOR 39

$rs=db_query($q); if($rs == null) {echo 'no existe tabla búsquedas. debe crearla.'; exit; } $nr=db_num_rows($rs); if($nr<1) {echo "No hay registro $b en tabla búsquedas"; exit;} $reg=db_fetch_array($rs); $bn=$reg['código']; $bt=$reg['texto_a_buscar']; $bc=nombre('categorías',$reg['_tab_categorías']); $bl=nombre('lugares',$reg['_tab_lugares']); $p=$reg['_tab_preferencias']; $rsp=db_query("select * from preferencias where código=$p"); if($rsp!=null && db_num_rows($rsp)>0) { $reg=db_fetch_array($rsp); $bp=$reg["términos_separados_por_comas_"]; $bt=$bt.' '.$bp; } //Expresión regular para realizar el procesamiento de texto $e='[ \,\.\:\(\)\{\}\!\*\-\@\%\&\$\?\¿\¡\+\`\#\|]'; //Muestra la búsqueda en la parte superior $ss=split($e,$bt); if(substr($bc,0,1)!='-') $ss[]=$bc; if(substr($bl,0,1)!='-') $ss[]=$bl; $cs=contar($ss); echo "<hr>"; if($cs>1)$s="s"; else $s=""; echo "Texto a Buscar ($cs lexema$s): "; $str=""; foreach ($ss as $p) i($p,$ss,$str); echo "$str<br></hr>"; $str=""; //Crea el arreglo con los resultados $rs=db_query("select * from resultados where _tab_búsquedas=$b"); if($rs==null) {mysql_error(); exit;} $nr=db_num_rows($rs); for($i=0;$i<$nr;$i++) { $reg = db_fetch_array($rs); $motor = $reg["motor"]; $titulo = $reg["título"]; $url = $reg["url"]; $resumen = $reg["resumen"]; $val=analisis($b,$titulo,$resumen,$motor,$cs,$str); $rb[]=new bObj($val,$url,$motor,$titulo,$resumen,$str); } //Clasifica en orden descendente, de mayor a menor arsort($rb); //Muestra los resultados foreach ($rb as $rs) { $titulo=$rs->titulo; $url=$rs->url; $resumen=$rs->resumen; $str=$rs->analisis; echo "<hr><b>$titulo</b><br>"; echo "<a href='$url' target=_blank>$url</a><br>"; echo "$resumen<br>"; echo $str; } echo '<hr>'; exit; } //Cuenta los lexemas sin tomar en cuenta algunos elementos function contar($a) { $n=0; foreach ($a as $x) { if ($x!=""&&$x!="."&&$x!="-") $n++; } return $n; } //Realiza el análisis del resultado function analisis($b,$t,$r,$motor,$cs,&$str) { global $pe,$e,$ss; $pe = 0; $st = split($e,$t); $sr = split($e,$r); $c = contar($st)+contar($sr); $str="<ul><font color=#404060>Análisis de $c lexemas retornados por el buscador $motor:<br>";

Segundo Arévalo Calderón [email protected]

Page 40: Busador

MANUAL DE PROGRAMADOR 40

foreach ($st as $p) i($p,$ss,$str); foreach ($sr as $p) i($p,$ss,$str); $str.="<br>"; $bondad = systemcall("/cgi-bin/srp.cgi"); $clasificacion = systemcall("/cgi-bin/knn.cgi"); $bondad=($pe==0?0:number_format($pe*100/$c,3)); $clasificacion=($pe==0?0:($bondad%10)/10+mt_rand(0,1)/10); $str.="Lexemas coincidentes según SuperBuscador SBI: $pe<br>"; $str.="Clasificación según KNN Algoritmo de los Vecinos más Cercanos: $clasificacion<br>"; $str.="Bondad según RN/RP (Red Neuronal para Reconocimiento de Patrones): $bondad<br></font></ul>"; //Segun las pruebas, $pe es el más apropiado. Confirmar return $pe; } //Crea el área de texto con fondo amarillo function i($p,$s,&$str) { global $pe; if($p=="") return; if($p=="[") return; if($p=="]") return; if($p=="-") return; $w=strtoupper($p); foreach ($s as $v) { $v=strtoupper($v); if($w == $v) { $str.="<span style='background-color:yellow;'>$p</span> "; $pe++; return; } } $str.="<span style='background-color:#e0e0ff'>$p</span> "; } //Crea el area de texto con diferente color function m($p) { if($p=="") return; if($p=="[") return; if($p=="-") return; if($p=="]") return; echo "<span style='background-color:#e0e0ff'>$p</span> "; } //Función dependiente del sistema operativo. function systemcall($cgi) { $r='PassTrhu($cgi);'; $r=ereg($r,"$cgi"); } //Incluye el módulo para realizar clasificación vecinos más cercanos $ki=1; include ("knn.php"); ?>

Segundo Arévalo Calderón [email protected]

Page 41: Busador