CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 17 Oct 2018 19:47

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 73 mensajes ]  Ir a página 1, 2, 3, 4, 5  Siguiente
Autor Mensaje
NotaPublicado: 14 Ene 2011 23:25 
Desconectado
Implementador
Implementador

Registrado: 13 Feb 2005 18:57
Mensajes: 1863
Buenas

Últimamente hemos ido perfilando unas ideas, a raiz de lo de pAGEyna, que han desembocado en un nuevo proyecto.

Por favor... echad un vistazo a

http://pyphiverses.org/blog/20110114-00 ... ctiva.html

Éste es el hilo para su discusión.

dddddd.-


Arriba
 Perfil  
 
NotaPublicado: 14 Ene 2011 23:34 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 24 Dic 2010 14:37
Mensajes: 910
dddddd escribió:
Buenas

Últimamente hemos ido perfilando unas ideas, a raiz de lo de pAGEyna, que han desembocado en un nuevo proyecto.

Por favor... echad un vistazo a

http://pyphiverses.org/blog/20110114-00 ... ctiva.html

Éste es el hilo para su discusión.

dddddd.-


Interesante, aunque la parte más importante siempre es el parser y la definición de sintaxis (o lo que sea que tengáis planteado para tratar el input). Tratándose de un proyecto Python y dado los implicados imagino que ya habéis considerado el IDE gráfico a lo PAPAITO con capacidad de incremento de funcionalidad con paquetes/modulos/plugins...


Arriba
 Perfil  
 
NotaPublicado: 14 Ene 2011 23:51 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5304
Ubicación: Coruña
Johan Paz escribió:
Interesante, aunque la parte más importante siempre es el parser y la definición de sintaxis (o lo que sea que tengáis planteado para tratar el input).

Pues yo diría por mi experiencia que el parser representa algo así como el 1% del trabajo que da crear un sistema de éstos. Mucho más difícil es diseñar e implementar un buen modelo de mundo, y crear la arquitectura genérica para multijugador, etc.

Además, el parser tiene la ventaja de que si el sistema está bien diseñado, puede ser un módulo bastante independiente, con bajo acoplamiento con el resto del sistema. Si el modelo de mundo es bueno y la infraestructura del sistema funciona bien, y el parser es muy malo, ya se le pondrá uno bueno después.

_________________
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: 14 Ene 2011 23:53 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 24 Ago 2007 00:41
Mensajes: 2023
Ubicación: Chile
Al-Khwarizmi escribió:
Johan Paz escribió:
Interesante, aunque la parte más importante siempre es el parser y la definición de sintaxis (o lo que sea que tengáis planteado para tratar el input).

Pues yo diría por mi experiencia que el parser representa algo así como el 1% del trabajo que da crear un sistema de éstos. Mucho más difícil es diseñar e implementar un buen modelo de mundo, y crear la arquitectura genérica para multijugador, etc.

Además, el parser tiene la ventaja de que si el sistema está bien diseñado, puede ser un módulo bastante independiente, con bajo acoplamiento con el resto del sistema. Si el modelo de mundo es bueno y la infraestructura del sistema funciona bien, y el parser es muy malo, ya se le pondrá uno bueno después.


Totalmente de acuerdo.

_________________
Eliuk Blau
eliukblau (AT) gmail.com
http://www.caad.es/eliukblau/


Arriba
 Perfil  
 
NotaPublicado: 15 Ene 2011 19:53 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 24 Dic 2010 14:37
Mensajes: 910
Oca.

Si así es como lo veis entonces ha dejado de parecerme interesante el proyecto. :)

Creo que será una potencialmente interesante herramienta para la creación de MUDs, pero no para ficción interactiva. En ficción interactiva el problema principal es la particularización, no la generalidad. Un sistema tan potente de 'capas' como el que proponéis es por lo general innecesario, sin embargo la facilidad para añadir comportamientos particulares en determinados contextos lo es todo. Un ejemplo: el tratamiento por defecto esperable a día de hoy de un 'contenedor' es que se puede ver el interior sea posible 'coger' lo de dentro sin complicar más al usuario, como en:

Código:
>> ex caja
Es la misteriosa caja transparente con la vela del destino en su interior. Su centelleante cerradura parece desafiante.

>> i
Llevas:
     muchas cosas
     la llave misteriosa de cristal

>> coger vela del destino
Usas la llave misteriosa en la cerradura de la caja.
Abres la caja.
Coger la vela del destino.


Sin embargo con un ligero cambio de la situación este comportamiento es inválido.

Código:
>> ex caja
Es la misteriosa caja transparente del fin del mundo con la vela del destino en su interior. Su centelleante cerradura parece desafiante. Sobre la tapa puede leerse 'Si abres esta caja el mundo será destruido'.

>> i
Llevas:
     muchas cosas
     la llave misteriosa de cristal

>> coger vela del destino
Usas la llave misteriosa en la cerradura de la caja.
Abres la caja.
El mundo, tal y como lo conocíamos, concluye en ese instante.


El modelo de mundo base es útil, como no, pero lo más importante es la facilidad para tratar las particularidades de cada historia. Esta capacidad debe estar además en el lenguaje en sí, no en el lenguaje subyacente. Si para 'extender' el modelo (o las primitivas del lenguaje) hay que recurrir a un lenguaje extra (como pasa por ejemplo en Superglus en el que tienes que recurrir a glulx, o a veces en I7 en el que tienes que recurrir a I6), tienes un problema porque un no-programador (o un seudo-programador, o simplemente un programador que no conozca el lenguaje subyacente -y no digo uno como yo al que algo como Python le parece una chapuza de lenguaje-) que se decida a usar el entorno tendrá que aprender no un lenguaje, sino dos, con doble esfuerzo de aprendizaje.

Pero la cosa es que en estos últimos 20 años los avances en la flexibilización del modelo del mundo y su facilidad de extensión han sido impresionantes. La distancia entre la expresividad y control del funcionamiento del mundo entre el PAWS/Superglus (en el que básicamente el modelo del mundo es casi inexistente y hay que ligar las particularidades al tratamiento de cada verbo) hasta la finura del mecanismo de libros de reglas, en particular la gestión de 'actividades' de I7 es simplemente abismal.

Sin embargo en donde se ha avanzado muy poco es en la contextualización del parseado. El mecanismo más potente actualmente disponible es el Understand...when... de I7, ya que permite establecer gramáticas que sólo serán consideradas bajo 'determinadas circunstancias'. Si el sistema que proponéis no incluye al menos eso (acompañado con alguna herramienta potente de desambiguación, preferiblemente mejor que el 'Does the player mean...' de I7), entonces creo que será algo sordo para los cánones actuales. Y para disponer un mecanismo del tipo 'Understand...when...', el parseado creo que tiene que estar fuertemente imbricado con el modelo del mundo concreto de la historia, ya que la parte del 'when' siempre será dependiente de la particularidades de la historia. Así que el parser no puede ser '[...] un módulo bastante independiente, con bajo acoplamiento con el resto del sistema [...]'.


Arriba
 Perfil  
 
NotaPublicado: 15 Ene 2011 20:09 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5304
Ubicación: Coruña
Johan Paz escribió:
Sin embargo en donde se ha avanzado muy poco es en la contextualización del parseado. El mecanismo más potente actualmente disponible es el Understand...when... de I7, ya que permite establecer gramáticas que sólo serán consideradas bajo 'determinadas circunstancias'. Si el sistema que proponéis no incluye al menos eso (acompañado con alguna herramienta potente de desambiguación, preferiblemente mejor que el 'Does the player mean...' de I7), entonces creo que será algo sordo para los cánones actuales. Y para disponer un mecanismo del tipo 'Understand...when...', el parseado creo que tiene que estar fuertemente imbricado con el modelo del mundo concreto de la historia, ya que la parte del 'when' siempre será dependiente de la particularidades de la historia. Así que el parser no puede ser '[...] un módulo bastante independiente, con bajo acoplamiento con el resto del sistema [...]'.


Ambas cosas no son incompatibles. Tú puedes tener un parser totalmente independiente, podría ser un parser estadístico que te has comprado y que ni siquiera sabe lo que es una aventura.

A ese parser lo llamas desde un determinado contexto de tu aventura, y te devuelve un árbol sintáctico. Después, con ese árbol sintáctico tu aventura hace lo que quiera, que por supuesto pueden ser cosas que dependan del contexto.

De hecho, en el propio ejemplo que has puesto la sintaxis de la oración es la misma, lo que cambia es el comportamiento que provoca en el mundo. Tú llamarías al parser, éste te devolvería que "coger" es un verbo, "la llave del destino" un objeto directo, su núcleo "llave", "la" un determinante y el resto un modificador; y con eso tomarías en un caso una decisión y en otro la otra.

Tal vez es que no estemos entendiendo exactamente lo mismo por "parser", yo entiendo el analizador sintáctico pelado. Las acciones y comportamientos que se definan para mí no están dentro del parser, sino del modelo de mundo.

P.D: El AGE permite que el parsing cambie según las circunstancias desde mucho antes que saliera I7.

_________________
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: 15 Ene 2011 20:36 
Desconectado
Implementador
Implementador

Registrado: 13 Feb 2005 18:57
Mensajes: 1863
Johan, interesante reflexión, gracias. Ilustra varios de los problemas que se pretenden solucionar.

Unas puntualizaciones rápidas.

La personalización y modularización es una parte integral del concepto del sistema. Hay capas por encima y por debajo. Algunas partes se extenderán programando, otras con IDEs, que aparecerán en los estadios avanzados del proyecto, ojalá. Código en los objetos es otra posibilidad más de personalización. La programación es inevitable en la mayoria de las situaciones no-obvias.

El parser y el modelo del mundo no vienen impuestos... hay que ir creandolos sobre el sistema. Cuantos más "plugins" se añadan al sistema, más alternativas. Si una no agrada, no se usa, o se modifica.

dddddd.-


Última edición por dddddd el 29 Ene 2011 15:05, editado 1 vez en total

Arriba
 Perfil  
 
NotaPublicado: 15 Ene 2011 21:13 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 24 Ago 2007 00:41
Mensajes: 2023
Ubicación: Chile
Al-Khwarizmi escribió:
P.D: El AGE permite que el parsing cambie según las circunstancias desde mucho antes que saliera I7.


La verdad es que I7 trae cero novedades. Es cierto que trae muchas cosas útiles y en cierto grado sencillas de utilizar, pero ninguna es novedad. Nada que no se haya conseguido mucho antes (descartando, por supuesto, lo complejo o poco complejo que pudiera llegar a ser conseguirlo).

_________________
Eliuk Blau
eliukblau (AT) gmail.com
http://www.caad.es/eliukblau/


Arriba
 Perfil  
 
NotaPublicado: 15 Ene 2011 21:51 
Desconectado
Implementador
Implementador

Registrado: 13 Feb 2005 18:57
Mensajes: 1863
Eliuk Blau escribió:
Nada que no se haya conseguido mucho antes (descartando, por supuesto, lo complejo o poco complejo que pudiera llegar a ser conseguirlo).


Muy parecido a lo que pretendemos nosotros, ciertamente. No creo que vayamos a inventar nada... Ojalá (de nuevo).


Arriba
 Perfil  
 
NotaPublicado: 15 Ene 2011 23:58 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 24 Dic 2010 14:37
Mensajes: 910
Eliuk Blau escribió:
Al-Khwarizmi escribió:
P.D: El AGE permite que el parsing cambie según las circunstancias desde mucho antes que saliera I7.


La verdad es que I7 trae cero novedades. Es cierto que trae muchas cosas útiles y en cierto grado sencillas de utilizar, pero ninguna es novedad. Nada que no se haya conseguido mucho antes (descartando, por supuesto, lo complejo o poco complejo que pudiera llegar a ser conseguirlo).


:D

Bueno, vale. Pero hacer lo mismo que el Understand...when... con I6, era bastante infernal y con los PAWS era demencial.

Y Al-K, la solución de 'parseado' de AGE, simplemente no me acaba de convencer, la verdad. Y, no, yo no entiendo como 'parser' la parte de hacer el análisis sintáctico, gramatical o como quieras, sino la parte de ir desde el input del usuario hasta el código a ejecutar en tu particularización del modelo del mundo.

En PAWS/Superglus es con estos pasos:

- Separación del input en verbos, adjetivos, etc...
- Ejecución del proceso-switch 0 y ejecución de aquellas entradas que coinciden con los valores concretos de verbo, adjetivo, etc...

En CAECHO? era casi igual:

- Invocación por parte del programador de PARSE desde un buffer escogido manualmente (así podían darse muchos comandos a multiples PNJs a la vez que iban leyendo de sus bufferes separados).
- Separación del input en verbos, adjetivos, etc...
- Reordenación de los sintagmas mediante la priorización basada en preposiciones.
- Ejecución del proceso escogido por el progamador, donde habría switch, condicionales, etc...

En los Inform sería:

- Algunas traducciones previas (lo que permite cosas como suprimir letras acentuadas y demás).
- Secuencialmente se intenta ajustar el input a los patrones de la gramática.
- Se 'decide' la acción a ejecutar según el primer patrón de gramática encontrado.
- Se 'ejecuta' la acción, y enlazada al flujo de esta acción es donde está el código del programador.

Con I7, se simplifica considerablemente la ordenación de los patrones de gramática y se facilita mucho la aplicabilidad de los patrones de gramática según el contexto.

Personalmente siempre he creído que la forma de Inform es más cómoda, pero que en sería necesario disponer en español de una sintaxis no estricta basada en el análisis previo de verbo y sintagmas, como hacía CAECHO? o los PAWS que permita escribir tanto 'saca la espada del cofre' como 'saca del cofre la espada' sin que el programador tenga que preocuparse por ello, algo que permita la definición de la gramática así:

Understand "V-Sacar" "SN-Thing" "de SN-Thing" as removing it from.

De forma que Sacar esté definido como un conjunto de sinónimos arbitrarios de verbos (o bien un objeto que contiene la definición del verbo) y SN-Thing sería cualquier forma posible de sintagma nominal que pueda 'encajar' con una definición de algo de la clase 'Thing'. Con una definición así de las gramáticas podría hacerse encajar muchas cosas, con facilidad. Añadiendo a estas definiciones la parte del 'when' tendríamos un capacidad de gramática más cercana a las necesidades de los tiempos que corren y algo parecido a las capacidades que he deseado durante años.


Arriba
 Perfil  
 
NotaPublicado: 16 Ene 2011 15:16 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Pues os deseo suerte en este nuevo proyecto.
Y ya sabéis que podéis contar conmigo para lo que haga falta, sobre todo si necesitáis que alguien os vuelva locos, soy la betatester perfecta. :lol:

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


Arriba
 Perfil  
 
NotaPublicado: 16 Ene 2011 15:33 
Desconectado
Implementador
Implementador

Registrado: 13 Feb 2005 18:57
Mensajes: 1863
jenesis escribió:
Pues os deseo suerte en este nuevo proyecto.
Y ya sabéis que podéis contar conmigo para lo que haga falta, sobre todo si necesitáis que alguien os vuelva locos, soy la betatester perfecta. :lol:


Muchas gracias, por tus deseos y el ofrecimiento.

Entre broma y no broma, y para que no seas solo tú misma la que lo dice... es cierto, tu capacidad de análisis y profundización en los detalles, asi como el manejo de varios sistemas operativos y de autoria te conceden el estatus de probadora perfecta. En cuanto haya algo que merezca la pena ser probado serás la primera en saberlo.

dddddd.-


Arriba
 Perfil  
 
NotaPublicado: 16 Ene 2011 15:42 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5304
Ubicación: Coruña
Johan Paz escribió:
Y, no, yo no entiendo como 'parser' la parte de hacer el análisis sintáctico, gramatical o como quieras, sino la parte de ir desde el input del usuario hasta el código a ejecutar en tu particularización del modelo del mundo.

OK, entonces con tu definición de parser, no opino que el parser sea un asunto de poca importancia. Porque lo del código a ejecutar, para mí, es parte del modelo de mundo.

De todas formas, que conste que un parser siempre ha sido un analizador sintáctico, que devuelve un árbol sintáctico, sin más.

http://es.wikipedia.org/wiki/Parser

Y el modelo de AGE es precisamente lo que has dicho que te gustaría. O sea, los pasos que has descrito para Inform tal cual, pero con parsing no estricto. La única diferencia es que no se usa una gramática como tal. Cosa que para mi gusto es mejor, porque precisamente permite profundizar en la contextualización (que el parser en sí funcione de una manera u otra en función del contexto/objetos que haya, en vez de tener un conjunto de reglas gramaticales fijas y luego definir las respuesta a ellas en los objetos).

_________________
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: 16 Ene 2011 16:12 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 24 Dic 2010 14:37
Mensajes: 910
Bueno, entonces entiendo que consideras que código como este:

Código:
void parseCommand ( Mobile aCreature , String verb , String args )
{
  if ( equals(verb,"saludar") )
  {
    int veces = 0;
    while ( veces < 5 )
    {
      aCreature.write("Hola\n");
      veces++;
    }   
    end();
  }
}


..es la mejor manera de tratar la conexión entre el input del usuario y el código a ejecutar. Si es así, no tengo mucho que aportar. Por que ya aporté en su momento:

Código:
\BLO
BLOQUE [6] entiende()
{   CUAL 1;                    /: Objeto actual en bandera 0:/
    [...]
    COPI 0 crEXITO;            /: Inicialmente, no hay problemas :/
    HAZ [crVERBO]              /: Analizamos qu‚ podemos hacer :/
      {
        Coger: { obj_entiende crEXITO; }  /: Coger un objeto :/
        Dejar: { obj_entiende crEXITO; }  /: Dejar un objeto :/
        Meter: { obj_entiende crEXITO;}   /: Meter crOBJETO en crSEGOBJ :/
        Sacar: { obj_entiende crEXITO;}   /: Sacar crOBJETO de crSEGOBJ :/
        Poner: { obj_entiende crEXITO;}   /: Poner un objeto :/
        Quitar:{ obj_entiende crEXITO;}   /: Quitar un objeto :/
        Ex   : { examina crEXITO; }       /: Examinar objetos y muebles :/
        [...]


y, sinceramente, no veo casi ningún avance entre esta antigualla y la aproximación del AGE.


Arriba
 Perfil  
 
NotaPublicado: 16 Ene 2011 16:26 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5304
Ubicación: Coruña
En AGE, si tienes un caballo, puedes definir el resultado de "montar a caballo" en el propio caballo. No hace falta una gramática global de la aventura que te diga que el verbo "montar" se aplica a un objeto (o a un PSI). Si tú tienes una aventura donde no has definido nada de nada para "montar" y copias y pegas mi caballo en ella, podrás montar a caballo. Los verbos se definen en los objetos.

Del mismo modo, puedes hacer que los verbos se comporten de forma diferente según la habitación en la que estés, según el jugador que controles, etc.

Por lo que sé, en Inform pre-7 todo esto no es posible de una forma sencilla. En Inform 7 por lo visto sí, al menos hasta cierto punto. Pero es lo que dije antes: la aproximación de AGE permite contextualizar los verbos, pero además permite parsing no estricto. Así pues, no sé si incluye grandes avances o pequeños avances (eso es muy subjetivo) pero entiendo que incluye las cosas que tú has dicho que querías, tal como he dicho.

_________________
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  [ 73 mensajes ]  Ir a página 1, 2, 3, 4, 5  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 4 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