Generar una gramática

Estoy tratando de trabajar la teoría del
Procesamiento de lenguaje natural, explico un poco, estoy trabajando con java, la idea
del programa es que apoye al diagnóstico médico en una atención médica POR, se supone
que el médico ingresa los síntomas del paciente en lenguaje natural y los va separando
por "," (comas) Los síntomas los tengo almacenados en una tabla llamada SÍNTOMAS en
mi base de datos hecha en MySQL. Por ejemplo tengo almacenados:
Dolor de Cabeza - Náuseas - Jaqueca - etc. Entonces, ya tengo definidas las "palabras"
Que va a reconocer, pero como van separadas por "," (comas) debe haber un análisis léxico y sintáctico, y bueno, para que sea procesamiento de lenguaje natural debe también poseer el análisis semántico. Para estos análisis se supone que debe haber una gramática definida, pero no sé cómo hacer la lógica de esta gramática si ya tengo definidas en una base de datos las palabras que va a reconocer. Necesito ayuda y sugerencias, pues sé que hay formas más sencillas de trabajar este problema, como utilizar un listbox, pero si hago eso, estaría omitiendo lo que es el procesamiento de lenguaje natural y quiero saber si es posible definir algún tipo de gramática con las especificaciones que mencioné.

1 respuesta

Respuesta
1
Como mencionas efectivamente tienes que usar un analizador léxico y uno sintaticto, digamos algo así como el core de un compilador, hay varias implementaciones de analizadores léxicos y sintácticos pero creo que para lo que tu requieres es mejor que tu lo implementes (así tienes control total).
Si tu análisis nada más es sobre los síntomas (los que ya tienes en una tabla y son capturados como una sola cadena separada por comas) entonces el analizador léxico es bastante simple, usas un stringtokenizer y con el generas un objeto stack (pila) donde guardas todos los síntomas.
¿Ahora qué haces con estos síntomas?, ¿Tienes alguna otra tabla donde guardes que enfermedades presentan ciertos síntomas?, ¿O qué vas a sugerir al doctor?.
Si es muy bueno que tengas una gramática definida, pero a lo que he entendido de lo que quieres hacer creo que no es tan necesario que la tengas, pero esta ultima pregunta sobre que vas a hacer una vez que tienes los síntomas es muy importante para definir esto.
Tengo una tabla con los respectivos síntomas y sus códigos. También tengo una tabla con las enfermedades y sus códigos. Tengo otra tabla que las relaciona a ambas para así definir qué enfermedades tienen cuáles síntomas, por medio de sus códigos.
Luego tengo una tabla que guarda las búsquedas exitosas, a modo que sea un tipo de aprendizaje. Así consulta esta tabla antes de ir al grafo completo.
Bueno, la idea es que busque estos síntomas y entregue los posibles diagnósticos, por ejemplo, las 3 enfermedades que presenten la mayor cantidad de síntomas que fueron ingresados para la consulta. Y eso es todo. Ahora, como dato anexo, como algoritmo de búsqueda me baso en el de Colonia de Hormigas (ACO o SCH).
Bueno como realmente no vas a hacer un análisis gramatical profundo, puesto que vas a tomar los síntomas y vas a empezar a buscar enfermedades que contengan esos síntomas no requieres generar una gramática, si lo haces te puede servir, pero de menos para tu caso no es indispensable.
Aquí la idea es que llegues a tener una pila o un array con todos los síntomas ya validados (como te comente anteriormente puede ser con un stringtokenizer si es que todos los síntomas vienen separados por comas). Con ese listado de síntomas ahora si empezar a buscar enfermedades que los presenten.
En este caso el analizador léxico es muy importante ya que el sera que el provea bien o mal el listado de síntomas.
Hola, solamente me quedan 2 inquetudes espero que me la puedas responder
¿1º Cómo pasar la lista de síntomas de stringtokenizer a la pila?
2º Solamente haría un analizador léxico, ¿ni siquiera uno sintáctico?
Desde ya muchas gracias.
Para crear la pila es bastante simple, ya que creas el objeto StringTokenizer puedes hacer algo como esto:
Stack pila = new Stack();
while(st.hasMoreTokens()){
<span style="white-space: pre;"> </span>pila.push(st.nextToken());
}
El analizador sintáctico lo necesitarías en el caso de que en la parte de síntomas pudiera haber sentencias abiertas, es decir, si solo tienes, dolor abdominal, fiebre, etc, no requieres el análisis sintáctico ya que cada uno son síntomas directos, pero si por el contrario pudieras llegar a tener algo como, "dolor abdominal en la parte baja del abdomen al presionar fuertemente", en ese caso si necesitarías un análisis sintáctico y aquí si requieres de crear una gramática, puesto que si no lo haces seria casi imposible que pudieras analizar todo el lenguaje medico, a menos que lo que intentes sea realizar un sistema experto que digamos seria otro nivel de dificultad.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas