Inform 6 : Parseur idiot

Pour discuter des langages que nous utilisons pour réaliser nos jeux : problèmes, solutions, suggestions...

Modérateurs: Stormi, Otto Grimwald

Messagepar Otto Grimwald le Jeu Nov 23, 2006 8:34 am

je vais regarder si je peux modifier mes bibliothèques avec cela. Cela ne touche que french.h c'est cela ?
Avatar de l’utilisateur
Otto Grimwald
Très Ancien
 
Messages: 3028
Inscription: Mar Aoû 24, 2004 12:02 pm

Messagepar Stormi le Jeu Nov 23, 2006 8:48 am

Oui cela ne touche que french.h

Cela tente de résoudre l'ambiguité entre "le/la/les" pronom et "le/la/les" article.

Je ne sais pas si cela résoud le problème de "ouvrir malle" => "je n'ai compris que: ouvrir julie" et le problème de "ouvrir le portail" => "Je n'ai compris que : ouvrir Galina" mais je serais intéressé si JB pouvait tester ces cas de figure, et également si d'autres peuvent tester sur leurs jeux voir s'ils remarquent des problèmes (ou simplement inspecter mon code pour remarquer de grosses bêtises que j'aurais pu faire).
Samuel V.
Avatar de l’utilisateur
Stormi
Grand Ancien
 
Messages: 1205
Inscription: Dim Avr 16, 2006 8:07 pm
Localisation: Lyon

Messagepar JL le Mer Nov 29, 2006 1:37 am

stormi a écrit:Voilà une correction imparfaite et un peu violente : j'ai tout simplement viré le la les de la définition des pronoms (j'ai remis -la, -les -le à la place).

D'abord (ligne 148 environ)
Code: Tout sélectionner
      ! Object pronouns
      '-le'    $$100000100000                    NULL
      '-la'    $$010000010000                    NULL
      '-les'   $$000110000110                    NULL
!      '-lui'   $$110000110000                    NULL
!      '-leur'  $$000110000110                    NULL   ! tirets enlevés
!      'le'    $$100000100000                    NULL   ! en espérant que l'article le/la/les ne vienne pas interférer
!      'la'    $$010000010000                    NULL   ! (Le parser a l'air de se débrouiller.)
!      'les'   $$000110000110                    NULL
      'lui'   $$110000110000                    NULL ! dans "donne-lui", "lui" est m ou f
      'leur'  $$000110000110                    NULL


Et plus loin (ligne 185 environ)
Code: Tout sélectionner
!      'son'    $$100000100000    POSSESS_PK      '-lui'
!      'sa'     $$010000010000    POSSESS_PK      '-lui'
!      'ses'    $$000110000110    POSSESS_PK      '-lui'
      'leur'   $$110000110000    POSSESS_PK      '-les'
      'leurs'  $$000110000110    POSSESS_PK      '-les'   ! tirets enlevés
      'son'    $$100000100000    POSSESS_PK      'lui'
      'sa'     $$010000010000    POSSESS_PK      'lui' !*! remplacer par "luy" ?
      'ses'    $$000110000110    POSSESS_PK      'lui' !*! 2e colonne : mettre m et f ?
!      'leur'   $$110000110000    POSSESS_PK      'les'
!      'leurs'  $$000110000110    POSSESS_PK      'les'


Grâce aux traitements de la fonction LanguageToInformese, une commande comme "le prendre" fonctionne toujours car transformée en "regarder lui".

En revanche "regarde-le" ne fonctionne pas encore. Il faudrait un traitement spécifique pour ces cas là.


Salut Stormi, et désolé de n'avoir pu répondre plus tôt. Tu es effectivement sur la bonne voie, et je signale que le commentaire angoissé (mais hélas prémonitoire) "tirets enlevés en espérant que l'article le/la/les ne vienne pas interférer" est très probablement de moi : dans les versions précédentes il y avait un tiret devant le/la/les. Je ne sais plus pourquoi exactement j'avais changé ceci mais c'est très probablement lié à l'usage d'autres formes que l'infinitif, des problèmes subtils apparaissant dans des expressions comme "donne-les" (ou, pire, "donne les") alors que "les donner" en posait moins.

Au fond, cet ajout des autres formes que l'infinitif apporte peu de bienfaits (ce n'est pas suffisant pour rendre le jeu attractif pour plus de monde), tout en ajoutant des bugs.
JL
Grand Ancien
 
Messages: 287
Inscription: Mer Aoû 25, 2004 9:13 pm

Messagepar Stormi le Mer Nov 29, 2006 8:58 am

JL a écrit:Salut Stormi, et désolé de n'avoir pu répondre plus tôt. Tu es effectivement sur la bonne voie, et je signale que le commentaire angoissé (mais hélas prémonitoire) "tirets enlevés en espérant que l'article le/la/les ne vienne pas interférer" est très probablement de moi : dans les versions précédentes il y avait un tiret devant le/la/les. Je ne sais plus pourquoi exactement j'avais changé ceci mais c'est très probablement lié à l'usage d'autres formes que l'infinitif, des problèmes subtils apparaissant dans des expressions comme "donne-les" (ou, pire, "donne les") alors que "les donner" en posait moins.

Au fond, cet ajout des autres formes que l'infinitif apporte peu de bienfaits (ce n'est pas suffisant pour rendre le jeu attractif pour plus de monde), tout en ajoutant des bugs.

J'avais en effet remarqué ce commentaire et il m'a d'ailleurs aidé à confirmer mon idée. Est-ce que tu as vu la suite des commentaires de ce fil, où j'ai atteint une solution presque acceptable en modifiant LanguageToInformese, à part sur un cas particulier ?

Au sujet des formes autres que l'infinitif, en les utilisant pour tester (notamment l'impératif 2e personne du singulier), je me suis surpris à apprécier la "pêche" que cela donne aux commandes :). Je ne pense pas que cela soit vraiment inutile, donc.
Par ailleurs, là où l'impératif serait vraiment nécessaire (2e personne siingulier surtout, mais aussi 2e pluriel parfois), c'est dans les ordres donnés aux personnages :

"> conducteur, sors" n'est pas reconnu alors que "> conducteur, sortir" l'est.
Ce n'est probablement pas simple à gérer, mais si quelqu'un a une piste...
Samuel V.
Avatar de l’utilisateur
Stormi
Grand Ancien
 
Messages: 1205
Inscription: Dim Avr 16, 2006 8:07 pm
Localisation: Lyon

Messagepar Otto Grimwald le Mer Nov 29, 2006 9:25 am

>demander au conducteur de sortir

;)
Avatar de l’utilisateur
Otto Grimwald
Très Ancien
 
Messages: 3028
Inscription: Mar Aoû 24, 2004 12:02 pm

Messagepar JL le Mer Nov 29, 2006 9:19 pm

(message en double ; voir le suivant)
Dernière édition par JL le Mer Nov 29, 2006 9:28 pm, édité 1 fois.
JL
Grand Ancien
 
Messages: 287
Inscription: Mer Aoû 25, 2004 9:13 pm

Messagepar JL le Mer Nov 29, 2006 9:19 pm

En fait voici un extrait de French.h de la dernière version, la version de travail 2.1.1 du 15 octobre 2004 avec "la gestion des pronoms améliorée" :

Code: Tout sélectionner
Array LanguagePronouns table

   !  word       possible GNAs                   connected
   !             to follow:                      to:
   !             a     i
   !             s  p  s  p
   !             mfnmfnmfnmfn                 

      ! Object pronouns
      '-le'    $$100000100000                    NULL
      '-la'    $$010000010000                    NULL
      '-les'   $$000110000110                    NULL
      '-lui'   $$110000110000                    NULL
      '-leur'  $$000110000110                    NULL   ! tirets remis
!      'le'    $$100000100000                    NULL   ! car l'article le/la/les vient parfois interférer
!      'la'    $$010000010000                    NULL   ! par exemple "mange la pomme" est compris comme "mange-la" si "pomme" est inconnu, d'où des messages d'erreur troublants pour le joueur
!      'les'   $$000110000110                    NULL
!      'lui'   $$110000110000                    NULL ! dans "donne-lui", "lui" est m ou f
!      'leur'  $$000110000110                    NULL


Le commentaire est : "tirets remis car l'article le/la/les vient parfois interférer ; par exemple "mange la pomme" est compris comme "mange-la" si "pomme" est inconnu, d'où des messages d'erreur troublants pour le joueur". Le bug n'existait donc peut-être déjà plus dans la version 2.1.1. Bizarre que je n'aie pas vu cela plus tôt, il doit y avoir un truc.

(sinon effectivement LanguageToInformese est l'autre passage où intervenir)
JL
Grand Ancien
 
Messages: 287
Inscription: Mer Aoû 25, 2004 9:13 pm

Messagepar Otto Grimwald le Jeu Nov 30, 2006 8:52 am

il faudrait donc réussi à mettre en commun ta version (non publiée) 2.1.1. et les améliorations de Stormi. Ensuite je pourrais reprendre cela pour le transformer en version compatible Inform 7.
Avatar de l’utilisateur
Otto Grimwald
Très Ancien
 
Messages: 3028
Inscription: Mar Aoû 24, 2004 12:02 pm

Messagepar Stormi le Jeu Nov 30, 2006 10:01 am

Otto Grimwald a écrit:il faudrait donc réussi à mettre en commun ta version (non publiée) 2.1.1. et les améliorations de Stormi. Ensuite je pourrais reprendre cela pour le transformer en version compatible Inform 7.

Il faudra d'abord améliorer mes améliorations :)
Samuel V.
Avatar de l’utilisateur
Stormi
Grand Ancien
 
Messages: 1205
Inscription: Dim Avr 16, 2006 8:07 pm
Localisation: Lyon

Messagepar JL le Jeu Nov 30, 2006 3:52 pm

En fait la version "de travail" 2.1.1, même si elle n'est pas publiée sur IF Archive, est disponible sur la page d'accueil de http://jlpo.free.fr ("news" du 15/10/04).

Donc effectivement il s'agit de comparer les deux versions qui sont certainement très proches.

Je me souviens d'avoir, dans le cas de l'impératif, imposé au joueur l'usage du tiret (sinon trop d'ambiguités à résoudre) sauf dans certains cas simples, non ambigus, qui sont l'occasion de conseiller au joueur d'employer les tirets les fois suivantes.

Ce qui manque plus ou moins, c'est un fichier de test (par exemple un fichier comme aventure.rec utilisant les cas souhaités), afin de vérifier que tout fonctionne à peu près aussi bien. J'avais essayé à une époque d'automatiser tant bien que mal ces tests, mais sur Windows aucun interpréteur ne permettait vraiment de maîtriser l'entrée et la sortie du programme. Je me contente donc de vérifier que le score maximal est atteint quand je lance manuellement le replay. En tout cas la mise au point de tests (de non régression ?) s'imposait pour limiter les bugs qui ont tendance à apparaître quand on en fait disparaitre d'autres. Inform 7 inclue d'ailleurs un outil de test (hélas difficile à séparer du reste) qui manquait cruellement jusque là, je trouve.

Bref, Stormi, si tu as ces modifications encore en tête, je t'invite (si le coeur t'en dit, bien sûr) à les comparer à celles de la version 2.1.1 (où une trentaine de lignes de code dans LanguageToInformese sont liées à cette histoire de tirets). Sinon je m'y plongerai un de ces jours (pas trop ces temps-ci, d'autant que d'ici un jour ou deux je serai de nouveau hors-ligne pendant plusieurs semaines). Sinon la 2.1.1 est disponible, donc, si quelqu'un veut s'en inspirer. (une autre version de travail (mais non-disponible) existe, mais ses modifications étaient vraiment minimes, contrairement à la version 2.1.1)
Dernière édition par JL le Jeu Nov 30, 2006 4:11 pm, édité 2 fois.
JL
Grand Ancien
 
Messages: 287
Inscription: Mer Aoû 25, 2004 9:13 pm

Messagepar Stormi le Jeu Nov 30, 2006 4:01 pm

JL a écrit:Bref, Stormi, si tu as ces modifications encore en tête, je t'invite (si le coeur t'en dit, bien sûr) à les comparer à celles de la version 2.1.1 (où une trentaine de lignes de code dans LanguageToInformese sont liées à cette histoire de tirets).

Oui je les ai en tête et un peu plus haut dans ce fil (c'est une forme d'archivage :)). Je vais donc regarder la version 2.1.1.
Samuel V.
Avatar de l’utilisateur
Stormi
Grand Ancien
 
Messages: 1205
Inscription: Dim Avr 16, 2006 8:07 pm
Localisation: Lyon

Messagepar Stormi le Ven Déc 01, 2006 12:59 pm

Alors, j'ai regardé, et en effet la version 2.1.1 améliore grandement la gestion des pronoms. Le diagnostic était le même (ambiguïté entre certains pronoms et articles), mais la solution de JL est bien plus élaborée que ma tentative.

J'ai testé un peu, et cela fonctionne bien. J'aurais simplement une modification à apporter à FrenchG.h :
- ajouter la grammaire "creature noun" et "noun creature" au verbe 'donner'. (sinon, on ne peut pas dire "lui donner le truc" ou "donne-lui le truc".

Il y a également une petite correction à apporter là :
Code: Tout sélectionner
   if ((NbMots()==3)&&(Mot(1)=='le'or'la'or'les'or'-le'or'-la'or'-les')&&(Mot(2)=='lui'or'leur')) { ! "donne le lui" ou "donne-le lui" devient "donne-le-lui"
      if (Mot(1)=='le'or'la'or'les') LTI_Insert(PositionMot(1), '-');
      LTI_Insert(PositionMot(2), '-');
      print "[Mettez toujours un trait d'union entre chaque pronom et le verbe à l'impératif !]^";
   }

Il faut rajouter un "Tokenise__(buffer,parse);" dans le premier if, sinon "donne la lui" est transformé en "donne -la- lui" au lieu de "donne -la -lui".

Par ailleurs, si les tests montrent que l'absence de tiret devant "le/la/les/lui..." ne pose pas de problème majeur, je suis pour les tolérer silencieusement, sans avertissement, ou au moins rendre l'avertissement plus sympa "Pour une meilleure compréhension de vos commandes, mettez un trait d'union entre chaque pronom et le verbe à l'impératif".


En revanche, il est impossible de taper "donne-le-lui" et d'être compris, car "le" et "lui" ont toujours la même valeur. Il n'y a pas vraiment de reconnaissance fine de "le" désigne un "noun" et lui désigne un "creature", dans ce contexte. Problème soulevé, pas de solution pour l'instant de ma part :)
Samuel V.
Avatar de l’utilisateur
Stormi
Grand Ancien
 
Messages: 1205
Inscription: Dim Avr 16, 2006 8:07 pm
Localisation: Lyon

Messagepar JL le Ven Déc 01, 2006 3:35 pm

stormi a écrit:Alors, j'ai regardé, et en effet la version 2.1.1 améliore grandement la gestion des pronoms. Le diagnostic était le même (ambiguïté entre certains pronoms et articles), mais la solution de JL est bien plus élaborée que ma tentative.

J'ai testé un peu, et cela fonctionne bien. J'aurais simplement une modification à apporter à FrenchG.h :
- ajouter la grammaire "creature noun" et "noun creature" au verbe 'donner'. (sinon, on ne peut pas dire "lui donner le truc" ou "donne-lui le truc".

Il y a également une petite correction à apporter là :
Code: Tout sélectionner
   if ((NbMots()==3)&&(Mot(1)=='le'or'la'or'les'or'-le'or'-la'or'-les')&&(Mot(2)=='lui'or'leur')) { ! "donne le lui" ou "donne-le lui" devient "donne-le-lui"
      if (Mot(1)=='le'or'la'or'les') LTI_Insert(PositionMot(1), '-');
      LTI_Insert(PositionMot(2), '-');
      print "[Mettez toujours un trait d'union entre chaque pronom et le verbe à l'impératif !]^";
   }

Il faut rajouter un "Tokenise__(buffer,parse);" dans le premier if, sinon "donne la lui" est transformé en "donne -la- lui" au lieu de "donne -la -lui".

Par ailleurs, si les tests montrent que l'absence de tiret devant "le/la/les/lui..." ne pose pas de problème majeur, je suis pour les tolérer silencieusement, sans avertissement, ou au moins rendre l'avertissement plus sympa "Pour une meilleure compréhension de vos commandes, mettez un trait d'union entre chaque pronom et le verbe à l'impératif".


En revanche, il est impossible de taper "donne-le-lui" et d'être compris, car "le" et "lui" ont toujours la même valeur. Il n'y a pas vraiment de reconnaissance fine de "le" désigne un "noun" et lui désigne un "creature", dans ce contexte. Problème soulevé, pas de solution pour l'instant de ma part :)


Merci beaucoup pour tes remarques et modifications, je les note pour plus tard (ce qui n'empêche personne d'en tenir déjà compte bien sûr).

Le conseil donné par le jeu est effectivement un peu raide. Je comptais plutôt commencer par "Conseil : ..." (plus court et lisible). Là où ce conseil pourrait se justifier, c'est si par la suite une commande comme "donne le à untel" donne une réponse trop mauvaise.

"donne-le-lui" ne peut donc pas marcher ? je ne sais plus si j'avais testé ce cas.

Peut-être que l'emploi des pronoms (et avec autre chose que l'infinitif, en plus) est assez rare, d'autant que tous les jeux ne le permettent pas. Donc cet emploi exceptionnel perturbe les cas courants, notamment ceux où l'article le/la/les est utilisé (quoique, est-ce si courant d'utiliser l'article ? c'est peut-être l'inverse).
JL
Grand Ancien
 
Messages: 287
Inscription: Mer Aoû 25, 2004 9:13 pm

Messagepar Stormi le Ven Déc 01, 2006 4:05 pm

JL a écrit:Peut-être que l'emploi des pronoms (et avec autre chose que l'infinitif, en plus) est assez rare, d'autant que tous les jeux ne le permettent pas. Donc cet emploi exceptionnel perturbe les cas courants, notamment ceux où l'article le/la/les est utilisé (quoique, est-ce si courant d'utiliser l'article ? c'est peut-être l'inverse).

Je ne sais pas si c'est rare, mais personnellement j'utilise toujours des articles pour que ce que je tape soit plus proche de la langue naturelle (comme je tape avec 9 doigts cela ne me ralentit pas), et j'utilise les pronoms pour aller plus vite, en particulier dans la situation suivante :
> regarder le champignon (regarde le champignon)
bla bla bla un champignon qui a l'air comestible.
> le prendre puis le manger
Ok.
Mmmm c'était bon.

quand je peux taper une phrase telle que "le prendre puis le manger" ou "prends-le puis mange-le" (dans ces situations je regrette d'ailleurs que "et" ne puisse pas être utilisé à la place de puis...) j'ai vraiment l'impression que le parser n'est pas trop bête, qu'il a des notions plus puissantes qu'un simple "verbe objet"
C'est ça, la reconnaissance des pronoms, on n'y pense pas tout de suite quand on joue, habitué à des syntaxes simplistes, mais quand on le découvre c'est un peu la cerise sur le gateau du parseur :)

Pour moi, il est donc important que à la fois les articles et les pronoms soient gérés d'une manière la plus satisfaisante possible.
Samuel V.
Avatar de l’utilisateur
Stormi
Grand Ancien
 
Messages: 1205
Inscription: Dim Avr 16, 2006 8:07 pm
Localisation: Lyon

Messagepar Stormi le Ven Déc 01, 2006 4:45 pm

au fait JL je ne sais pas si tu as vu, mais j'ai ouvert un fil dédié à la recherche d'améliorations pour la bibliothèque : http://ifiction.free.fr/forumBB/viewtop ... highlight=
Samuel V.
Avatar de l’utilisateur
Stormi
Grand Ancien
 
Messages: 1205
Inscription: Dim Avr 16, 2006 8:07 pm
Localisation: Lyon

Messagepar JL le Ven Déc 01, 2006 5:00 pm

stormi a écrit:au fait JL je ne sais pas si tu as vu, mais j'ai ouvert un fil dédié à la recherche d'améliorations pour la bibliothèque : http://ifiction.free.fr/forumBB/viewtop ... highlight=


Effectivement je n'avais pas vu, tu fais bien de me le signaler. La fonction "Voir les derniers messages depuis votre dernière visite" a peut-être des problèmes lorsqu'on répond à un message signalé par e-mail (ça doit mettre à jour la date de dernière visite).

Je vais donc m'y reporter.
JL
Grand Ancien
 
Messages: 287
Inscription: Mer Aoû 25, 2004 9:13 pm

Re: Inform 6 : Parseur idiot

Messagepar Otto Grimwald le Dim Fév 17, 2008 2:21 pm

je boucle ce sujet, on le continue ici : viewtopic.php?p=&t=221

En attendant, pensez à mettre à jour la version de vos bibliothèques et veuillez nous rapporter les bugs éventuels rencontrés :
http://download.tuxfamily.org/informfr/InformLibFR.zip

Avatar de l’utilisateur
Otto Grimwald
Très Ancien
 
Messages: 3028
Inscription: Mar Aoû 24, 2004 12:02 pm

Précédente

Retourner vers Questions techniques et aide pour votre code

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

cron