CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 12 Ago 2020 22:57

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 21 mensajes ]  Ir a página 1, 2  Siguiente
Autor Mensaje
NotaPublicado: 05 May 2010 09:39 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Age trata sin problema las formas verbales reflexivasm así que todo acción que termina en "te", se proyecta sobre el personaje jugador.

¿Qué ocurre con las que acaban en "le" ?
Dale
Dile
Ponle
Abrele
Cogele
Hazle
...
¿Hay algún modo de poder usarlas del mismo modo que se hace con las que acaban en "te"?

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 05 May 2010 10:19 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
Esto es repe. Buf, estoy orgulloso, por una vez (después de media hora, eso sí) he sido capaz de encontrar un post anterior del foro: viewtopic.php?f=18&t=3107

El "le" en el idioma castellano es un poco de lío porque no significa siempre lo mismo, en ese post propusisteis una solución pero aún está pendiente (requiere bastante código ad hoc).

Es que es un tema con su complejidad porque claro, la solución que dijisteis es "que no se sustituya si en el comando hay un PSI, y que sí se sustituya si no lo hay". Pero tal como está hecho el parser del AGE, un comando puede ser ambiguo y referirse a varias cosas (puede haber un PSI que se llame igual que una cosa, o puede haber un comando referido a "todo" que afecte a un PSI, y tal). Con lo cual no vale hacer esa sustitución cuando se hacen las demás, habría que hacerla en el momento en que se resuelven las entidades, y posiblemente hacer varias sustituciones. Todavía no me he puesto a pensar cómo resolver bien este problema para que quede bien resuelto y no dé más follón del que resuelva. De hecho, todavía no he descartado la posibilidad de que sea mejor pasarle la pelota al programador de aventuras y que defina él cómo se comporta cada verbo. Porque claro, también incluso hay casos donde el que haya un PSI o no no te indica nada:

> escupirle a todo
> gritarle a la montaña
> arreglarle la rueda al coche

En casos como éstos, incluso la solución que decíais de mirar si hay un PSI, que a simple vista parece buena, crearía el Caos.

Lo dicho, seguiré comiéndome la cabeza pero al final no sé si habrá una solución general desde AGE o si habrá que dar soluciones parciales en forma de alias para algunos verbos en el verbos.lan, y que luego cada cual se defina su comportamiento para sus propios verbos (no es lo mismo "arreglarle" que "enviarle").

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 05 May 2010 10:38 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
Esto es repe. Buf, estoy orgulloso, por una vez (después de media hora, eso sí) he sido capaz de encontrar un post anterior del foro: viewtopic.php?f=18&t=3107


Bufff... de hace un año !!!
Envidio tu memoria, yo ni me acordaba. :oops:

Citar:
> escupirle a todo
> gritarle a la montaña
> arreglarle la rueda al coche
> dale la medicina al enfermo
> ábrele la puerta al prisionero
> quítale el arma al orco


Citar:
> escupir a todo
> gritar a la montaña
> arreglar la rueda al coche
> dar la medicina al enfermo
> abrir la puerta al prisionero
> quitar el arma al orco


¿Y no se podría convertir todas esas acciones al infinitivo desde verbos. lan ?

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 05 May 2010 10:45 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
jenesis escribió:
¿Y no se podría convertir todas esas acciones al infinitivo desde verbos. lan ?


Sí que se puede, pero el problema es que entonces te pierdes los casos donde el "le" realmente significa algo, como

Código:
> atacar a Jorge
> escupirle


o

Código:
> mirar el coche
> arreglarle la rueda


o

Código:
> mira al enfermo
> dale la medicina


El problema es que el "le" en castellano a veces es un enfatizador, pero a veces es realmente un pronombre que sustituye a algo. El meollo está en distinguir cuándo es un caso y cuándo es el otro.

Otra posible solución que se me está ocurriendo es que en un primer parseado del comando, el "le" se elimine, y si con eso no tenemos éxito, en el modo "second chance" (ver última sección de http://www.caad.es/aetheria/doc/doku.ph ... rsecommand) se pruebe a sustituir el "le". Igual eso podría dar buenos resultados, aunque tengo que pensar si me dejo algún caso, porque con esto del "le" nunca se puede estar muy seguro.

¿Cómo resuelven otros sistemas el tema del "le", si lo resuelven?

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 21 Jul 2010 11:11 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Buff... vuelvo a tener problemas con este tema.

>m
Después de la batalla los muertos y heridos son innumerables.
Junto al río puedes ver a tu capitán herido por espada, la herida está manchada de barro y no deja ver su gravedad.

>Limpiale la herida al capitán
El capitán yace herido junto al río.

>limpiale la herida
El capitán yace herido junto al río.

Me tendrás que decir cómo se desactiva el parser robusto.

.

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 21 Jul 2010 11:19 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
He estado haciendo pruebas y ahora mismo no entiende cosas como:

>mirar al capitan
El capitán yace herido junto al río.

>limpiale la herida
El capitán yace herido junto al río.

¿No se implementó al final el "le", del mismo modo que el "te" ?

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 21 Jul 2010 11:21 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
El problema que acabas de decir NO se soluciona para nada desactivando el parser robusto. Se soluciona tratando el verbo "límpiale" (ya que como hemos dicho, el pronombre "le" no lo sustituye AGE, con lo cual "límpiale" pasaría a los parseCommand como verbo).

Si desactivas el parser robusto, lo que conseguirías es que en lugar de mostrarse la descripción (que de todas formas tampoco saldrá cuando esté hecho lo de los intransitivos), el parser muestre "No entiendo...", pero no que realmente el personaje le limpie la herida al capitán, cosa que se hace tratando el verbo.

Dicho esto, para desactivar el parser robusto pondrías en el preprocessCommand:

Código:
String preprocessCommand ( Player jugador , String entrada )
{
  StringTokenizer st = new StringTokenizer(entrada);
  String primeraPalabra = st.nextToken();
  if ( !world.getLanguage().isVerb(primeraPalabra) )
  {
     jugador.writeError("No entiendo...\n");
     end();
  }
}


Pero para eso funcione tengo que subir primero una revisión que tenga resuelto el Issue #92, que está arreglado en la versión del repositorio; pero no en el último paquete de distribución que hice que es el que tú tienes.

Por cierto, ¿tu aventura va a tener una licencia libre?

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 21 Jul 2010 11:26 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
Hum... pero si hemos hablado ya cuatro o cinco veces del "le" largo y tendido... y la última es... ¡en este mismo hilo! :lol: :lol: :lol:

No, no lo he implementado porque como digo, no se me ocurre ningún modo fiable de hacerlo que no sea usando análisis sintáctico estadístico serio o técnicas de IA. El problema es que el "le" en castellano puede significar un montón de cosas dependiendo del contexto, y si lo tratas siempre igual, siempre la vas a fastidiar en algunos casos. Así que creo que lo mejor es que lo trate el programador de aventuras.

Más arriba en este hilo he preguntado cómo se trata esto en otros sistemas, por si había alguna idea genial por ahí para tratarlo; pero nadie me ha respondido. Si se me ocurre o alguien me dice una forma buena de tratarlo, por supuesto la implementaré; pero de momento no sé si tal cosa existe siquiera.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 21 Jul 2010 11:32 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
El problema que acabas de decir NO se soluciona para nada desactivando el parser robusto. Se soluciona tratando el verbo "límpiale" (ya que como hemos dicho, el pronombre "le" no lo sustituye AGE, con lo cual "límpiale" pasaría a los parseCommand como verbo).

Si desactivas el parser robusto, lo que conseguirías es que en lugar de mostrarse la descripción (que de todas formas tampoco saldrá cuando esté hecho lo de los intransitivos), el parser muestre "No entiendo...", pero no que realmente el personaje le limpie la herida al capitán, cosa que se hace tratando el verbo.

Lo cierto es que creía que el tratamiento del "le" ya estaba implementado y que al no encontrar ningún psi anteriormente citado, saltaba el parser robusto.
Ya veo que si salta es porque no entiende el verbo en absoluto, y ya he caído en la cuenta de que de haberlo entendido la respuesta habría sido otra.

Al-Khwarizmi escribió:
Pero para eso funcione tengo que subir primero una revisión que tenga resuelto el Issue #92, que está arreglado en la versión del repositorio; pero no en el último paquete de distribución que hice que es el que tú tienes.

Vale, puedo esperar hasta después de vacaciones y si estuviera publicada la nueva versión, decidir si me convence o no.

Al-Khwarizmi escribió:
Por cierto, ¿tu aventura va a tener una licencia libre?


Creative Commons, seguramente la artística, pero aún lo tengo que decidir.
¿Por qué lo preguntas?

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 21 Jul 2010 11:34 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
Hum... pero si hemos hablado ya cuatro o cinco veces del "le" largo y tendido... y la última es... ¡en este mismo hilo! :lol: :lol: :lol:


Joe... ya me conoces...

Citar:
No, no lo he implementado porque como digo, no se me ocurre ningún modo fiable de hacerlo que no sea usando análisis sintáctico estadístico serio o técnicas de IA. El problema es que el "le" en castellano puede significar un montón de cosas dependiendo del contexto, y si lo tratas siempre igual, siempre la vas a fastidiar en algunos casos. Así que creo que lo mejor es que lo trate el programador de aventuras.

Más arriba en este hilo he preguntado cómo se trata esto en otros sistemas, por si había alguna idea genial por ahí para tratarlo; pero nadie me ha respondido.


En ese caso le daré mi propia solución y si me convence te la mostraré para ver si te convence a ti también. :)

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 21 Jul 2010 11:35 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
jenesis escribió:
En ese caso le daré mi propia solución y si me convence te la mostraré para ver si te convence a ti también. :)

Sí, por supuesto. El motivo de que no haya dado una implementación para el "le" es simplemente que no se me ocurre ninguna buena. Así que si veo una buena, la implementaré.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 21 Jul 2010 11:46 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
jenesis escribió:
Al-Khwarizmi escribió:
Creative Commons, seguramente la artística, pero aún lo tengo que decidir.
¿Por qué lo preguntas?

Pues porque si al final decides desactivar el parser robusto, tendré que sacar un fork que lo tenga activado :D


Vale, entiendo tu postura porque yo también lo había pensado... :roll:
No es justo que una aventura hecha con AGE no se atenga a la filosofía de AGE.

Pero... imagina que en vez de desactivar el parser robusto hago un if del modo...

if(!args.contains(verb))
o
if(equals(verb,""))

Y ahí meto el modo en el que quiero tratar esos casos...
¿También crearías un fork?

PD: Arreglado, ya no necesito que desactives el parser robusto ;)

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 21 Jul 2010 12:12 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
Perdona, antes cuando te respondí a lo de la licencia volví a darle a "editar" en vez de a "citar" sin querer, he restaurado tu mensaje anterior.

Y que una aventura hecha en AGE no se atenga a la filosofía de AGE no es que no sea justo, la aventura se tiene que atener a la filosofía de su autor, no le "debe" nada al sistema... pero yo podría sacar un fork con mi propia filosofía si creo que es mejor, es lo bonito del software libre :)

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 21 Jul 2010 12:15 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
Perdona, antes cuando te respondí a lo de la licencia volví a darle a "editar" en vez de a "citar" sin querer, he restaurado tu mensaje anterior.

Y que una aventura hecha en AGE no se atenga a la filosofía de AGE no es que no sea justo, la aventura se tiene que atener a la filosofía de su autor... pero yo podría sacar un fork con mi propia filosofía si creo que es mejor, es lo bonito del software libre :)


Pero mira el ejemplo que te he puesto, acabo de inutilizar el parser robusto con un simple "if" ¿cómo se puede sacar un fork de eso?

Yo te entiendo y si hace falta pondré en la documentación que esta aventura no está usando dicha feature, pero tienes que ponerte en situación de que no puedes hacer un "fork de filosofías", a no ser que hagas algo para que ese if nunca funcione.

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 21 Jul 2010 12:25 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
jenesis escribió:
Pero mira el ejemplo que te he puesto, acabo de inutilizar el parser robusto con un simple "if" ¿cómo se puede sacar un fork de eso?


Uhm, creo que me estás interpretando mal... ¡sacar un fork no quiere decir fastidiar tu código para que no funcione ni nada así! :D

Simplemente quiere decir sacar una versión modificada por uno. O sea, bajarse un programa de Menganito, cambiar lo que no te gusta, y sacar la "Programa de Menganito: Fulanito's Version". Luego la gente ya decidirá si prefiere bajarse la versión original o la Fulanito's Version, claro.

En este caso, mi versión sería como tu versión, pero sin ese if :D

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 21 mensajes ]  Ir a página 1, 2  Siguiente

Todos los horarios son UTC + 1 hora


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro

Buscar:
Saltar a:  
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpBB-Es.COM