OPGAVE 2

Spellingsregels voor werkwoorden

Opdracht

Schrijf een transducer die, gegeven de stam van een zwak (regelmatig) werkwoord en een uitgang, de juiste spelling van dit woord bepaalt.

Mogelijke uitgangen zijn +en, +t, +Te, en +Ten. Er kan ook geen uitgang zijn (de tegenwoordige tijd eerste persoon enkelvoud vorm). De stam van een werkwoord dat eindigt op -ven of -zen in het meervoud eindigt ook op -v of z, ook al eindigt de vorm in de 1e persoon enkelvoud tegenwoordige tijd op f of s (de stam van leven is dus leev, van lezen leez).

Je hoeft geen rekening te houden met de verleden tijd van sterke werkwoorden (loop+Te = liep).

Voorbeelden:

Data

De bestanden die je voor deze opgave nodig hebt staan in ~gosse/NLP/opg2/ op hagen en tcw1, en, hier:

Makefile
morph.pl
replace.pl
testdata
data

Je kunt het bestand morph.pl als voorbeeld gebruiken, en daaraan je eigen zaken toevoegen.

Het testmateriaal voor deze opgave staat in testdata. Dit is een bestand met in twee kolommen:

STAM+UITGANG SPELLING

Test je oplossing eerst interactief, met fsa -tk.

Daarna kun je testen op de voorbeelden in testdata. Doe hiervoor:

make errors

Dit zorgt ervoor dat met deze transducer de eerste kolom van testdata wordt geparsed. Het resultaat is results De verschillen tussen results en de tweede kolom van testdata staan in errors Wil je overnieuw testen, dan moet je soms

make clean

doen. Dit verwijdert de bestanden morph.fsa, results en errors.
 

Inleveren

Lever het programma morph.pl in, en het bestand errors. Documenteer de regels in je programma door voor iedere regel aan te geven wat het doet, en een aantal voorbeelden te geven waar de regel toegepast moet worden (en eventueel tegenvoorbeelden...).

Deadline: Vrijdag 9 mei.

N.b.

  1. De regel morph maakt gebruik van de sigma macro: sigma(Input,Output,Regex) beperkt de transducer Regex tot mogelijke inputs die bestaan uit symbolen gedefinieerd in Input en mogelijke outputs tot symbolen uit Output. Zorg er dus voor dat je Input/Output in overeenstemming is met de definitie in sigma. Is dit niet het geval, dan worden sommige inputs niet geparsed, en is results niet meer synchroon met testdata. Het berekenen van errors gaat dan mis. Je kunt zien dat bepaalde inputs niet geparsed worden als bij het verwerken van de testdata soms een `0 outputs' naar je scherm wordt geschreven.
  2. De testdata vormen (iets meer dan) 10% van het totaal beschikbare materiaal. Alle vormen staan in data (bijna 50.000 woorden). Je kunt hierin kijken (of zoeken met grep) voor inspiratie....