05.13.08

Cese en el desarrollo

Publicado en General en 12:55 pm por xeos

He decidido demorar el desarrollo del proyecto de Pleim con el fin de recuperar otros proyectos y ocuparme un poco de cosas que tenía olvidadas. Seguiré continuandolo pronto, de eso no hay duda, aunque prefiero no aventurarme a dar una fecha.

Aún así, si alguien está interesado en continuar con el desarrollo puede contactar conmigo, y recibirá toda mi ayuda. Quizá, con colaboración, me anime a llevar los proyectos que tengo en mente en paralelo.

Un saludo a todos y gracias.

04.19.08

Mejoras y felicitaciones

Publicado en General en 11:19 am por xeos

Ya ha acabado la fase local en la Universidad de Cádiz. Desde aquí felicitar al proyecto ganador XMLEye.

Por mi parte, en unos días empezaré a modificar la biblioteca libtextcat. Para los interesados, es una biblioteca del reconocimiento del lenguaje licenciada en BSD. Para integrarla en Pleim, la idea es ajustarla para que use el módulo de almacenamiento database.c, modificar el API para que se ajuste más a lo que necesito, y coordinar los lenguajes que permitirá reconocer con los lenguajes que soporta la biblioteca que elimina los sufijos, libstemmer.

Espero contaros en unos días que ya no es necesario decirle a Pleim cual es vuestro idioma. Hasta pronto.

04.06.08

Resumen

Publicado en General en 10:57 pm por xeos

El plazo de desarrollo del concurso llegó a su fin y, como si de un fin de año se tratase, es el momento de hacer balanza, resumir, ver qué metas hemos cumplido, cuál ha sido la trayectoria y cual será el camino del proyecto a partir de aquí.

Logros del desarrollo

Tras este tiempo hemos conseguido tener operativo un daemon UNIX que hace de servidor. Entre sus funcionalidades: la de entrenar y clasificar documentos, administración de las categorías de forma remota y toda las operaciones auxiliares de almacenamiento. Además de soportar un protocolo basado en SMTP para las comunicaciones con los clientes.

Hemos puesto en funcionamiento la biblioteca cliente para Emacs Lisp. Así, no debería ser dificil incorporar cualquier característica relacionada con Pleim a GNU/Emacs o XEmacs.

¡También existe una biblioteca cliente para C! Hemos intentado mantener la interfaz lo más simple y uniforme posible. Y creo que lo hemos conseguido. Todas las funciones comparten prefijo, valor de retorno, y primer argumento.

Utilizando la biblioteca C, hemos aprovechado para crear una serie de pequeñas utilidades de administración que podrían ser usadas fácilmente desde scripts para automatizar tareas de clasificación, sin tener que escribir una sola línea C.

Finalmente, hemos escrito una pequeña guía para ayudar a nuevos desarrolladores a involucrarse y contribuir con Pleim en el futuro. ¡Ojalá dé resultado! :-)

El resultado de todo esto puede verse en los dos videos ya publicados en su día:

  • http://csl2-pleim.forja.rediris.es/pleim-demo-1.ogg (explicación)
  • http://csl2-pleim.forja.rediris.es/pleim-demo-2.ogg

El futuro

Es dificil establecer unas líneas de desarrollo a largo plazo, entre otras cosas, porque no me gustaría tener que decidirlas, sino que fuese la comunidad las que las fuera fijando. Sin embargo, en un futuro inmediato hay un largo trabajo hasta la primera liberación testing de Pleim. Debemos implementar el soporte para múltiples perfiles para múltiples usuarios, módulo de autenticación. Trabajar e investigar sobre clasificación jerárquica, y modelos híbridos entre clasificadores basados en ejemplos y en perfiles, evitando tener que usar un clasificador lineal, sin renunciar a el modelo de perfiles.

Escribir más documentación. Junto a la primera liberación testing es necesario publicar un manual del usuario (con intención en que esté disponible tanto en español como en inglés en un principio). Además de los convenientes textos matemáticos sobre clasificación de documentos, con el objetivo de que Pleim ofrezca una buena plataforma para investigar sobre la clasificación o agrupación automática de documentos.

Pleim y la comunidad

Más allá de los criterios de evaluación del II Concurso Universitario de Software Libre, Pleim no podría existir sin una comunidad. Ésto es porque el propio proyecto va destinado a desarrolladores, como un servicio para ellos.

De momento, hay varias ideas de añadir soporte para Pleim a varios proyectos de Software Libre. Por mi parte trabajaré para que Gnus (el lector de todo) se beneficie de ésto. Otro proyecto en planificación es crear un clasificador y organizador de archivos PDF, PS, HTML, … etc. Además de proyectos de terceros, como Carlos Arias, quién intenta desarrollar un plugin para XChat.

A muchas personas les he de agradecer su esfuerzo, pues si bien indirectamente, son ellos los verdaderos motores del proyecto. Pleim no es más que una ínfima parte, un pequeño grano de arena. A todos ellos, desarrolladores de GNU, al equipo de desarrollo del proyecto Snowball y la biblioteca libstemmer y, en general, a todas las personas que hacen posible ésto. A toda la comunidad de software libre: gracias.

No puedo olvidarme de agradecer, al ya antes mencionado, Carlos Arias, por su interés y paciencia, por una contribución más directa y su trabajo en la gestión de las stopwords que, aunque no haya dado tiempo a entrar para el concurso, sin duda es valorada. También por su tiempo revisando la documentación y los post que he ido escribiendo.

Ya por último, aunque no haya existido demasiado contacto entre participantes de diferentes proyectos, quiero mandar mis felicitaciones a todos aquellos participantes y, ya que estoy tan cerca, espero veros por Sevilla :-) .

04.05.08

Guía para nuevos desarrolladores

Publicado en General en 5:03 pm por xeos

He subido el primer archivo de documentación al proyecto: una guía para nuevos desarrolladores. En realidad, es tan sólo un boceto que espero ir completando a la vez que se completa el proyecto.

¿Por qué no un manual para el usuario? Por prudencia, porque Pleim no está preparado para el usuario final aún. Y más vale llegar un poco más tarde a ellos, pero mejor. :-)

03.24.08

Biblioteca C y pequeñas utilidades

Publicado en General en 12:06 am por xeos

Esta vez la elección fue la correcta. Abandonar temporalmente la línea de desarrollo para el soporte de varios motores de bases de datos me abrió las puertas hacia un mundo nuevo de inspiración y productividad :-) . Hoy, una vez más vengo a comentaros un poco cuales han sido los cambios últimamente en el proyecto Pleim, y en mi cabeza. Con la diferencia, de que esta vez estoy bastante satisfecho con los avances. Muchos, la mayoría de los cambios son básicamente internos a Pleim, por lo que no los voy a detallar aquí ahora. Sin embargo, desde una vista menos técnica, podemos encontrar dos características esencialmente nuevas.

La primera, había quedado en un principio fuera de planes del concurso pues pensé que no iba a dar tiempo. Hablamos de, como habréis podido imaginar a raíz del título, de la biblioteca para C, denominada ahora libpleim. Un conjunto de funciones que permite usar la funcionalidad de Pleim desde C, y por ende, potencialmente desde la gran mayoría de lenguajes existentes hoy día. La segunda, se ha colado en esta fiesta, se trata de un conjunto de utilidades, de comandos básicos para manejar categorías, clasificar y entrenar datos, eso sí, desde shell. Poca novedad, si no fuese por el hecho de que está pensado para poder usarse tanto manualmente, para administración, como desde shell scripts, pudiendo automatizar fácilmente tareas de clasificado.

Pues bien, tan contento estoy con el trabajo hecho estos días que no añadiré más características a Pleim mientras dure el concurso. El tiempo restante me limitaré a mejorar lo existente y documentar mejor todo.

03.17.08

Bases de datos y elección errónea

Publicado en General en 3:56 pm por xeos

Desde hace ya algunos días andaba un poco parado con Pleim. El motivo fue mi desconocimiento desde un principio por los diferentes motores de bases de datos. Por diferentes circunstancias, cuando comencé el proyecto opté por usar sqlite3, pero manteniendo siempre en mi mente un diseño para poder usar cualquier otro motor. Así, a la hora de escribir el módulo para la base de datos usé 2 capas, una de alto nivel genérica (frontend) y otra de más bajo nivel (backend) para cada motor. Naturalmente, lo ideal es cargar todo el peso posible en la interfaz genérica manteniendo cada uno de los backends con unas funciones mínimas de modo que fuese simple implementar nuevos motores. Sin embargo con el tiempo, una vez he desarrollo ha ido avanzando, por simplicidad, todo el trabajo se ha cargado en el propio backend. Así la función del frontend se ha convertido en multiplexar los diferentes motores en uno.

Realizar una capa genérica para las bases de datos significaría crear tipos de datos capaces de albergar cada uno de los usados en ellas, funciones capaz de tratar con múltiples registros, etc. además de perder la posibilidad de usar sentencias SQL complejas desde la capa de algo nivel para obtener los datos, con la pérdida de flexibilidad y eficiencia que supone.

Así, después de unos días pensando, he decidido que el lenguaje C es demasiado limitado para esto. Y que el costo de hacer una interfaz genérica no compensa con el beneficio que los usuarios obtendrían pudiendo elegir el motor de la base de datos. Pienso que me equivoqué desde un principio al no observar que cambiar el módulo para permitir varios motores una vez estuviera hecho solo requiere trabajo nuevo, sin desperdiciar el trabajo que hubiese hecho hasta entonces.

Como conclusión, eliminaré temporalmente el soporte para backends, dejaré sólo sqlite3 e intentaré avanzar en las tareas que este tema no me impedía comenzar, que creo, es mas importante…

02.21.08

Un ejemplo más humano

Publicado en General en 12:33 pm por xeos

Ya he intentado transmitiros el potencial de Pleim en entornos avanzados como Emacs. Ahora le toca el turno al usuario final.

Os propongo ver este otro ejemplo.

Espero que os guste. :-)

02.18.08

Primeros resultados

Publicado en General en 1:09 am por xeos

Aquí tenéis tal y como os prometí en el último post, el primero de los resultados: un screencast.

http://csl2-pleim.forja.rediris.es/pleim-demo-1.ogg

Así es, aquí tenéis disponible una demostración de dos ejemplos que he grabado usando para ellos la biblioteca cliente para emacs lisp de Pleim.

El video está en el formato Ogg Theora. He intentado subirlo a algunas de las ya conocidas páginas de alojamiento de videos pero la reducción de calidad es excesiva y es imposible ver nada en claro. Así, ruego a todos que no os dejéis influir por la vagancia y hagais un pequeño esfuerzo: veanlo. :-) Estaría muy agradecido de que me dejarais aquí vuestros comentarios.. dudas, impresiones, etc.

Os paso a comentar y explicar las dos demostraciones con más detalle:

La primera demostración en aparecer en el video, trata de mostrar la funcionalidad de Pleim a la hora de categorizar un texto. En él podéis ver como, tras pegar algunos párrafos en la ventana, éstos son coloreados acorde a una leyenda. A cada categoría le corresponde un color. Por ejemplo en un instante puede verse:

Emacs is a powerful text editor.

Emacs is written in Lisp, which is the only computer language that is beautiful.

Ambos párrafos contienen las palabras Emacs y Lisp, sin embargo Pleim categoriza el primero como Emacs, y el segundo como Lisp. Supongo que estareis de acuerdo con esta clasificación. :-)

Como segundo ejemplo, muestro el contenido de un directorio llamado Unclassified, con archivos sobre una temática específica, en particular son artículos de Wikipedia y wikibooks sobre Emacs, Lisp, Matemática y Música (las categorías que tengo definidas en mi servidor Pleim). Tras ejecutar el comando responsable de lanzar el segundo de los ejemplos, el directorio queda clasificado. Se crea un directorio para cada categoría y se mueven los documentos a el directorio que le corresponde.

Esto son solo ejemplos, podéis imaginaros otros.. podéis sugerirme alguno para que probemos, pero vuelvo a decir, Pleim es el servidor que clasifica. Ese conocimiento se comparte entre todos los programas (no solo emacs) :-).

Y bueno, no tengo mucho más que decir, solo espero que sea de vuestro agrado.

01.31.08

Stemming y stop words

Publicado en General en 4:03 pm por xeos

Después de leer algún que otro paper, parece que ya tengo mas o menos claro las transformaciones a las que someteré el documento antes de pasárselo al clasificador. En un principio el modelo que quería seguir lo hacia independiente del lenguaje, aunque es cierto que presentaba (y continuará presentando) algunos problemas para clasificar un grupo de documentos bajo una misma categoría si hay documentos en varios idiomas en el mismo grupo.

Así, aunque intentaré conseguir que sin apoyo ni información sobre el idioma permanezca lo más eficaz posible, veo conveniente incorporar dos medidas auxiliares (por el momento), que serían aplicadas en el caso de que se encontraran disponibles (como ya he dicho, serían opcionales) al documento a categorizar.

  • Stop words list. Un listado con las palabras pertenecientes al idioma que no son discriminantes para asociar el documento a una categoría.
  • Un listado de sufijos y prefijos para transformar cada palabra a su raíz (en inglés stemming).

Ambas medidas no son indispensables, pero mejorarán notablemente la eficacia del clasificador. Favorecerán además a evitar la llamada maldición de la dimensionalidad (the curse of dimensionality), y a disminuir el sobreajuste en el aprendizaje. Sin embargo como ya he comentado, intentaré en la medida de lo posible dar la posibilidad de una alternativa genérica independiente del lenguaje.

Edito: La magia del software libre. Hace apenas 4 horas que escribí este post y ahora, gracias al trabajo del Dr Martin Porter en la biblioteca libstemmer, ya disponemos de esta funcionalidad para 15 idiomas. La biblioteca en cuestión está publicada bajo la licencia BSD y la podéis descargar desde http://snowball.tartarus.org.

01.14.08

Algunas novedades

Publicado en General en 5:57 pm por xeos

Ante todo, espero que todos hayáis pasado unas buenas vacaciones, ya que una vez han pasado definitivamente las fiestas, llegan los exámenes. Y la única verdad es que uno siempre desearía tener más tiempo, para poder… malgastarlo sin tantas prisas. :)

Bueno, hablemos un poco de Pleim. El proyecto avanza, no excesivamente rápido, y quizá no lo suficiente para disponer de un resultado presentable cuando llegue la fase de evaluación de los proyectos del concurso. Como resumen de los cambios, deciros que ya disponemos de una implementación básica del protocolo, una interfaz genérica para el almacenamiento secundario, y una implementación del backend para sqlite3. Después de desarrollar el sistema de aprendizaje, mi intención es poner ya algún material público para que todos podáis echarle un vistazo, antes de continuar y terminar afinando los últimos ajustes previos al cambio de versión a beta. Entre este material, incluiría un video a modo de demostración de las características de Pleim, y un documento con cuestiones puramente técnicas, para facilitar la integración de cualquier interesado en el proyecto.

Por el momento usaré LaTeX para toda esta documentación, sin embargo, más adelante, me gustaría escribir los documentos oficiales en texinfo para la primera release.

Y con esto termino, no os entretengo más.. :)