<$BlogRSDUrl$>

Pro·Log·[IR]

Programación Lógica y Recuperación de Información

«Algorithm = Logic + Control» Robert Kowalski (1979)

¡Importante! esta página hace uso de estilos recogidos en la especificación CSS2, no soportados por el navegador que está utilizando. Por favor, lea esta recomendación al respecto.

Archivo

Guardado por meses.

Enlaces

Los siguientes listados son una referencia a partir de la cual ampliar la búsqueda de sitios relacionados (i).

Bitácoras en castellano

Bitácoras en inglés

Directorios, metablogs

Programación lógica, Inteligencia Artificial, Recuperación de Información

Usabilidad, Arquitectura de la Información

Listas, foros, wikis

Matemáticas, ciencias

Miscelánea

Búsquedas

Búsqueda simple en varios de los motores más conocidos. Para mayor precisión, entrar en la página correspondiente e ir al apartado de búsqueda avanzada.

Búsqueda con Google
 

Búsqueda con Yahoo!
 

Búsqueda con AlltheWeb

Varios

Esta página traducida:

Traducción al catalán, internostrum; traducción al portugués, universia.

Reciba un aviso de nuevos comentarios (por Bloglet).


Agregue este sitio a su lector de "feeds" (sindicación mediante el sistema Atom).

Sobre este sitio

Espacio dedicado a la programación lógica y la recuperación de información, con una atención especial al lenguaje Prolog y otros lenguajes afines, pertenecientes al paradigma lógico y declarativo. También se tratará de hablar de estos temas desde la perspectiva de la Biblioteconomía y la Documentación.

En esta página

28.7.03

Inteligencia Artificial aplicada a la Documentación

Vicente P. Guerrero Bote y Cristina López-Pujalte, de la Facultad de Biblioteconomía y Documentación (Unex), hacen un repaso en "Inteligencia Artificial y Documentación" (Investigación Bibliotecológica, vol. 15 nº 30, enero/junio 2001) al estado de la cuestión en relación con la aplicación de técnicas de la IA al campo de la Documentación y la Recuperación de Información, centrándose en la utilización, para este propósito, de modelos de Algoritmos Genéticos (técnicas de búsqueda), Redes Neuronales Artificiales (métodos conexionistas) y Sistemas Expertos (sistemas basados en el conocimiento). En el capítulo de conclusiones escriben:

"Actualmente se han comenzado a aplicar técnicas de IA en documentación para superar los límites de los métodos clásicos. El campo en el que más se han utilizado es el de la recuperación de información, en gran medida por su formalización, el aumento de la información que hace inviables métodos tradicionales, y el impacto que tiene en la disciplina en su conjunto."

La aplicación de las RNA, y particularmente las denominadas Redes de Kohonen (sobre las que se basan los mapas auto-organizativos o SOM-Self Organizative Maps), a la recuperación y visualización de información, es una línea de trabajo que interesa especialmente a Guerrero Bote. Su tesis doctoral, dirigida por Félix de Moya, lleva por título "Redes neuronales aplicadas a las tecnicas de recuperación documental" (1997).

Sobre este particular tiene publicado un breve artículo en la revista universitaria Puertas a la Lectura: "Redes neuronales artificiales aplicadas a la visualización de la información" (nº 5, diciembre 1998). El artículo (formato PDF) está depositado en E-LIS, ya que el enlace al sumario de la revista, y el enlace al propio artículo, en la ubicación original, no están operativos. También se puede localizar en la copia cache almacenada por Google, en HTML, aunque se pierden las figuras.

En la página personal de Félix de Moya, catedrático de la Facultad de Biblioteconomía y Documentación (Ugr), se encuentran varios artículos publicados por Guerrero Bote, en colaboración con otros autores, además del propio Moya (entrar en el apartado "Artículos"), entre los que destacan, por su relación con el tema propuesto:

Por su parte, y sobre visualización y recuperación de información mediante la aplicación de mapas auto-organizativos de Kohonen, Félix de Moya es autor, junto con Victor Herrero, de la introducción "Investigaciones en curso sobre interfaces gráficos [...] para el acceso a la información electrónica" (Cuadernos de Documentación Multimedia, nº 8, 1999). Dado que el artículo tiene ya un cierto tiempo, desgraciadamente no funcionan gran parte de los enlaces de la sección de referencias.

Más información acerca de:

Finalmente destacar, de entre la colección publicada en Investigación Bibliotecológica, el artículo de José A. Moreiro y Miguel A. Marzal, "Modelos teóricos y elementos funcionales para el análisis de contenido documental: definición y tendencias" (vol. 15, nº 31), en el que abordan, desde la perspectiva del análisis documental de contenido, algunas de las líneas de investigación actuales referidas a: modelos de análisis y representación del contenido informativo, conceptualización de la información representada mediante lenguajes normalizados (e.g. tesauros), organización del conocimiento y su relación con los lenguajes de clasificación, y la recuperación y visualización de información iconográfica, entre otras cuestiones.

[0] comentarios | # | lista |

18.7.03

Spam, clasificación automática y algo de Lisp

Los excelentes comentarios publicados por Abraldes sobre técnicas de clasificación automática, basadas en procedimientos estadísticos, y su aplicación al filtrado de correo basura o "spam", me han animado a indagar un poco más sobre esta cuestión, y en el transcurso de estas "pesquisas" he encontrado bastantes referencias, algunas de las cuales me gustaría compartir con los lectores de estas líneas, pero sin pretender que tengan un carácter representativo de la cuestión.

Tras la lectura de un comentario publicado en minid.net, me enteré recientemente de que las últimas versiones de Mozilla incorporan en su gestor de correo un "filtro bayesiano" para la clasificación automática del "spam". Si bien sabía de la existencia de esta herramienta (no obstante, para las cuentas de correo susceptibles de recibir "spam" prefiero hacer uso del "webmail"; Yahoo por ejemplo incorpora una utilidad de filtrado, a cuya tecnología denomina "SpamGuard", que automáticamente almacena este tipo de mensajes en una carpeta aparte), desconocía que su funcionamiento estuviese basado en este mecanismo de clasificación, que gracias a los principios estadísticos en los que se fundamenta, permite generar un proceso de aprendizaje que se desarrolla con el uso continuado, a fin de mejorar su grado de eficacia o porcentaje de aciertos.

En Mozilla Spam Filtering, dentro del sitio del proyecto Mozilla, se explica su utilización, partiendo de la base de que es preciso un entrenamiento previo y, de forma paralela, la reclasificación manual de los casos fallidos, para que este mecanismo de filtrado funcione con fiabilidad. En la página se hace referencia al artículo de Paul Graham, "A Plan for Spam". Describe una serie de técnicas de filtrado, y esta mención viene a cuento de que el algoritmo de clasificación de Mozilla se basa en los procedimientos descritos.

This article describes the spam-filtering techniques used in the new spamproof web-based mail reader we're building to exercise Arc.

El artículo se complementa con otro, "Better Bayesian Filtering", en el que se desarrolla un algoritmo mejorado respecto del descrito en el primero. Ambos forman parte de un apartado en el que el autor recoge una serie de artículos y referencias cuya temática gira en torno al spam y su clasificación como tal, incluyendo entre otras referencias una lista de filtros anti spam. De modo más general encontramos, en otro apartado, una breve explicación de una ejemplificación del Teorema de Bayes (ver también la introducción de Kevin Murphy, "A brief introduction to Bayes' Rule", complemento de "A Brief Introduction to Graphical Models and Bayesian Networks").

Los ejemplos del artículo están escritos en Common Lisp (sin embargo la aplicación descrita está desarrollada en Arc, un dialecto de Lisp escrito por el propio Graham), lo cual no es de extrañar, ya que Paul Graham tiene un interés especial por este lenguaje, como evidencia su producción al respecto. Ha escrito dos libros dedicados a este lenguaje, "On Lisp" y "ANSI Common Lisp". El primero se puede descargar libremente, a texto completo, en formato PDF y PostScript, y del segundo se pueden consultar los dos primeros capítulos. En ambos casos está disponible aparte el código fuente de los ejemplos explicados. Sobre esta temática, el lenguaje Lisp y sus variantes, este autor nos proporciona además una importante relación de enlaces que apuntan a las monografías de otros autores, así como una serie de artículos propios.

Sin abandonar el sitio de Paul Graham, no quiero dejar de mencionar las FAQs sobre Lisp, el dialecto Arc y el spam. Por otra parte, en el apartado "Articles" hay artículos sobre diferentes cuestiones, en todo caso muy centradas en los temas que acabo de mencionar y, de modo más genérico, con la programación y el diseño de lenguajes.

Una segunda mención sobre el tema que nos ocupa: el proyecto "BSF - Filtro Bayesiano de Spam". En palabras de sus responsables:

BSF en un proyecto de filtro bayesiano escrito en Perl, ideado con el objetivo de explorar técnicas sencillas pero poderosas de disminuir en forma automática el spam recibido, con un fuerte énfasis en minimizar el riesgo de falsos positivos (correo perdido).

Ver también el análisis del spam recibido que hace uno de los autores del proyecto.

No hay que perder de vista que el lenguaje Perl [1] [2] [3] [4] es muy utilizado en la creación de scripts y aplicaciones CGI [1] [2] [3] [4], y está especialmente indicado para manejar cadenas de caracteres en este contexto. Como nota adicional, señalar que Visual Prolog permite comunicar programas escritos en lenguaje Prolog con páginas HTML, mediante la interfaz CGI [1] [2].

Una advertencia: el enlace al resumen sobre el proyecto BSF es incorrecto, siendo esta la url válida del documento (formato PostScript). El programa se puede descargar en un archivo comprimido (utilizar por ejemplo WinRAR para descomprimirlo, si WinZip no soporta su formato), y la explicación de su funcionamiento la encontramos en el propio código fuente en forma de comentarios (ver también el archivo "Readme").

No veo que se trate, en este momento, de un proyecto muy consistente de cara al usuario final, pero la utilidad de esta referencia creo que está sobre todo en la oportunidad de poder analizar el código fuente del programa y ver como se ha puesto en práctica su funcionamiento, guiándose con la ayuda de los comentarios. No se trata de una utilidad directamente instalable, tal y como estamos acostumbrados los usuarios comunes de Windows. A mi particularmente me interesa analizar como está implementado el módulo de "tokenización" de cadenas de caracteres, ya que este es un aspecto esencial en el PLN y por extensión en los procesos de recuperación de información de carácter alfanumérico.

También existen interesantes aplicaciones para Linux: PopF es un filtro anti-spam para servidores POP3 escrito en Python por Christophe Delord. Al estar desarrollado con un lenguaje multiplataforma, debería funcionar igualmente bajo otros S.O. que lo soportan. En la página de PopF hay interesantes referencias, algunas ya mencionadas (e.g. "A Plan for Spam", Paul Graham), sobre el fundamento teórico de este software (inferencia bayesiana), así como ejemplos de la salida que proporciona su funcionamiento. Existe un foro de discusión especialmente dedicado a PopF.

A los usuarios de la distribución Debian, les resultará interesante saber que existe un paquete especial, spamprobe 0.8b-1, filtro bayesiano anti-spam escrito en C++.

[0] comentarios | # | lista |

9.7.03

Mozilla, RDF y Bookmarks

Es relativamente frecuente encontrar en algunos sitios la posibilidad de consultar el archivo de marcadores (bookmarks) que ha ido generando su autor, exportado en formato HTML. Pues bien, Mozilla permite también exportarlo en formato RDF, de forma que se puede generar un archivo en principio legible por cualquiera de los agregadores o feeders [1] [2] existentes en la actualidad, y por tanto "parseable" mediante una aplicación diseñada para este propósito. Ya se habló anteriormente de la posibilidad de parsear XML/RDF desde código escrito en lenguaje Prolog, y "empotrar" su contenido con éste. Otro ejemplo: en "Parseando RSS 1.0 con PHP" explican como parsear RSS (es decir, notación RDF/XML) mediante funciones escritas en PHP, aprovechando las API's que existen para ello.

Lo interesante es que el archivo generado no sea una simple lista de enlaces, sino que éstos se hallen complementados con una descripción del sitio o recurso en cuestión, de los contenidos que en él se pueden localizar, y además con algún tipo de valoración personal, de forma que sea una autentica guía de navegación.

La opción que ofrece Mozilla podría ser un interesante punto de partida para generar documentos, que sean una alternativa a los simples listados de enlaces que bien poco dicen por si solos, especialmente si su número es excesivo, salvo para el que los ha confeccionado, defecto bastante frecuente, y eso suponiendo que se halla aplicado un criterio coherente en su selección. Se trataría en definitiva de aportar un valor añadido a los archivos de marcadores que vamos generando a lo largo del tiempo al guardar los enlaces de los sitios que nos parecen interesantes, y además hacerlo en un formato compatible con las tendencias actuales de sindicación y compartición de recursos y contenidos, mediante formas de representación de la información estandarizadas, de manera alternativa a la tradicional interfaz y forma de exploración que ofrecen los navegadores. Cualquier idea de aplicación práctica al respecto o comentario adicional, será bienvenido, y sin duda útil para todos los que tenemos cierto interés por estas cuestiones.

Para acceder a la opción de exportación del archivo de marcadores generado en Mozilla se debe seguir la siguiente secuencia, ateniéndonos a la versión de este navegador traducida al castellano:

Marcadores --> Administrar Marcadores --> Tareas --> Exportar

Una vez que estamos situados en el cuadro de diálogo "Exportar archivo de marcadores", elegimos, en el menú desplegable "Guardar como archivos de tipo", el formato RDF.

Nota: IE Explorer sólo exporta el archivo de marcadores en formato HTML, pero por contra incluye la posibilidad (no disponible en Mozilla) de exportar no todo el archivo al completo, sino sólo alguna de las carpetas en que lo hallamos estructurado.

De modo general, y para una referencia más detallada del soporte que ofrece Mozilla al estándar RDF me remito a la página correspondiente, dentro del sitio del proyecto Mozilla, y al listado de enlaces que recogí en otro comentario.

Y ya que en esta ocasión hablamos en parte de Mozilla, no quiero dejar pasar la oportunidad de comentar las excelencias de este navegador. Por mencionar sólo dos de las que ofrece a nivel de usabilidad, la navegación a través de "pestañas" y la opción de "fulminar" las ventanas emergentes (todas o las de los sitios que seleccionemos), son aportaciones sencillamente geniales. Por otra parte, las posibilidades de administración de las diversas tareas que se presentan en la navegación y utilización diarias son muy amplias (formularios, "cookies", contraseñas, descargas...), y a nivel de desarrollo web, nos ofrece varias herramientas, a saber, un depurador y una consola JavaScript, una consola Java y un Inspector DOM.

Las versiones de Mozilla traducidas al castellano (la más reciente es la 1.4), y su correspondiente documentación y ayudas, se pueden descargar desde el sitio del Proyecto Nave. En otro sitio están disponibles, también en castellano, varios minitutoriales dedicados a explicar la instalación, configuración y uso de este navegador. De Mozilla Firebird, el navegador desarrollado sobre la base del lenguaje XUL, al día de hoy, y que yo sepa, solo está disponible la traducción de la versión 0.6 para Linux. En texturizer.net existe un apartado dedicado a recopilar documentación, ayudas, enlaces y otros recursos referidos al proyecto Mozilla Firebird, en varios idiomas (salvo el castellano).

Añadido (19/07/03): excelente página dedicada a Mozilla, ¡Usa Mozilla por un día!, en minid.net. Explica, con la ayuda de capturas de pantalla, las principales funciones de uso y configuración de esta "suite" para Internet. Por su parte, en alzado.org hay una breve introducción en la que se describe su origen y principales características.

[0] comentarios | # | lista |

2.7.03

Teorema de Bayes y Recuperación de Información

Abraldes nos habla del Teorema de Bayes y de su aplicación a la clasificación automática de información, en (I) y (II). La aplicación de los métodos probabilísticos a la clasificación y recuperación de información tiene una larga tradición. De la aplicación de estos métodos en la implementación de sistemas expertos, nos da cuenta el libro "Expert Systems and Probabilistic Network Models" (E. Castillo, J.M. Gutiérrez, y A.S. Hadi. Springer-Verlag, 1997). En la página que da soporte publicitario a esta obra, sus autores, a modo de introducción, escriben lo siguiente:

"Expert systems and uncertainty in artificial intelligence have seen a great surge of research activity during the last decade. This book provides a clear and up-to-date account of the research progress in these areas. [...]

This book is intended for advanced undergraduate and graduate students, and for research workers and professionals from a variety of fields, including computer science, applied mathematics, statistics, engineering, medicine, business, economics, and social sciences. No previous knowledge of expert systems is assumed. Readers are assumed to have some background in probability and statistics."

Concretamente, sobre Redes Bayesianas versa el capítulo 11, Learning Bayesian Networks (acerca de este particular ver también An Introduction to Bayesian Networks and their Contemporary Applications). La versión en castellano de esta monografía, Sistemas Expertos y Modelos de Redes Probabilísticas (Academia Española de Ingeniería, 1998), se puede descargar/consultar en formato PDF.

Siguiendo con el hilo inicial de este comentario, el programa anti spam POPFile es un ejemplo de aplicación práctica del Teorema de Bayes a la clasificación automática de información, como explica Abraldes en una serie de artículos en los que relata el funcionamiento de este programa y su proceso de aprendizaje.

Para finalizar, y continuando con la difusión de las aportaciones que vuelca Abraldes en su bitácora, no quiero dejar de mencionar el desarrollo de una útil herramienta de recuperación de información, un buscador de dominios en versión provisional (más información), del que sería muy interesante que explicase algo del motor de recuperación y su funcionamiento interno, a lo que le animo desde estas líneas. No puedo por menos que felicitarle por su trabajo, y animarle a que siga aportando temas y desarrollos de estas características.

Añadido (15/07/03): sobre redes bayesianas y razonamiento aproximado en general, véase también las referencias incluídas en "Pocholo vs Bayes", comentario publicado en Null Pointer Exception.

[0] comentarios | # | lista |

1.7.03

Java e Inteligencia Artificial - Java y Prolog

En Null Pointer Exception, "weblog" dedicado a hablar de Java, Inteligencia Artificial (IA), Linux y otros temas, Jose Luis Mondelo describe con ejemplos concretos la creciente aplicación de Java a la implementación de desarrollos basados en técnicas propias de la IA... no todo va a ser Prolog, Lisp y otros lenguajes basados en el paradigma de la programación lógica, en el desarrollo de programas "inteligentes"...

En el apartado de enlaces sobre IA que encontramos en esta bitácora destaca, a mi modo de ver, el portal especializado generation5.org. Recomiendo visitar la sección de ensayos y artículos. Breves, claros y concisos, complementados, muchos de ellos, con la explicación de aplicaciones reales cuyo código se puede descargar, en estos artículos se habla, entre otros temas, de: Algoritmos genéticos, Redes Neuronales, Lógica Difusa, Procesamiento del Lenguaje Natural, Vida Artificial, etc. También se ocupan de Prolog, dentro del subapartado Programming: introducción a este lenguaje en tres partes, desarrollo de un sistema experto, tutorial de WinProlog, y, finalmente (al día de hoy), un artículo sobre los árboles de decisión. Por lo demás, el resto del sitio no tiene menos interés, pero lo mejor es ir y verlo por uno mismo.

A los usuarios de FeedReader y otros agregadores les resultará interesante saber que esta página tiene un servicio de sindicación (RSS) tanto de noticias como de artículos.

En JavaPro, el artículo "Prove It, Don't Compute It" trata sobre la programación en Java de reglas de inferencia y bases de conocimiento, emulando mediante clases de Java los principios y métodos del paradigma de la programación lógica. La explicación se ilustra con una serie de ejemplos, cuyo código fuente se puede visualizar en ventanas aparte, y descargar en un solo archivo comprimido (entrar en "get the code").

Y ya que hablamos en esta ocasión de Java e IA, me parece interesante mencionar varias aplicaciones cuyo propósito es implementar código escrito en Prolog dentro de Java y viceversa: tuProlog es un intérprete Prolog y una herramienta de desarrollo para aplicaciones basadas en Internet, de uso libre para su utilización con fines no comerciales. La integración del lenguaje Prolog con Java permite combinar el componente lógico-declarativo del primero con el funcional y orientado a objetos del segundo. En el manual de usuario leemos la siguiente introducción:

"tuProlog is a Java-based light-weight Prolog for Internet applications and infrastructures. For this purpose, tuProlog has been designed to be easy deployable light-weight, dynamically configurable, easily interoperable and built upon Java.

Integration with Java is as wide, deep, and clean as possible, so that tuProlog components can be developed by choosing at any step the most suitable paradigm either declarative/logic or imperative/object-oriented. From the Prolog side, thanks to the JavaLibrary library, any Java entity (objects, classes, packages) can be represented as a Prolog term, and exploited from Prolog. So, for instance, Java packages like Swing and JDBC can be directly used from within Prolog, straightforwardly enhancing tuProlog with graphics and database access capabilities. From the Java side, a tuProlog engine can be invoked and used as a simple Java object, possibly embedded in beans, or exploited in a multi-threaded context, according to the application needs. Also, a multiplicity of different tuProlog engines can be used from a Java program at the same time, each one configured with its own libraries and knowledge base.

Interoperability is strongly developed along two main lines: Internet standard patterns, and coordination models. So, tuProlog supports interaction via TCP/IP and RMI, and can be also provided as a CORBA service. In addition, tuProlog supports tuple-based coordination under many forms. First, components of a tuProlog application can be organised around Java-based tuple spaces, logic tuple spaces, and ReSpecT tuple centres. Then, tuProlog applications can exploit Internet infrastructures providing tuple-based coordination services, like LuCe and TuCSoN."

El intérprete Prolog de esta aplicación se puede ejecutar "online" por medio de un "applet" de Java. Este applet permite introducir directamente hechos y reglas escritos en Prolog en una caja de texto al efecto, o bien cargar una base de conocimiento previamente guardada en un archivo, y a continuación interrogarla e inferir resultados. También permite salvar las posibles modificaciones que vayamos realizando durante la ejecución. De entre las ventajas de tuProlog destacaría, además de la integración de Java con Prolog y al contrario, la posibilidad de desarrollar aplicaciones cuyo motor de razonamiento y de inferencia lógica es una base de conocimiento y un conjunto de reglas escritas en Prolog, a las que se puede incorporar un componente de orientación a objetos, cuyo funcionamiento será independiente del SO en el que se ejecuten.

Una aplicación muy interesante de tuProlog es PrologConsole. Se trata de un "plug-in" que añade a jEdit, editor de texto de código abierto, escrito en Java, la capacidad de manejar un intérprete para el lenguaje Prolog, basado en el estándar ISO. Esto permite utilizar jEdit para escribir código Prolog, o bien editar un archivo ya existente, y al tiempo comprobar la ejecución de los predicados y sentencias de ese código en una consola aparte. En el archivo de descarga de este plug-in viene incluida una copia de tuProlog, ya que es necesaria su instalación para que funcione esta utilidad de jEdit.

JinniConsole, es otro interesante "plug-in" para jEdit. En este caso sirve para "embeber" en dicho editor de texto el intérprete para Prolog y herramienta de "script" Jinni:

"A Prolog Compiler built in Java for Intelligent Mobile Agent Scripting and Internet Programming [...] lightweight, multi-threaded, Java based Prolog compiler intended to be used as a flexible scripting tool for gluing together knowledge processing components and Java objects in networked client/server applications, as well as through applets over the Web."

Para finalizar este comentario, dos recomendaciones más a propósito del tema tratado: "Java Meets Prolog for Advisors, Analysts and Agents", artículo publicado originalmente en PC AI magazine (noviembre/diciembre 1996), describe cómo incorporar un motor de inferencia escrito en Prolog (basado en el entorno de desarrollo Amzi! Prolog) en una clase de Java. Por su parte, en este documento se explica, en castellano, cómo comunicar código escrito en Prolog con Java y viceversa, utilizando JIPL. Hay muchas otras implementaciones, además de las ya mencionadas, que sirven para este propósito, por ejemplo, y sin ánimo exhaustivo:

Algunas de ellas, al igual que en el caso de tuProlog, permiten ejecutar un applet de Java, a modo de intérprete Prolog, dentro de una página HTML. Por último, recomendar la siguiente página de enlaces comentados: Links for Java Prolog.

[1] comentarios | # | lista |


Pro·Log·[IR],

Publicación: Blogger | Estadísticas: eXTReMe Tracking

Se recomienda ver este sitio con Mozilla 1+, Firefox 0.8+ ó Netscape 7+. Si no queda más remedio, con IE 6+. Si lo desea, comunique cualquier problema al respecto. También será bien recibida cualquier sugerencia sobre el contenido. La fuente de letra preferente es Georgia. Se prohibe la utilización del diseño de la página salvo autorización expresa del autor. Los contenidos escritos son de uso libre, siempre que se cite la fuente.