OPGAVE 3: Definite Clause Grammar
Deadline: vrijdag 6 juni
3a Een basisgrammatica voor het Nederlands.
Schrijf DCG-regels voor de volgende verschijnselen:
- Hoofdzinnen waarin de persoonsvorm een transitief
of intransitief werkwoord is:
- Jan studeert
- Jan schrijft een programma
- Hoofdzinnen waarin de persoonsvorm een hulpwerkwoord
van tijd (hebben,zijn) of van modaliteit is (kunnen, moeten,...):
- Jan heeft een programma geschreven
- Jan is gekomen
- Jan moet studeren
- Jan kan een programma schrijven
- Bijzinnen voor bovengenoemde zinstypes:
- dat Jan studeert
- dat Jan een programma schrijft
- dat Jan een programma heeft geschreven
- dat Jan een programma geschreven heeft
- dat Jan moet studeren
- dat Jan studeren moet
- Zinnen met daarin een werkwoord dat voor een
bijzin selecteert:
- Jan zegt dat hij studeert
- Jan heeft gezegd dat hij een programma moet schrijven
Let op het volgende:
- Je hoeft alleen voorbeelden te geven met derde persoon enkelvoud,
tegenwoordige tijd, persoonsvormen.
- Maak zelf een verzameling voorbeelden en een bijbehorend woordenboek,
waarin minstens twee intransitieve, twee transitieve, twee modale werkwoorden
zijn opgenomen, en twee werkwoorden die een zinscomplement selecteren. De
NPs mag je zo eenvoudig mogelijk houden.
- Zorg ervoor dat het verschil in woordvolgorde tussen hoofd- en bijzinnen
verantwoord wordt. Zorg ervoor dat je (mbv kenmerken/feature) een verschil
maakt tussen persoonsvormen, voltooide deelwoorden, en infinitieven. Zorg
ervoor dat je mbv een feature verschil maakt tussen deelwoorden die het
hebben en die met zijn combineren.
3b. Een basisgrammatica voor het Engels
Schrijf nu een grammatica voor de Engelse vertalingen
van de zinnen uit fragment 3a. Je grammatica kan dus zinnen produceren
als
- John studies
- John can write a program
- John has written a program
- John says that he has written a program
- John says that he must write a program
- etc.
Om verwarring tussen de Engelse en de Nederlandse grammatica te voorkomen
is het
handig om alle predicaten die je gebruikt in de Engelse grammatica van een
suffix _eng
o.i.d. te voorzien:
3c Automatisch vertalen
Het automatisch vertalen van een Nederlandse zin in het Engels betekent
dat, naast het vertalen op woordniveau, soms de volgorde van woorden en zinsdelen
in de zin moet worden aangepast. Om dit probleem op te lossen kun je gebruik
maken van de grammatica's voor beide talen. Het idee is dat zowel de Nederlandse
als de Engelse grammatica een abstracte representatie van de zin oplevert
(die we `interlingua' zullen noemen). Nederlands-Engels vertalen betekent
nu dat je de Nederlandse zin parseert met de grammatica, en de resulterende
interlingua-representatie gebruikt als input voor de Engelse grammatica, die
daarvoor de bijbehorende zin (of zinnen) berekent.
Stap 1
Voeg aan alle regels van de Nederlandse en Engelse grammatica een argument
toe dat de interlingua representatie van dit zinsdeel codeert.
De interlingua abstraheert van details als verbuigingen en woordvolgorde.
Bovendien worden woorden met dezelfde betekenis (in het Nederlands en Engels)
gerepresenteerd door hetzelfde interlingua symbool. Een mogelijke interlingua
maakt gebruik van de volgende conventies
- De i-representatie van woorden zijn prolog constanten. Woorden met
dezelfde betekenis in het Nederlands en Engels corresponderen met dezelfde
constante.
- NPs bestaan uit een lidwoord en een zelfstandig naamwoord. Om de
combinatie van beide weer te geven gebruiken we het predicaat i_np (interlingua
np):
- een programma
- i_np(a,program)
- VPs bestaan meestal uit een werkwoord en 1 ander argument. Het predicaat
i_vp codeert de combinatie:
- schrijft een programma
- i_vp(write,i_np(a,program)
- heeft een programma geschreven
- i_vp(has,i_vp(write,i_np(a,program)))
- VPs met alleen een werkwoord, introduceren geen speciale interlingua
constructie:
- slaapt
- sleep
- Zinnen bestaan altijd (in deze grammatica) uit een subject en een
vp:
- Jan schrijft een programma
- i_s(john,i_vp(write,i_np(a,program)))
Merk op dat de volgorde van argumenten in i_np, i_vp, etc, vast is (bv
altijd het werkwoord op de eerste plaats), onafhankelijk van de woordvolgorde
in de zin. Om interlingua representaties af te leiden met behulp van de
grammatica, voeg je aan iedere categorie een extra argument toe voor deze
representatie. In de regels zeg je steeds hoe de i-representaties van de
dochters bijdragen aan de i-representatie van de moeder:
- np(john) --> [jan].
- s(i_sem(Subj,VP)) --> np(Subj), vp(VP).
stap 2
Als je de semantiek aan beide grammatica's hebt toegevoegd, schrijf je
een vertaal-programma. Dit programma neemt een Nederlandse zin, berekent de
i-representatie Int, en roept vervolgens de Engelse grammatica aan
met de Int als argument.
Test je programma zowel voor Nederlands-Engels als voor Engels-Nederlands
vertalen. Test ook of het programma voor sommige zinnen meer dan 1 vertaling
kan geven.
Inleveren
Lever je programma in, waar nodig voorzien van commentaar.
Geef ook een voorbeeld van een zin die meer dan 1 vertaling oplevert.
Deadline: Vrijdag 6 juni