CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 26 Sep 2018 00:32

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 8 mensajes ] 
Autor Mensaje
NotaPublicado: 27 Ago 2009 13:15 
Desconectado
Guionista
Guionista
Avatar de Usuario

Registrado: 20 Ene 2007 20:09
Mensajes: 355
He estado buscando sobre este tema pero me da que es demasiado específico... no lo sé.

Tengo un lunar en la cara y otro en el brazo. Y aparte tengo una cara.

Cuando examino la cara (a secas) no quiero que me pregunte si me refiero a la cara(a secas) o al lunar en la cara, por lo que he definido un parse_name asociado al lunar para obligar a que el jugador empiece tecleando 'lunar':

Código:
Object lunarcara "lunar en la cara"
with
    parse_name [n;
      if (NextWord() ~= 'lunar') return 0;
      while (NextWord() == 'en' or 'la' or 'cara') n++;
      return n+1;
    ],
   ...


Hasta aquí va bien la cosa.

Sin embargo, si en el juego tecleo:
>examina lunar,
al haber dos posibles lunares, me responde lógicamente
"¿Cuál exactamente, el lunar en la cara o el lunar en el brazo?"
Si le respondo
>cara
Me dice que: "Intenta de nuevo, por que sólo te pude entender: examinar la cara".
¿Es que no se acuerda de que hablábamos del lunar? ¿Alguna solución?


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 28 Ago 2009 00:09 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 11:58
Mensajes: 1817
Ubicación: Madrid
Respecto al primer punto, veo innecesario el parsename que haces.
Basta con:

Código:
object cara "cara"
with name 'cara',
;

object lunar_cara "lunar de la cara"
with name 'lunar',
adjectives 'cara',
;



Así definido, EX CARA sólo puede referirse al objeto "cara", y EX LUNAR o EX LUNAR DE LA CARA sólo puede referirse al objeto "lunar_cara".

Respecto a lo segundo, es un efecto secundario del tipo de parseado que estás utilizando por defecto (que en mi opinión es el mejor, a pesar de la pega con la que te has topado)
Me refiero a:
tipo 1: las propiedades name y adjectives son equivalentes.
tipo2: la propiedad adjectives está subrogada a la propiedad name.

object extintor "extintor"
with name 'extintor',
adjectives 'rojo',
;

con el tipo 1 funcionaría tanto EX EXTINTOR, como EX ROJO, como EX EXTINTOR ROJO.

con el tipo 2 funcionaría sólo EX EXTINTOR o EX EXTINTOR ROJO, pero no EX ROJO.

Parece que estás usando el tipo 2, y el efecto secundario es que en las preguntas de desambiguación tampoco funciona simplemente decir "ROJO". Pues "ROJO" es el adjetivo y no va ninguna parte si no hay coincidencia previa en la propiedad name.


(también puede ser que estés usando el tipo 1 por defecto, pero en ese parsename que haces estás forzando el tipo 2 para ese objeto concreto)

Saludos

_________________
_/ /\ R e \_


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 28 Ago 2009 07:22 
Desconectado
Guionista
Guionista
Avatar de Usuario

Registrado: 20 Ene 2007 20:09
Mensajes: 355
Muchas gracias por tu respuesta Jarel.

jarel escribió:
Respecto al primer punto, veo innecesario el parsename que haces.
Basta con:

Ah, ¿pero hay un "adjectives"? Yo lo ponía todo en el name. ¿Esto no existe en la version inglesa no?

Citar:
tipo 1: las propiedades name y adjectives son equivalentes.
tipo2: la propiedad adjectives está subrogada a la propiedad name.

object extintor "extintor"
with name 'extintor',
adjectives 'rojo',
;


Lo siento, no entiendo la diferencia :( , ¿que es eso de subrogar,es poner los adjetivos tambien en el name, como se hace según el DM4?

Citar:
Parece que estás usando el tipo 2, y el efecto secundario es que en las preguntas de desambiguación tampoco funciona simplemente decir "ROJO". Pues "ROJO" es el adjetivo y no va ninguna parte si no hay coincidencia previa en la propiedad name.

Pues no sé si lo he hecho con el tipo 1 o 2, pero ahora al utilizar el adjectives va todo perfectamente, y al preguntarme a que lunar me refiero entiende perfectamente si le respondo "cara" (que lo he definido como adjetivo).

Muchas gracias!


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 28 Ago 2009 10:24 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 04 Sep 2008 17:23
Mensajes: 720
Hola! Estaba ojeandoel hilo y me ha surgido la duda: ¿Cómo se puede
cambiar el tipo de parseado en una aventura?


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 28 Ago 2009 15:00 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 11:58
Mensajes: 1817
Ubicación: Madrid
Makinaimo escribió:
Hola! Estaba ojeandoel hilo y me ha surgido la duda: ¿Cómo se puede
cambiar el tipo de parseado en una aventura?


Suponiendo que tengas el tipo 2, para usar el tipo 1 simplemente no uses la propiedad adjectives, mete todo el vocabulario en name.

Si tienes el tipo 1... sólo puedes usar el tipo 1.

Pero hacer la prueba es fácil:
Con un objeto con name 'mesa' y adjectives 'madera'
Si EX MADERA funciona como "examinar mesa" tienes el tipo1, si no, el tipo 2

Para cambiar el que tengas por defecto, busca dentro de los ficheros de la librería la función [ ParseNoun.
Ésta es la que se encarga de dar puntuaciones al vocabulario.

Por ejemplo, yo la tengo modificada así:
[spoiler]
[ ParseNoun obj n dudas seguir gen p aux m a nf nm nfp nmp;



n=0; ! numero de palabras reconocidas de momento
m=0; ! numero de nombres reconocidos de momento
a=0; ! numero de adjetivos reconocidos
nf=0; ! cuento nombre femeninos reconocidos
nm=0; ! cuento nombres masculinos reconocidos
nmp=0; ! ...masculinos plural
nfp=0; ! ...femeninos plural
seguir=1; ! seguir mirando palabras para ver si las siguientes
! se refieren a este mismo objeto


aux=aux;
#ifdef DEBUG;
aux=debug_flag;
debug_flag=0; ! Desactivar trazado de give (para no cansar con tanto 'nombreusado' cambiando continuamente)
#endif;
! #ifndef NI_BUILD_COUNT;
give obj ~nombreusado; ! resetear nombreusado (quitar nombreusado)
gen=5; ! 1=masculino, 2=femenino,
! 3=masculino plural, 4= femenino plural
! 5=sin determinar



while(seguir)
{
p=NextWord();
if ((p=='de')&&(n==0)) return 0;

! if (WordInProperty(p, obj, name))
! ! Una palabra que se refiere al objeto
! {
! n++; ! la contamos
! n=n+dudas; ! añadimos todos los "de" "la"...
! ! que estaban sin contar
! dudas=0; ! y resetamos el contador de "de"s
! continue; ! volvemos al while
! }
if (WordInProperty(p, obj, name_f))
! Una palabra que se refiere al objeto
{
if (p) dict_flags_of_noun = (p->#dict_par1) & $$01110100;
if (gen==5) gen=G_FEMENINO;
n++; ! la contamos
m++;nf++; ! LDAP contamos nombre
n=n+dudas; ! añadimos todos los "de" "la"...
! que estaban sin contar
dudas=0; ! y resetamos el contador de "de"s
! print " --> es ahora femenino...." ; !infsp debug
continue; ! volvemos al while
}
if (WordInProperty(p, obj, name_mp))
! Una palabra que se refiere al objeto
{
if (p) dict_flags_of_noun = (p->#dict_par1) & $$01110100;
if (gen==5) gen=G_MASCULINO+G_PLURAL;
n++; ! la contamos
m++; nmp++; ! LDAP contamos nombre
n=n+dudas; ! añadimos todos los "de" "la"...
! que estaban sin contar
dudas=0; ! y resetamos el contador de "de"s
continue; ! volvemos al while
}
if (WordInProperty(p, obj, name_fp))
{
if (p) dict_flags_of_noun = (p->#dict_par1) & $$01110100;
if (gen==5) gen=G_FEMENINO+G_PLURAL;
n++; ! la contamos
m++; nfp++; ! LDAP contamos nombre
n=n+dudas; ! añadimos todos los "de" "la"...
! que estaban sin contar
dudas=0; ! y resetamos el contador de "de"s
continue; ! volvemos al while
}
! [I7] se cambio de lugar este if para buscar el name_m (o name)
! en ultimo lugar, debido a una interferencia q provoca la asignacion 'automatica' de
! plural en los objetos I7
if (WordInProperty(p, obj, name_m))
! Una palabra que se refiere al objeto
{
if (p) dict_flags_of_noun = (p->#dict_par1) & $$01110100;
if (gen==5) gen=G_MASCULINO;
n++; ! la contamos
m++; nm++; ! LDAP contamos nombre
n=n+dudas; ! añadimos todos los "de" "la"...
! que estaban sin contar
dudas=0; ! y resetamos el contador de "de"s
! print " --> es ahora masculino...." ; !infsp debug
continue; ! volvemos al while
}
if (WordInProperty(p, obj, adjectives))
{
if (p) dict_flags_of_noun = (p->#dict_par1) & $$01110100;
n++; ! la contamos
a++; ! contamos un adjetivo
n=n+dudas; ! añadimos todos los "de" "la"...
! que estaban sin contar
dudas=0; ! y resetamos el contador de "de"s
continue; ! volvemos al while
}

! Si la palabra no fue reconocida, miraremos si se trata
! de 'de' o un artículo. En este caso mantenemos la duda y
! seguimos mirando palabras, hasta que una de ellas encaje
! en este objeto, en cuyo caso se retornan todas las que se
! han leido, o bien se encuentre una que no encaja en cuyo
! caso se retorna las que se habían encontrado antes del "de"

else
if (p== 'el' or 'la' or 'los' or 'las' or 'de' )
{
dudas++; continue;
}


else seguir=0; ! Si no fue reconocida, ni un articulo, ni "de"
! nos damos por vencidos
}! while block

if (obj provides gender)
switch(gen)
{ ! Los casos del switch estaban mal.
! Bug corregido en 001030
1: give obj ~female ~pluralname; !infsp fix for I7 compatibility (en I7 no se puede asignar el 0 a gender, de 1 para arriba, sí)
2: give obj female ~pluralname;!print " FEMALE GIVEN "; !infsp debug
3: give obj ~female pluralname;
4: give obj female pluralname;
}
if (gen<5) give obj nombreusado;


#ifdef DEBUG;
debug_flag=aux;
#endif;


if(m==0)return 0;
return n;

];
[/spoiler]

Saludos

_________________
_/ /\ R e \_


Última edición por jarel el 28 Ago 2009 15:18, editado 1 vez en total

Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 28 Ago 2009 15:16 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 11:58
Mensajes: 1817
Ubicación: Madrid
mastodon escribió:
Lo siento, no entiendo la diferencia :( , ¿que es eso de subrogar,es poner los adjetivos tambien en el name, como se hace según el DM4?

Pues no sé si lo he hecho con el tipo 1 o 2, pero ahora al utilizar el adjectives va todo perfectamente, y al preguntarme a que lunar me refiero entiende perfectamente si le respondo "cara" (que lo he definido como adjetivo).

Muchas gracias!


Pues si te funciona así, perfecto.

Respecto a lo de subrogar, me temo que he usado una palabra incorrecta para lo que quería expresar XD. Quería decir que así los adjectives están subordinados a los name. Si el parser no encuentra ningún name, pasa de los adjectives. Si encuentra al menos un name, utiliza los adjectives para desambiguar o confirmar que efectivamente es ese objeto y no otro con igual name.

Los adjetives subordinados al name son también muy útiles para meter frases subordinadas que definan a un objeto, y que el parser lo entienda. Por ejemplo.
Tenemos un objeto que es "La corona que perteneció al Rey Cucufato"

Código:
object corona "corona"
with name 'corona',
adjectives 'que' 'pertenecio' 'rey' 'al' 'cucufato' 'antigua',
;


De este modo el parser no entiende COGER CUCUFATO, pero sí entiende tanto COGER CORONA, como COGER LA CORONA QUE PERTENECIÓ AL REY CUCUFATO, COGER LA CORONA DEL REY, COGER LA ANTIGUA CORONA DE CUCUFATO... etc

No es normal que el jugador escriba frases tan largas, pero podría darse el caso.

Saludos

_________________
_/ /\ R e \_


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 28 Ago 2009 15:50 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 04 Sep 2008 17:23
Mensajes: 720
jarel escribió:
Para cambiar el que tengas por defecto, busca dentro de los ficheros de la librería la función [ ParseNoun.
Ésta es la que se encarga de dar puntuaciones al vocabulario.


Vaya, tenía la esperanza de que bastase simplemente con declarar alguna variable
en el código de la aventura, pero gracias por pasar la función modificada, Jarel.
Aparentemente funciona a la perfección.

Ahora la rutina ParseNoun y el uso de los atributos 'name' y 'adjectives' parece
tener mucho más sentido. ¿Cómo es que INFSP no incluye este tipo de parseado
por defecto?

Un saludo!


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 29 Ago 2009 03:09 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 11:58
Mensajes: 1817
Ubicación: Madrid
Makinaimo escribió:
jarel escribió:
Para cambiar el que tengas por defecto, busca dentro de los ficheros de la librería la función [ ParseNoun.
Ésta es la que se encarga de dar puntuaciones al vocabulario.


Vaya, tenía la esperanza de que bastase simplemente con declarar alguna variable
en el código de la aventura, pero gracias por pasar la función modificada, Jarel.
Aparentemente funciona a la perfección.

Ahora la rutina ParseNoun y el uso de los atributos 'name' y 'adjectives' parece
tener mucho más sentido.

Un saludo!


Mejor bájate este archivo de extensiones
http://www.caad.es/informate/infsp/down ... siones.rar
y busca dentro el fichero intnombre.h, donde viene el código más limpio con la opción de cambiar entre modos de parseado con una variable, tal como esperabas ;)

Makinaimo escribió:
¿Cómo es que INFSP no incluye este tipo de parseado
por defecto?

Porque hay gente que prefiere el otro tipo.

Saludos

_________________
_/ /\ R e \_


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 8 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 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