lunes, 28 de noviembre de 2011

Ya se guardan las cadenas en disco

Como dice el título, de nuevo se pueden guardar los datos en disco. Al cambiar radicalmente la estructura de datos, se había perdido esta funcionalidad.

Como se iba a programar desde cero, se pensó usar bases de dados. Se han visto ciertos factores que no nos terminaba de convencer.

La aplicación pretende tener todos los datos en memoria, todos. Sólo se guarda en disco para cuando la aplicación se finalice y poder recuperarlos después. La estructura de datos pretende realizar las búsquedas lo más rápido posible y las lecturas a disco son muy lentas. Por lo que tener una base de datos a la que no se le realizarán consultas parece un poco innecesario.

El código anterior guardaba los datos en distintos archivos con extensión '.dat'. Se ha seguido el mismo camino. De modo secuencial, se leen y guardan los datos. Cada tipo de 'cadena' tiene asociado su archivo '.dat'. A la hora de guardar, sólo se guardarán las listas de cadenas que hayan añadido o modificado alguna cadena.

Es un poco tosco a la hora de guardar, pero se pretende que la aplicación no se apague, sino que periódicamente guarde los cambios, pero que siga en marcha.

Otro factor importante es que no nos obliga a tener MySql instalado.

Otra cosa más, cada tipo de cadena tiene asociado un array de bytes con toda la información, pero cada tipo es de un tamaño diferente. Cada tipo tiene unos campos, si usáramos tablas, debería de crear para cada tipo una tabla, por lo que la base de esta nueva estructura resultaría inútil. Otra opción sería una única tabla con los siguientes campos: index, tipo, array de bytes. Por lo que nos obliga a añadir el campo index en las cadenas. No nos convence.

En resumen, se ha añadido el código para poder leer y escribir las cadenas añadidas a la estructura.

Se agradecen los comentarios.

viernes, 18 de noviembre de 2011

Implementado el tipo Natural y el Ordinal

A lo largo de la mañana hemos implementado dos tipos más. El tipo Natural era una tontería, pero el Ordinal lleva más trabajo.

Dado un Ordinal como por ejemplo 'décimo tercero', que también puede escribirse como 'decimotercero' y sus correspondientes cifras (o abreviaciones) como '13º' o '13ro.' como se viene haciendo en la actualidad, o '13.º' que es como debería de escribirse. Nuestra aplicación acepta cualquiera de las formas. A partir de una, genera las otras y las inserta en la estructura, junto con su género, número y función. De esta forma, da lo mismo que pongamos '13º' o 'decimotercero', va a saber que nos referimos a lo mismo.

Como es lógico, se han quedado implementados los métodos para pasar de Ordinal a Natural y de Natural a Ordinal. No se comentó antes, pero también están los métodos para pasar de Romano a Natural y de Natural a Romano.

El rango de los ordinarios es del 1 al 1000 y 1000000, los más comunes. Según se vea se implementarán más.

Tipos de cadenas que almacena

Tipos que es capaz de tratar:



  • Adjetivos (sin terminar).
  • Adjetivos Determinados.
  • Adverbios
  • Adverbios terminados en 'mente'.
  • Artículos.
  • Cardinales.
  • Complementos de Adjetivo.
  • Complementos de Adverbio.
  • Complementos del Verbo.
  • Demostrativos.
  • Determinantes.
  • Locuciones Adverbiales.
  • Números Enteros.
  • Números Fraccionarios (sin terminar).
  • Números Reales.
  • Números Romanos.
  • Posesivos.
  • Pronombres.

A fecha de hoy es capaz de almacenar todos estos tipos de cadenas. Ahora estamos con los Naturales, Ordinales, fraccionarios y multiplicativos.

Código fuente. Corresponde al archivo GR18&11&11.zip

Como podréis ver, no tiene que ver nada con lo anterior.

Un saludo. 

jueves, 13 de octubre de 2011

Reconocimiento de nuevos tipos.

Hasta ahora reconocía artículos, pronombres, adverbios, verbos y sustantivos. A raiz de los recusos gramaticales que se indicaron en un post anterior, hemos revisado los tipos ya programados y los hemos modificado sustancialmente. Ahora además de reconocer los adverbios simples, reconoce los compuestos como son los terminados en mente o los que están formados por más de una palabra. Se les ha añadido una propiedad, en la versión anterior, todo se basaba en palabras. Ahora se basa en cadenas, parece lo mismo, pero no lo es: "123" no es una palabra, pero si es un cadena de texto (Número Entero). "un perro" no es una palabra, pero también es una cadena de texto (Sintagma Nominal). La propiedad añadida es 'función', es decir un mismo adverbio por ejemplo, puede 'funcionar' como determinante en unos casos o como pronombre en otros casos. Como dice el título de post reconoce nuevos tipos:

  • Enteros: "123" (+- 9 trillones)
  • Reales: "123.123"
  • Romanos: "XI" (desde 1 hasta 9 trillones)

Y otros que no los reconoce aún, pero que son funcones que realizan otros tipos como:
  • Complementos del verbo.
  • Complementos del adjetivo.
  • Complementos del adverbio.
Poco a poco toma forma!!!

Cambio en la estructura de datos.

Viendo la cantidad de consultas a distintas listas nos hemos visto obligados a cambiar la estructura de datos para hacerlo más eficiente. Ahora, en una misma búsqueda, sabemos de qué tipo se trata. Seguimos teniendo las mismas listas a modo de compatibilidad con la versión anterior, pero en realidad no se guardan los datos en la lista en sí, sino que se guardan en una estructura de arbol (más o menos, ya que está más elavorada) común para todas las listas. Los resultados obtenidos son muy buenos, tanto en velocidad como en memoria.

sábado, 1 de octubre de 2011

Recursos gramaticales


Como ya tenemos nuestros años, no resulta tan inmediato el acordarse de todas las reglas gramaticales, morfología, sintaxis, etc.

Hemos buscado por la red y hemos encontrado unos recursos muy valiosos. Explican muy bien lo que son los artículos, sustantivos, adjetivos... y sus funciones.

viernes, 30 de septiembre de 2011

Seguimos avanzando

Buenas tardes,

y seguimos trabajando. Hace tiempo que no publicamos nada, pero eso no significa que el proyecto esté paralizado. Al contrario, ha sufrido unos cambios muy importantes:


  • Representación por Html:
Antes se mostraban todos los datos por consola y para una gran cantidad de palabras resultaba muy engorroso. Ahora, con la ayuda del lenguaje html, podemos visualizar en cualquier navegador, cualquier tipo de palabra y oración (por ahora). 

Este es un ejemplo:

Como se puede ver, muestra las características de la palabra 'amabas' en un simple vistazo. Sirve de gran ayuda cuando queremos saber si por ejemplo, se ha sabido reconocer una forma verbal ya que además de guardarse en su archivo 'VERBO.dat', lo hace en su correspondiente html. 

Por ahora sólo se guardan los verbos y las oraciones.

  • Reconocimiento de 'verbos':
Ya era capaz de reconocer verbos en su forma simple, pero ¿qué pasaba con sus formas compuestas? como por ejemplo 'he ido'? Pues nos daba como resultado dos verbos: 1º he (de haber) y 2º ido (de ir). Pues es capaz de saber que se trata de 'he ido' (de ir).

Y más complejo aún, ¿qué pasa con 'he amado amando'?, veamos:


  • Reconocimiento de 'sustantivos':
Como prometía, es capaz de conectarse a la red para averiguar si una palabra es un sustantivo. No están aún definidas todas las propiedades de un sustantivo pero es capaz de encontrarlo directamente poniéndolo en plural. 

He incluso, si por las reglas generales se espera que sea una palabra masculina, por ejemplo, y al consultar resulta ser femenina, se añade directamente a las excepciones de género (aunque no las guarda aún). ¿Qué pasa si busco 'abogada'?, en el diccionario vendrá en masculino y aún no está programado para que lo haga, por lo que supongo que no lo encontrará. Pero sí lo hará con 'mariposa'.

Atención con la frase 'he ido y el cura nos casa en su casa'. ¿'cura','casa'? ¿me cura o es un cura?, ¿nos casa de casar o casa de vivienda? ¿verbo o sustantivo?... pues las dos posibilidades. Ya más adelante se encargará de saber en qué caso es cada uno:


Las palabras que faltan son porque aún no las reconoce. Como se puede ver, cada palabra tiene un enlace a su correspondiente html en el que deberían mostrarse sus características. Digo debería, porque sólo funciona para los verbos hasta ahora.

Insistimos en que todo es automático. La aplicación no pregunta nada al usuario. Se busca la vida consultando a la red de redes. Al principio puede resultar lento ya que hace muchísimas consultas a Internet, pero como lo va almacenando y con el comando #save lo guarda en disco, esas búsquedas no las realizará de nuevo, siendo inmediata el acceso a esa información.

Poco a poco va tomando forma. Volvemos a invitaros a colaborar con el proyecto. Vuestras ideas son bien recibidas.

Código fuente:
GR

miércoles, 25 de mayo de 2011

Consulta al diccionario online de kalipedia

Ya empieza a tener forma la clase kalipedia. Se conecta a la web, hace la consulta y empieza a interpretar la información:

    - Una palabra puede tener más de una definición, pues es capaz de identificar cada una de las definiciones.
    - Para cada definición averigua si se trata de un Sustantivo, Adjetivo, Verbo, Preposición, Locución, etc.
    - Aún falta por reconocer los géneros y números. Pero ya queda menos.

domingo, 22 de mayo de 2011

Problema con la interpretación del html

Al intentar leer las páginas de www.kalipedia.com no las devuelve en código html simple, quiero decir, no es tan inmediato obtener la información. La complejidad que le hemos encontrado es tal, que casi se trata de hacer un navegador para decodificarlo, o por lo menos al nivel que tenemos.

La solución más inmediata ha sido que la aplicación genera un archivo sh. Simplemente es un comando de consola de linux que se conecta a la página, hace la consulta y devuelve en forma de String toda la información.

Pegas:
    - Necesita de la aplicación html2text de Linux.
    - Ahora sólo corre la aplicación para Linux.

Este es el script:

#!/bin/bash
curl -s \"http://www.kalipedia.com/diccionarios/lengua-espanola/$1\" | html2text

Si a alguien se le ocurre algo, estamos abiertos a cualquier sugerencia!!!

Seguimos avanzando!!

Aunque sea fin de semana, seguimos trabajando, a menor ritmo claro.

La aplicación, dada una palabra, es capaz de hacer una consulta a www.kalipedia.com e informarse de qué tipo se trata: sustantivo, adjetivo, infinitivo, etc.

Por ahora, las consultas son muy restrictivas, deben de ser en singular y en masculino. En este sólo nos interesa el tipo y no la o las definiciones que pueda tener.
Estas restricciones tienen fácil solución o por lo menos para la mayoría de las palabras ya que es casi inmediato saber el masculino de una palabra o el singular, salvo excepciones que deberán ser manejadas con cuidado.

Vamos paso a paso y haciendo bien las cosas.

viernes, 20 de mayo de 2011

Arreglado!!!

Juer que susto!!

Despues de luchar para reparar Windows, opté por formatear y reinstalar. Pero como me esperaba, seguía mal funcionando el teclado. Instalé ccleaner, igual... y buscando actualizaciones para la bios, leo por ahí que tras la actualización, se debe desconectar de la corriente y quitarle la batería unos 20 segundos. Pienso, que no tendría que tener ninguna lógica ya que la bios sigue alimentada con una pila de botón, pero no pierdo nada.

Pues sorpresa!! ha funcionado!! como digo, no le veo la lógica. Que me lo expliquen!! jejejejeje

Ahora toca rescatar Suse en el menú del inicial (ese que da elegir entre windows y linux) ya que linux está intacto y seguimos con el programita.

¿Atacado por un Craker?¿Un virus?



Ayer empecé a notar que el portátil no respondía correctamente. Tengo Windows 7 y OpenSuse 11.4. Normalmente trabajo en Linux. Noté que las teclas Fn y Ctrl se habían alternado, al igual que Ins y Supr. e incluso que ya no funcionaba el click directamente sobre el touchpad. Pensé se habrá cambiado la distribución del teclado. Compruebo la distribución... está OK. Reinicio y sigue igual. ¿Y en Windows?
sorpresa!!! tampoco funciona!!! reinicio Windows. Fallo en windows, inicia la autoreparación. No consigue reparar. Windows muerto.

A través de SystemRescueCD rescato la aplicación y compruebo... tampoco funciona el teclado ni el touchpad del portátil. Supongo que será cosa de la BIOS.

Mal rollo. OKIBN0508 es mi computadora, por si alguien me echa una mano.

Solucionado el problema de las tildes en los verbos

Efectivamente!!! Como anunciamos ayer, el problema de las tildes estaba en la clase wordreference.

Cuando en InputStreamReader se le indicaba la forma de interpretar el contenido. Inicialmente estaba en 'ISO-8859-1', se ha cambiado a UTF-8 y ahora todo perfecto!.


Para más información de los InputStreamReader: 
http://download.oracle.com/javase/1.4.2/docs/api/java/io/InputStreamReader.html

y para los estándares:  
http://download.oracle.com/javase/1.4.2/docs/api/java/nio/charset/Charset.html

jueves, 19 de mayo de 2011

Corrigiendo algunos fallos

Nos hemos dado cuenta que no se guardaban bien el género y el número de las palabras. Ya está corregido.

Y el fallo de los acentos, se cree que es en la clase wordreference, puesto que los sustantivos acentuados se guardan y leen correctamente, por lo tanto debe de ser cuando son conjugados los verbos obteniendo la información de www.wordreference.com. Mañana intentaremos que se quede listo.

Se está añadiendo el comando #listar, que despliega un menú preguntando que estructura se desea mostrar en pantalla. De esa manera se pretende saber qué palabras hay en memoria, si sus propiedades son las correctas, etc.

JavaDoc se sigue lógicamente desarrollando, pero aún no está a la par con el resto del código.

miércoles, 18 de mayo de 2011

Modificación de las estructuras y nombre de algunos paquetes



Hemos modificado la estructura y nombre de los paquetes. Al empezar a documentar, nos hemos dado cuenta que no estaba bien estructurado. Esperamos que ahora sea más fácil de encontrar las clases. Se ha seguido documentando.

Código fuente



Me he decidido por colgar el código que llevamos hasta ahora. Es poca cosa y aún casi sin JavaDoc, pero por si alguien quiere empezar a verlo.

Espero que sepan ser responsables con el código.

Generando el JavaDoc

Siempre me ha dado pereza lo de ir comentando el código, pero como espero que este código sea leído por más gente, me estoy entreteniendo en ir realizando el JavaDoc. En cuanto lo tenga listo del código que llevamos hasta ahora, lo cuelgo.

martes, 17 de mayo de 2011

Presentaión del Proyecto

¡Qué cabeza tengo! Normalmente se empieza por la presentación del proyecto, no directamente a saco con el diccionario online, jejeje. Pues ahí va:

Puede sonar a ciencia ficción, pero siempre me ha llamado la atención el cómo una máquina podría llegar razonar. Resalto lo de RAZONAR. Una máquina hace lo que se le ha enseñado. Pero ¿podría aprender sola? ¿podría hacer una traducción por ejemplo y que no fuese palabra por palabra, como viene haciéndose, sino que tuviera en cuenta la escena y aplique una traducción u otra según el caso?

He visto muchas películas ¿eh?, sí, pero por algo hay que empezar. La base es reconocer el lenguaje del usuario. En este caso castellano. Luego ya después será todo lo demás. Pero para ahora está bien.

En el instituto la asignatura 'Lengua Castellana' me llevaba por el camino de la amargura. La dichosa sintaxis, análisis morfológico y tal y tal. ¡Y mira por donde ahora programando sobre ello! Me decía la profesora "no hay ningún programa que lo haga por tí, el castellano es tan complejo, se puede interpretar las palabras de tantas formas, que es imposible" ¿pero por qué no? Habrá que intentarlo.

El proyecto consta de varias fases:

- 1ª Fase: Identificar palabra por palabra que es: adverbio, verbo, sustantivo, etc. Saber su género, número, tiempo verbal si se trata de un verbo... Para ello se debe conectar a ciertos diccionarios online.

- 2ª Fase: Interpretar la información de la fase primera para realizar el análisis morfológico y sintáctico propiamente dicho.

- 3ª Fase: Representar los análisis al usuario de forma explicativa, razonada y de forma clara y fácil.

Lógicamente estas fases se dividirán en más, según se programe y se razone más profundamente.

Como es fácil de suponer, estamos en la fase 1ª. Tiene implementados los adverbios, pronombres (personales, demostrativos, posesivos, etc.), vagamente los sustantivos (aún no consulta a Internet y pregunta al usuario, si se trata de un sustantivo automáticamente sabe el género y el número, a no ser que se trate de alguna excepción o sustantivo propio) y los verbos. Ahora mismo, cuando en cuenta una palabra que no conoce realiza varias consultas a http://www.wordreference.com/ y si se trata de un verbo memoriza todo el verbo conjugado. El verbo no hace falta que esté en infitivo para realizar la consulta.

El siguiente punto a implementar es la consulta a Internet de las palabras desconocidas y no preguntar al usuario. Ya iremos comentando como va la cosa.

El que quiera saber más, para eso está este blog!! animarse!!

Otra cosa, se está desarrollando en java.

¿Qué diccionario online usar?

Lo más sencillo sería que cuando la aplicación se encontrase con una palabra que no reconozca sería preguntar al usuario de qué se trata, es decir, el usuario tendría que indicar si se trata de un verbo, adjetivo, sustantivo... masculino o femenino, etc. Un coñazo, no? y más si tenemos Internet!!!

En el punto actual de desarrollo, GR consulta a la página www.WordReference.com sobre las conjugaciones de los verbos. Esta página me pereció muy completa y de fácil lectura (sobre todo a la hora de programar su lectura, me refiero).

¿Y el resto de palabras? Inicialmente pensé en http://www.rae.es/ pero hasta a mí me cuesta entender a veces lo que dice, con tantas abreviaciones.

Me decanto por www.kalipedia.com, tiene una sección de diccionarios online muy interesante. La información la muestra de forma más fácil lectura.

Estamos abiertos a sugerencias!! si alguien se le ocurre otra, está a tiempo, antes de empezar a programar.

Welcome al Proyecto GR

Buenos días.

Siendo consciente de la herramienta que supone Internet para los programadores, hago uso de este blog para ir comentando el desarrollo del Proyecto GR.

El Proyecto GR se trata de una aplicación tiene como meta más inmediata, reconocer la gramática de la lengua española. Esa asignatura del instituto que tantos problemas me dio para aprobarla.

La aplicación está recién iniciada casi. Por lo que ahora es fácil engancharse por si algún desarrollador aburrido quiere interesarse.

Decir, que no se busca lucro. Si alguna vez llega a algo no se venderá.

En la actualidad somos dos en el Proyecto. Mi nombre es P.José S. Olmos, Olmos en el futuro, y mi compañero ... primero tengo que preguntar si quiere que se sepa su nombre o si prefiere ser el desarrollador anónimo jejeje.

Ya iré comentando lo que está ya programado, fases del desarrollo, problemas encontrados, cómo se resuelven y tal y tal.

Un saludo. Olmos