Séance 12 : Grammaire sur Prolog Flashcards

1
Q

Quel est le problème ici?

article(le).
article(la).
nom(chat).
nom(voiture).
npropre(jean).

sn(X,Y) :- article(X),nom(Y).
sn(X) :- npropre(X).

Quelle est la solution (générale) ?

A

Il existe deux prédicats pour traiter le sn (sn/1 et sn/2) On ne peut pas interroger sur le sn en une seule question.

Il faut forcer le Sn à avoir un seul argument (regrouper les éléments en une variable). Ne travailler qu’avec sn/1.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Quelle est la première solution apportée au problème?

A

Placer les mots dans des listes [X,Y] qui forment qu’un seul argument

article(le).  
article(la). 
nom(chat).
nom(souris).  
npropre(jean).
verbe(mange).

sn([X,Y]) :- article(X),nom(Y).
sn([X]) :- npropre(X).
sv([X,Y,Z]) :- verbe(X), sn([Y,Z]).
p([A,B,C,D,E]) :- sn([A,B]), sv([C,D,E]).

seulement sn/1

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Quel est le problème à la solution des listes?

A

On doit prévoir exactement le nombre de mots qu’il y aura dans une phrase et ça ne règle pas le problème du nom propre (car 1 mot et tous les sn ont 2 lettres. (mais principes de base utiles)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Quelle est la solution au problème des listes?

A

On place tout dans des listes et on «colle» les listes lorsque nécessaire avec «append/3»

1.Mettre les atomes entre []

det([le]).
det([la]).
nom([chat]).
nom([souris]).
npropre([jean]).
verbe([mange]).
sn(C) :- det(A),nom(B),append(A,B,C).
Va chercher un det dans une liste et le met dans A et un nom dans une liste et avec append les combine pour en faire une seule qui va aller dans C. 
sn(C) :- npropre(C).
sv(C) :- verbe(A),sn(B),append(A,B,C).
p(C)  :- sn(A),sv(B),append(A,B,C).

=> comme ça peu importe le nombre de mots du Sn, c’est sn(A).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Que fait append(A,B,C)? C’estune structure….

A

Joint les listes A et B dans une liste C. Structure binaire, unit toujours 2 listes, pas plus.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Dans sn(C) :- det(A),nom(B),append(A,B,C) ; que contient A?

A

Une liste contenant ‘le’ ou une liste contenant ‘la’

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Ajoute l’accord en genre.

det([le]).
det([la]).
nom([chat]).
nom([souris]).
npropre([jean]).
verbe([mange]).

p(C) :- sn(A),sv(B),append(A,B,C).
sn(C) :- det(A),nom(B),append(A,B,C).
sn(C) :- npropre(C).
sv(C) :- verbe(A),sn(B),append(A,B,C).

A
det([le],m).
det([la],f).
nom([chat],m).
nom([souris],f).
npropre([jean]).
verbe([mange]).
p(C)  :- sn(A),sv(B),append(A,B,C).
sn(C) :- det(A,G),nom(B,G),append(A,B,C).
sn(C) :- npropre(C).
sv(C) :- verbe(A),sn(B),append(A,B,C).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Pourquoi on écrit det([le],m) ?

A

Car append agit seulement sur des listes et on veut qu’il prenne ‘le’, alors on le met dans une liste. on ne veut pas qu’il prennent m alors on ne le met pas)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Quels genres d’erreurs sont :

Jean mange la table
Le chat mange le chat

A

erreur sémantique

erreur pragmatique

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Quel est le problème avec la solution avec append?

A

Ne fonctionne que si on a que 2 listes à joindre (ne fonctionne plus si sn est formé de dét, nom, adj par exemple)

Ne permet de traiter le genre et le nombre du verbe (peut pas avoir 2 arguments dans sn (C, N)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Transformer en formalisme de la grammaire à clauses définies et ajouter le nombre:

det([le],m).
det([la],f).
nom([chat],m).
nom([souris],f).
npropre([jean]).
verbe([mange]).
p(C)  :- sn(A),sv(B),append(A,B,C).
sn(C) :- det(A,G),nom(B,G),append(A,B,C).
sn(C) :- npropre(C).
sv(C) :- verbe(A),sn(B),append(A,B,C).
A
det(m,s) --> [le].
det(f,s) --> [la].
det(_,p) --> [les].
nom(m,s) --> [chat].
nom(m,p) --> [chats].
nom(f,_) --> [souris].
npropre(m,s) -->[jean].
verbe(s) --> [mange].
verbe(p) --> [mangent].

p –> sn(N), sv(N).
sn(N) –> det(G,N), nom(G,N).
sn(N) –> npropre(,N).
sv(N) –> verbe(N), sn(
).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Modifier la grammaire afin qu’elle permette de reconnaître les phrases

Le chat de ma soeur mange la souris blanche.
Le chat de ma sœur mange la belle souris.

Pourquoi c’est assez complexe?

A
det(m,s) --> [le].
det(f,s) --> [la].
det(_,p) --> [les].
det(f,s) --> [ma].
nom(m,s) --> [chat].
nom(m,p) --> [chats].
nom(f,_) --> [souris].
nom(f,s) --> [soeur].
adj(f,s) --> [blanche].
adj(f,s) --> [belle].
npropre(m,s) -->[jean].
verbe(s) --> [mange].
verbe(p) --> [mangent].
prep --> [de].
p --> sn(N), sv(N).
sn(N) --> det(G,N), nom(G,N).
sn(N) --> det(G,N), nom(G,N), adj(G,N).
sn(N) --> det(G,N), adj(G,N), nom(G,N).
sn(N) --> det(G,N), nom(G,N), sprep.
sn(N) --> npropre(_,N).
sv(N) --> verbe(N), sn(_).
sprep --> prep, sn(_).

Assez complexe car il faut faire une règle par type de sn

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Quelle est le problème avec la forme

det(m,s) –> [le].

A

N’est pas universelle. Elle est dans le format de la grammaire à clauses définies

On préfère la forme initiale:
det(le,m,s).
det(la,f,s).
det(les,_,p).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Comment utiliser la forme initiale

det(le,m,s).
det(la,f,s).
det(les,_,p).

dans la grammaire à clauses définies.

A

Avec des règles de conversions (1 par classe grammaticale) :

nom(chat,m,s).
nom(maisons,f,p).
adjectif(beaux,m,p).

nom(G,N) –> [X], {nom(X,G,N)}.
adj(G,N) –> [X], {adj(X,G,N)}.

Le mot est mis dans X et son genre dans G et son nombre dans N.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Transformer en grammaire à clauses définies le dictionnaire suivant

det(le,m,s).
det(la,f,s).
nom(chat,m,s).
nom(chien,m,s).
nom(souris,f,_).
npropre(jean).
verbe(mange).
A

det(G,N) –> [X], {det(X,G,N)}.
nom(G,N) –> [X], {nom(X,G,N)}.
npropre –> [X], {npropre(X)}.
verbe –> [X], {verbe(X)}.

p –> sn (N), sv (N),
sn (N) –> det(G,N), nom(G,N).
sn –> npropre.
sv (N) –> verbe(N), sn(_).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly