CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 26 Abr 2018 20:30

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 13 mensajes ] 
Autor Mensaje
NotaPublicado: 28 Ene 2011 11:54 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
>Coge escudo y espada

¿Ahí también interviene el parser robusto?

Es que he quitado al verbo "coger" de los deducibles porque es uno que se usa mucho y es fácil que tarde o temprano se escriba mal. El caso es que al recuperar la partida me he dado cuenta de que todo era un caos desde esa orden, ya que cogía el escudo pero no la espada.

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


Arriba
 Perfil  
 
NotaPublicado: 28 Ene 2011 12:01 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5289
Ubicación: Coruña
Sí, claro que interviene. Esa orden se divide en "coger escudo" por un lado, y "espada" por otro lado; es lo mismo que poner "coger escudo" y luego "y ahora la espada" o algo así. Si desactivas la adivinación para el verbo coger, el parser no entiende esa mención a la espada sin verbo. Es de lo que va el sistema de parsing robusto, precisamente, está ahí para que ese tipo de cosas funcionen (entre otras).

Veo que no has hecho caso al criterio que te dije para discriminar entre qué verbos poner en esa lista y cuáles no. "Coger" no puede crear situaciones raras con el parsing robusto porque ni se usa como intransitivo, ni acepta entradas arbitrarias. Por lo tanto, no tiene sentido excluirlo. Además, lo que dices de que un verbo se va a escribir con erratas muchas veces no es un criterio muy útil, porque en realidad el verbo que se adivina no es el que se escribe con errata, sino el anterior. O sea, si yo pongo "estornudar" y luego "cgoer la espada", el problema es que se adivine "estornudar" para la segunda orden, y ese "estornudar" es el verbo que habría que poner en la lista de no adivinables, y no "coger" que es el que se escribió mal. Si lo escribieron mal no vas a conseguir que se interprete bien, lo único que puedes conseguir es que no sucedan efectos raros y eso se consigue excluyendo los verbos que pueden causar tales efectos, que son los que son intransitivos o los que aceptan entradas arbitrarias.

Si haces caso al criterio que puse en su momento, no deberías tener ningún problema con ningún verbo.

_________________
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: 28 Ene 2011 12:08 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
Además, lo que dices de que un verbo se va a escribir con erratas muchas veces no es un criterio muy útil, porque en realidad el verbo que se adivina no es el que se escribe con errata, sino el anterior. O sea, si yo pongo "estornudar" y luego "cgoer la espada", el problema es que se adivine "estornudar" para la segunda orden, y ese "estornudar" es el verbo que habría que poner en la lista de no adivinables, y no "coger" que es el que se escribió mal. Si lo escribieron mal no vas a conseguir que se interprete bien, lo único que puedes conseguir es que no sucedan efectos raros y eso se consigue excluyendo los verbos que pueden causar tales efectos, que son los que son intransitivos o los que aceptan entradas arbitrarias..



Cierto, no había caído en que la respuesta es con carácter retroactivo. :roll:
La verdad es que hasta ahora no había puesto ningún verbo unguesseable, lo que ocurre es que acabo de tener un problema con un "coger" mal escrito y lo primero que me ha venido a la cabeza ha sido eso.

Miraré esa lista de intransitivos que hice. :)

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


Arriba
 Perfil  
 
NotaPublicado: 28 Ene 2011 12:17 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5289
Ubicación: Coruña
Como ya te dije en ese hilo al que no haces caso :lol: ni siquiera necesitas mirar la lista global de intransitivos. Con mirar qué verbos definidos en tu aventura tienen esas características que digo ahí, ya está. Para los verbos que no tienen ningún comportamiento definido en tu aventura, tampoco tiene sentido ponerlos en la lista de "unguessable" porque el resultado cuando se adivine un verbo así va a ser "No entiendo", con lo cual tampoco provocará efectos raros con el parsing robusto.

_________________
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: 28 Ene 2011 12:22 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
Como ya te dije en ese hilo al que no haces caso :lol: ni siquiera necesitas mirar la lista global de intransitivos. Con mirar qué verbos definidos en tu aventura tienen esas características que digo ahí, ya está.


Pero así tengo la lista hecha para mi siguiente aventura. :D

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


Arriba
 Perfil  
 
NotaPublicado: 28 Ene 2011 12:24 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5289
Ubicación: Coruña
jenesis escribió:
Pero así tengo la lista hecha para mi siguiente aventura. :D

En tu siguiente aventura la lista puede ser distinta, porque a lo mejor en una aventura "estornudar" está definido de forma que admite entradas arbitrarias y en otra no. O verbos definidos como transitivos en una aventura pueden estarlo como intransitivos en otra.

Pero bueno, ya veo que no me vas a hacer caso, así que qué le vamos a hacer :(

_________________
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: 28 Ene 2011 13:20 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
jenesis escribió:
Pero así tengo la lista hecha para mi siguiente aventura. :D

En tu siguiente aventura la lista puede ser distinta, porque a lo mejor en una aventura "estornudar" está definido de forma que admite entradas arbitrarias y en otra no. O verbos definidos como transitivos en una aventura pueden estarlo como intransitivos en otra.

Pero bueno, ya veo que no me vas a hacer caso, así que qué le vamos a hacer :(


Pues es que no sé Al-K ya llevo unos cuantos posts sobre este tema en los que no me entero muy bien de lo que dices.
Hablas de que el problema se reduce a los verbos intransitivos, y lo cierto es que no lo termino de entender.

A mí lo único que me preocupa de todo esto es que el jugador escriba mal un verbo y que el sistema realice una acción inesperada. Y eso puede suceder con cualquier verbo, sea intransitivo o no.

>Coge la raqueta
Coges la raqueta

>gopea la pelota
Coges la pelota

Eso es lo único que me molesta del parser robusto, y eso no me lo soluciona meter los intransitivos de mi aventura en esa lista de no deducibles, para empezar porque coger es transitivo.

Yo creo que no hemos de terminado de entendernos el uno al otro. :(

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


Arriba
 Perfil  
 
NotaPublicado: 28 Ene 2011 13:45 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5289
Ubicación: Coruña
Bueno, pero en tal caso haber empezado por ahí.

Te habría explicado que ese caso límite no hay ninguna forma de resolverlo de momento sin perder el parsing robusto.

O sea, como tú dices, o bien tienes "coger" como adivinable y eso coge la pelota, o bien tienes "coger" como no adivinable y entonces eso no coge la pelota; pero no puedes hacer "coger la espada y el escudo".

Pero es que no sé si te acuerdas que hace algún tiempo te dije: a ver, tener el parser en estado "ideal" todavía tardará, porque hay mejoras por hacer (corrección automática, etc.); pero tú búscame ejemplos prácticos reales de los problemas urgentes que te da el parser en las aventuras, e intentaré hacer las mejoras que los arreglen. Tú buscaste esos ejemplos y eran todos casos o bien con pronombres, o bien con verbos intransitivos de entrada arbitraria; con lo cual concluí que ésos eran los problemas que salían en los testeos reales y por lo tanto eran los prioritarios. La solución de la lista de adivinables es para solucionar esos casos, nunca pretendió ser para solucionar otros casos que no se dieron en los testeos ni ser la última mejora del parser porque siempre he dicho que está pendiente lo de la detección y corrección de errores. Eso es en lo que habíamos quedado, o al menos lo que yo entendí.

Casos como el que has puesto sólo se podrán tratar bien cuando haya un corrector basado en distancias para los verbos, que es algo que tengo pensado meter para la 1.1, pero aún llevará su tiempo.

_________________
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: 28 Ene 2011 20:43 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5289
Ubicación: Coruña
Acabo de programar un corrector automático de verbos y ponerlo en AGE. Corrige los verbos mal escritos que se parezcan a uno bien escrito (que se obtengan insertando una letra, borrándola, cambiándola por otra, o cambiar de orden dos letras contiguas). Por ejemplo, cgoer -> coger, deear -> dejar, mir -> mira, etc.

Al ser hecho en un rato, no es una implementación muy currada, sino básica y preliminar. Esto quiere decir por un lado que no está todo lo optimizada que debería estar (bueno, consumirá un par de megas de memoria, que tampoco es una catástrofe) y también que no tiene criterio para seleccionar verbos más/menos frecuentes, por ejemplo si uno pone "miar" tal vez podría elegir "mear" en vez de "mirar" (en realidad esto no pasa en ese ejemplo, selecciona "mirar"; pero en algún caso teóricamente sí podría suceder).

Por estas limitaciones, pero sobre todo porque tal vez tenga algún bug que otro al estar recién hecha y necesitaría bastantes pruebas, no te recomendaría que uses esto de momento en tu aventura; pero simplemente que sepas que está ahí. Y en la siguiente versión de AGE estará activado por defecto a no ser que se ponga la propiedad "noVerbSpellChecking" del jugador a true, esa propiedad lo desactiva.

Cuando esté bien pulida, resolverá el problema que has puesto en este hilo (es muy posible e incluso probable que tal como está ahora mismo ya lo resuelva en gran medida; pero no me atrevo a afirmar nada sin testear bien, porque no es cosa de que luego haya bugs o limitaciones serias que no he pensado).

_________________
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: 28 Ene 2011 20:50 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 23 Mar 2010 20:11
Mensajes: 1141
Ubicación: Valencia
Supongo que no, pero si te sirve de algo yo implementé el algoritmo de Damerau-Levensthein en Java para Vampiro. Está bastante optimizado (al menos para lo que yo lo necesitaba, claro... jejejeje)

_________________
El humor existe para recordarnos que por muy alto que sea el trono en el que uno se siente, todo el mundo usa su culo para sentarse.


Arriba
 Perfil  
 
NotaPublicado: 28 Ene 2011 22:25 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5289
Ubicación: Coruña
joruiru escribió:
Supongo que no, pero si te sirve de algo yo implementé el algoritmo de Damerau-Levensthein en Java para Vampiro. Está bastante optimizado (al menos para lo que yo lo necesitaba, claro... jejejeje)

Lo mío también se basa en la distancia de Levenshtein-Damerau. Pero no implementa el algoritmo clásico para calcular la distancia porque sería bastante costoso en tiempo de CPU hacer eso cada vez, ya que AGE tiene una lista de verbos con más de 4000 formas verbales con las que habría que calcular esa distancia (y que puede ampliarse aún más en el futuro). Así que en lugar de eso, lo que hago es procesar una vez, al principio, esa lista y generar, para cada palabra, todos los posibles borrados, transposiciones, inserciones de un comodín (el carácter '?') y sustituciones de una letra por un comodín ('?'); y los meto en una tabla hash. Después, dada una palabra, genero asimismo todos los borrados, transposiciones, inserciones de '?' y sustituciones de '?', y las busco en el hash. De esta forma, si llamamos w a la longitud de la palabra y d a la del diccionario, obtengo un tiempo en O(w) en lugar de O(d*w) que es el que se obtiene aplicando el algoritmo clásico sin más. Pero a cambio, el diccionario me ocupa O(d*w_media) en memoria en lugar de O(d) que ocuparía de la otra manera, porque necesito almacenar O(w) versiones de cada palabra en lugar de una.

¿Cómo es tu implementación?

_________________
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: 28 Ene 2011 22:59 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 23 Mar 2010 20:11
Mensajes: 1141
Ubicación: Valencia
Lo mío es una clase java con un método public static que dadas 2 palabras devuelve la distancia entre ellas, con el algoritmo clásico de rellenar una matrix de l1*l2, siendo l1 y l2 la longitud de cada palabra.

La optimización la hacía fuera del cálculo de la distancia... Al igual que tú, permitía una distancia de 1, pero en vez de procesar todo el diccionario, sólo procesaba las palabras del con una longitud +-1 con respecto a la palabra que estaba tratando, que son las únicas candidatas a tener una distancia de 1. El coste en tiempo sería O(d) + O(d'*w), siendo d' el tamaño del diccionario filtrado. A cambio, el espacio sería O(d'_media), pero sólo se ocupa en el momento de la búsqueda.

_________________
El humor existe para recordarnos que por muy alto que sea el trono en el que uno se siente, todo el mundo usa su culo para sentarse.


Arriba
 Perfil  
 
NotaPublicado: 28 Ene 2011 23:45 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5289
Ubicación: Coruña
Yo creo que de momento prefiero gastar la memoria a gastar la CPU, dado que mi diccionario es bastante grande; aunque si cambio de idea ya te diré, gracias :)

_________________
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  [ 13 mensajes ] 

Todos los horarios son UTC + 1 hora


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado


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:  
cron
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpBB-Es.COM