Hitta grundform med Stava Inlämningsuppgift Språkteknologi

Download Report

Transcript Hitta grundform med Stava Inlämningsuppgift Språkteknologi

Hitta grundform med Stava
Inlämningsuppgift Språkteknologi
Helen Elemida
[email protected]
8707080449
4 januari 2013
Språkteknologi
Uppgiften
“Om man automatiskt ska plocka ut de informationsbärande orden ur ett dokument för att senare kunna söka på dem vill man ofta återföra orden på
grundform. Modifiera modulen suffix.c i Stava så att den för varje ord i inmatningen skriver ut dess grundform. Du kommer dels att behöva ändra funktionen CheckSuffix och dels se till att huvudmodulen stava.c anropar CheckSuffix för varje ord i inmatningen. Källkoden till dessa moduler finns under /info/sprakt07/stava.” [ 1 ]
Stava
Stava är ett rättstavningsprogram för svenska skrivet av Viggo Kann och Joachim Hollman vid Nada, KTH. [ 2 ]
Programmet använder sig av Svenska Akademins Ordlista, SAOL. Om ordet
finns i ordlistan godkänns det direkt. Med vissa undantag (undantagen är t ex
substantiv i bestämd form singularis och obestämd form pluralis) finns böjda
ord ej med i ordlistan utan måste kontrolleras på annat sätt.
För detta ändamål används en fil med suffixregler. Filen med suffixregler heter SLlist och läses in av programmet vid start. Suffixregelerna beskriver hur
nya böjningsfomer kan bildas utifrån böjningsformer till de ord som finns i ordlistan. Dessa regler är till för att kontrollera regelbundet böjda ord, vanligtvis
substantivformer men även svaga verb. Ord med oregelbunden böjning lagras i
ordlistan och dessa kan man inte generera grundformen för genom att använda
CheckSuffix.
Reglerna i SLlist har strukturen som följer:
En suffixregel besår av ett ingångssuffix och ett eller flera uppslagssuffix.
Figur 1: 5 st suffixregler med ingångssuffix följt av uppslagssuffix
Det första uppslagssuffixet är alltid grundformssuffixet.
När ett ord ska kontrolleras mot suffixreglerna tas ordets suffix och en matchHelen Elemida
2
Språkteknologi
ning eftersöks bland reglernas uppslagssuffix.
Reglerna använder sig av följande syntax: [ 3 ]
1. @ motsvarar det tomma suffixet, dvs ordets stam utan suffix.
2. Negation av uppslagssuffix
(a) Man kan negera uppslagssuffix med hjälp av ∼. (Lämplig om man t
ex vill tillåta banan, bananer men inte banor.)
an
aner, ∼or
3. Bokstav som föregår suffix
(a) För att endast använda en viss regel då suffixet föregås av vissa bokstäver kan man omgärda de tillåtna bokstäverna av [ och ] .
T ex
[u]
@, n, r, ∼dde, ∼ra
(b) Vill man istället förbjuda att suffixet föregås av vissa bokstäver använder man sig av [∧ ].
T ex
[∧ sxz ]s
@, en, er
4. Bokstavsföljder som föregår suffix
(a) Om man vill förbjuda vissa bokstavsföljder före suffixet omgärdar
man dem med ( ) och avskiljer dem med |.
T ex
(en|el|er)aste
Utförande
I metoden CheckSuffix används en metod som heter FindSuffix vilken tar ett ord
som indata, letar reda på en suffixregel i SLlist som matchar, tar bort suffixet
och returnerar stammen. Anropas denna metod kan stammen enkelt skrivas ut.
Härnäst återstår att hitta grundformens suffix. I Stava är detta enkelt då det
första suffixet i suffixreglernas uppslagssuffix är grundformens. Alltså, tag första
suffix bland uppslagssuffixen som hör till den regel som matchades med i förra
steget. Skriv ut denna.
För att behålla all funktionalitet behölls metoden CheckSuffix i ursprungsform
och en ny metod skapades, MyCheckSuffix. Denna metod försöker hitta en matchande suffixregel, skriva ut stammen och sedan första uppslagssuffixet som
beskrivet ovan.
Till denna kursomgång har stava.c ersatts av stavaapi.c. I detta C-program
Helen Elemida
3
Språkteknologi
finns en metod som heter StavaWord som kontrollerar att indatan har en godkänd längd (varken för långt eller för kort). Det är i denna metod, efter de
nödvändiga kontrollerna av indataordet som metoden MyCheckSuffix anropas.
Detta fungerar inte med alla ord dock, i vissa fall finns ingen matchande suffixregler och i andra matchas ordet direkt mot ett av dem i ordlistan.
Resultat
Ett okej resultat uppnåddes. En lista med några exempel på inmatade ord och
dess utskrivna grundform följer nedan:
Inmatat ord
cyklarna
cyklarnas
cykelns
cyklar
dockans
dockorna
dockornas
dyker
hoppat
trevliga
trevligare
trevligast
tittas
tittat
tittades
tillgiver
tillgett
ville
springer
hoppat
Utskriven grundform
cykel
cykel
cykel
cykla
docka
docka
docka
dyka
hoppa
trevlig
trevlig
trevlig
titta
titta
titta
tillge
tillge
vill
springa
hoppa
Exempel på ej funna ord:
cykeln
dockor
sprang
sprungit
bröt
bryta
byxan
skor
Helen Elemida
4
Språkteknologi
Möjliga förbättringar
För att få fler matchningar i suffixreglerna kan man generera nya regler utifrån
de tidigare existerande. För varje icke-negerat uppslagssuffix generas en ny regel med detta uppslagssuffix som ingångssuffix och som uppslagssuffix får denna
nya regel samma som regeln den är en utvidgning av.
T ex:
Figur 2: Hur man kan genererar nya suffixregler utifrån en gammal
Detta bör göras i samband med att reglerna läses in i början av programmet.
Detta då det är mer acceptabelt att uppstart av ett program tar tid jämfört
med att det ska ta tid när första ordet skall kontrolleras.
Tyvärr fanns inte tid till att implementera denna idé, men denna borde avhjälpa problemet med de ord som finns i ordlistan men som inte är i grundform.
Som exempel substantiv i bestämd form singularis och obestämd form pluralis.
Referenser
[1] Uppdragslydelsen som kan hittas på
[http : //www.csc.kth.se/utbildning/kth/kurser/DD2418/sprakt12/inla] 4 december 2012
[2] manual för Stava", [http : //www.nada.kth.se/ viggo/stava/manual.php]
23 december 2012
[3] "Hur Stavas suffixregler fungerar"[http : //www.nada.kth.se/ viggo/stava/suf f ixregler.html]
15 december 2012
Helen Elemida
5