IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Prolog Discussion :

l'équivalent d'un programme (reconnaissance d'une phrase correcte)


Sujet :

Prolog

  1. #1
    Membre à l'essai
    Homme Profil pro
    R&D Informatique
    Inscrit en
    Mai 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : R&D Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 14
    Points : 10
    Points
    10
    Par défaut l'équivalent d'un programme (reconnaissance d'une phrase correcte)
    Bonjour,

    Je sollicite votre aide pour le problème suivant :

    j'ai un programme qui permet de vérifier si une phrase est syntaxiquement correcte (je vais supposer que mes phrases sont syntaxiquement correctes si elles sont constituées d'un pronom, suivi d'un nom, suivi d'un verbe, suivi d'un article puis suivi d'un autre nom. Exemple "this thief stole the ring".)
    Pour reconnaitre ce type de phrases, j'ai la base de connaissances suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    word(article,the).
    ...
    word(pronoun,this).
    ...
    word(noun,thief).
    word(noun,ring).
    ...
    word(verb,stole).
    ...
    sentence(Word1,Word2,Word3,Word4,Word5) :- word(pronoun,Word1),
    <div style="margin-left:40px"><div style="margin-left:40px">word(noun,Word2),</div></div><div style="margin-left:40px"><div style="margin-left:40px">word(verb,Word3),</div></div><div style="margin-left:40px"><div style="margin-left:40px">word(article,Word4),</div></div><div style="margin-left:40px"><div style="margin-left:40px">word(noun,Word5).</div></div>
    la requête qui va me permettre de générer toutes les phrases syntaxiquement correctes est :
    Ma question est la suivante :
    Si je remplaçait ma base de connaissances avec celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    word(article,the).
    ...
    word(pronoun,this).
    ...
    word(noun,thief).
    word(noun,ring).
    ...
    word(verb,stole).
    ...
    sentence(word(pronoun,A),word(noun,B),word(verb,C),word(article,D),word(noun,E)).
    Est-ce que cette nouvelle base va me permettre de faire le travail ? Si oui, quelle requête utiliser ? si non, quelles modifications apporter pour arriver à mon but (tout en gardant , si c'est possible, la dernière définition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sentence(word(pronoun,A),word(noun,B),word(verb,C),word(article,D),word(noun,E)).
    Merci d'avance pour votre aide précieuse.

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Oui, c'est faisable, mais ce n'est pas terrible, en général, pour ce genre de programme, on utilise les DCG
    Ce qu'on peut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sentence(A,B,C,D,E):-
    	maplist(call, [A,B,C,D,E]).
     
     
    test :-
    	sentence(word(pronoun,A),word(noun,B),word(verb,C),word(article,D),word(noun,E)),
    	format('~w ~w ~w ~w ~w~n', [A,B,C,D,E]).
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre à l'essai
    Homme Profil pro
    R&D Informatique
    Inscrit en
    Mai 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : R&D Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Bonjour et merci pour votre réponse.

    Essayons de mettre de côté les DCG (je ne connais pas suffisamment Prolog pour les utiliser). Le problème avec la deuxième solution que j'ai donné c'est que peu importe les mots que je vais mettre, le but sera toujours satisfait. Exemple, je lance la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ?-sentence(word(pronoun,toto),word(noun,tata),word(verb,titi),word(article,tutu),word(noun,tintin)).
    ça je le comprends car une variable s'unifie avec n'importe quel atome. D'où ma question : comment appliquer des contraintes pour que le second argument du prédicat word appartienne bel et bien aux différentes catégories syntaxiques que j'ai défini ?

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Vous avez quelle base de faits exactement. Chez moi, j'obtiens false à votre requête sentence(word(pronoun,toto),word(noun,tata),word(verb,titi),word(article,tutu),word(noun,tintin)).
    Moi je n'ai pris comme faits que ceux que vous aviez déclarés dans votre code
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Membre à l'essai
    Homme Profil pro
    R&D Informatique
    Inscrit en
    Mai 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : R&D Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Bonjour,
    Désolé pour la réponse tardive. ma base est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    word(pronoun,this).
    word(article,the).
    word(noun,thief).
    word(noun,ring).
    word(verb,stole).
     
    sentence(word(pronoun,A),word(noun,B),word(verb,C),word(article,D),word(noun,E)).
    Et ma requête est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sentence(word(pronoun,toto),word(noun,tata),word(verb,titi),word(article,tutu),word(noun,tintin)).
    La réponse de Prolog est true.

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Vous avez bien défini :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sentence(A,B,C,D,E):-
    	maplist(call, [A,B,C,D,E]).
    C'est très bizarre.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  7. #7
    Membre à l'essai
    Homme Profil pro
    R&D Informatique
    Inscrit en
    Mai 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : R&D Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Non, Je ne l'ai pas défini, d'ailleurs je ne l'ai pas compris. Si C'est ça les DCG, je ne connais pas, je ne les ai jamais utilisés.

    Donc si je comprends bien, si on n'utilise pas les DCG, il est impossible de trouver une solution "Convenable' autre que ma première solution où j'utilise une règle ?

    Le truc qui me tracasse c'est pourquoi quand je lance la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sentence(word(pronoun,A),word(noun,B),word(verb,C),word(article,D),word(noun,E)).
    Prolog ne se dit pas que les arguments word(pronoun, A), word(noun,B), etc. sont des faits appartenant à la base et il faut qu'il vérifie s'ils sont "satisfables" ?

  8. #8
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Non, les DCG ne sont pas du tout ce que je viens de donner (Avez-vous lu le lien que j'ai indiqué ?)
    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sentence(A,B,C,D,E):-
    	maplist(call, [A,B,C,D,E]).
    permet de verifier que les arguments que vous donnez a word(pronoun, ...) word(article, ...) sont bien dans la base de données.
    Lorsque vous posez la requête sentence(word(pronoun,toto),word(noun,tata),word(verb,titi),word(article,tutu),word(noun,tintin)). mon prédicat sentence... demande à prolog de verifier que les faits word(pronoun, toto), word(noun, tata) ... sont bien dans la base de faits

    Si vous posez la requête sentence(word(pronoun,A),word(noun,B),word(verb,C),word(article,D),word(noun,D)). Prolog à l'aide des call verifiera par exemple qu'il y a des faits word(pronoun, A) , et comme il en trouve unifie A à this, etc
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  9. #9
    Membre à l'essai
    Homme Profil pro
    R&D Informatique
    Inscrit en
    Mai 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : R&D Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Ok, c'est compris ! Je vais jeter un coup d'oeil au lien que vous m'aviez envoyé.

    Merci beaucoup pour vos réponses constructives. Je vais mettre le problème comme résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/10/2012, 13h03
  2. Réponses: 3
    Dernier message: 05/09/2005, 14h09
  3. Réponses: 2
    Dernier message: 04/06/2004, 10h36
  4. Réponses: 2
    Dernier message: 26/01/2004, 20h11
  5. Lancer un programme, mais sur une autre machine
    Par GOUGOU1 dans le forum Réseau
    Réponses: 12
    Dernier message: 08/12/2002, 20h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo