Spellingsregels voor werkwoorden
Natuurlijke Taalverwerking II, Opdracht 3
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:
-
werk+en => werken
-
bak+en => bakken
-
werk+t => werkt
-
werk => werk
-
leev => leef
-
leev+en => leven
-
leev+t => leeft
-
werk+Te => werkte
-
hoop+Ten => hoopten
Data
De bestanden die je voor deze opgave nodig hebt zijn:
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 18 mei.
N.b.
-
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.
-
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....