64 T o r S t å l h a n e R U N I T L E K S I K A L S K A N A L Y S E I M J U K E S Y S T E M 0. I N N L E D N I N G M j u k e S y s t e m e r et R U N I T - p r o s j e k t s o m b l i r f i n a n s i e r t a v N o r g e s T e k n i s k - N a t u r v i t e n s k a p e l i g e F o r s k n i n g s r å d. P r o s j e k t e t h a r s o m m å l å l e t t e t i l g a n g e til E D B - s y s t e m e r. M å l g r u p p a b e s t å r a v to deler: - f o l k s o m b a r e s p o r a d i s k b r u k e r E D B - f o l k s o m o f t e b r u k e r EDB, m e n s o m o f t e b y t t e r m a s k i n. D e t t e g j e l d e r s æ r l i g b r u k e r e s o m b e n y t t e r d a t a n e t t. H o v e d p r o b l e m e t for b e g g e d i s s e b r u k e r g r u p p e n e e r a t d e m å h u s k e e n m e n g d e n ø k k e l o r d o g konvensjoner, så s o m p l a s s e r i n g a v p u n k t u m o g k o m m a o.l. B å d e n ø k k e l o r d e n e o g k o n v e n s j o n e n e v a r i e r e r s t e r k t f ra m a s k i n t i l m a s k i n. D et er v å r m e n i n g a t d e t t e p r o b l e m e t l ø s e s b e s t v e d å la b r u k e r n e b e n y t t e et s u b s e t t a v n o r s k til k o m m u n i k a s j o n. D e t s y s t e m e t s o m skal stå m e l l o m b r u k e r e n o g E D B - s y s t e m e t, h a r v i k a l t e t M j u k t S y s t e m e l l e r M j u k t G r e n s e s n i t t. D e t t e s y s t e m e t b e s t å r a v t r e h o v e d d e l e r : - l e k s i k a l a n a l y s a t o r - s y n t a k s - o g s e m a n t i k k - a n a l y s a t o r - s y s t e m - g r e n s e s n i t t Fig. 1 64
1. VOKABULAR Systemet har for øyeblikket et relativt lite vokabular, bare ca. 150 ord. Ordutvalget er bestemt ut fra ei rekke protokollforsøk (1). An dr e undersøkelser som er gjort har k o nkludert med at et generelt vokabular på ca. 400 ord pluss et fagvokabular på ca. 100 ord er tilstrekkelig for de fleste an vendelser (2). 1.1 Ordlister i Mjuke System Vi har valgt i prosjektet: følgende retningslinjer for or dliste-strukturen - notasjonen skal være enkel å forstå - det skal være enkelt å legge inn nye ord og nye skrivemåter for ord som allerede er i ordlista - endringer og tillegg skal kunne gjøres med en vanlig tekst-editor Ut fra disse betingelsene har vi valgt følgende løsning: Vi har en symbolsk fil som inneholder hele ordlista i direkte lesbar form. Lista inneholder to typer informasjon: - generelle bøyningsmønster, som ma n kan referere til seinere i lista. - ord, me d tilhørende bøyninger, eller me d referanse til ei generell bøyning = Et generelt bøyningsmønster har forma navn = <serie av bøyningsregleij». Hver bøyningsregel har følgende form: r 1* ( < e n d i n g > «u t i n f o > <0rdklasse><$>rdforn\>)J ^) Eksempel SUBST_1=(- (- SUBST UBEST. SI NG)) (EN(- SUBST BE S T - S I N G ) ). (ER(- SUBST U B E S T - P L ) ) (ENE(- SUBST B E S T _ P L ) ). Dette bøyningsmønsteret kan nå knyttes til et ord i ordlista. F.eks, ordet BOKSTAV, som følger denne reglen BOKSTAV SU BS T - 1. ' 65
- 66 - Et ord defineres i ordlista på én av to måter: - Ved bruk av de generelle b^ynlngsm^nstrene, f.eks. BOKSTAV SUBST-l. - Ved å definere et bøyningsm«)nster spesielt for dette ordet. Dette skjer ved å sette < o r d > <serie av b^yningsregler>. F.eks.: NAVN (-(- SUBST UBEST-SING) (- SUBST UBEST-PL)) {ET(- SUBST BEST-SING)) (ENE(- SUBST BEST- P L)). Den sistnevnte metoden benyttes også for å behandle uregelmessige verb. Dette vises lettest ved et eksempel: ER (-(VÆR VB P R E S ) ). VÆR (E(- VB INF)) (-(- VB IM PT )) (T(- VB PERF) ). VAR (-(VÆR VB IMPERF)). Vi benytter her ut-info delen til å gi rett informasjon videre i systemet. Dette biir også brukt dersom vi ønsker å bytte ut et ord med et annet, f.eks.: PRINTER (-(LINJESKRIVER SUBST UBEST-SING))... 1.2 Ordlistas laqerstruktur Internt i leksikal-analysatoren biir hvert ord lagra på følgende måte s 66
- 67 - Som ordstamme h a r v i v a l g t å b ru k e r im p e ra tiv sfo r m e n f o r v e r b og u b estem t form é n t a l l f o r s u b s t a n t i v e r. D e tte e r v a l g t u t f r a h e n sy n e t t i l en m est m u lig kom pakt s t r u k t u r. Hadde v i f. e k s. v a l g t i n f i n i t i v s f o r m e n f o r v e r b v i l l e v i V2ert n ød t t i l ha ha e k s t r a i n n s la g i l i s t a f o r im p e ra tiv sfo r m e n. Eksempel ph lagring: 'SY M B O L S K 'E ' Ordlista er delt opp i et sett av balanserte trær. Et t tre b e står av alle ord som begynner på 'A', ett tre består av alle ord som begynner på 'B' osv., til 'A'. Hvert tre er ordna etter tre kriterier: - orda er sortert etter lengde før de settes Inn i treet. - hver ordstamme settes inn ved å leite fram et tomt lenkefelt på følgende måte: Viss ordet vi sammenligner med er lenger ute i alfabetet, følger vi høyre lenke, ellers følger vi den venstre. Dette fortsetter vi med til den lenka vi vil følge, er tom. Det nye ordet bllr så hengt på der. - treet er balansert for hver ordlengde (3) Dette er gjort for å forenkle søkinga etter et ord og for å unngå å måtte gå igjennom treet flere ganger. Ved å sørge for at treet er balansert vil vi trenge gjennomsnittlig ca. ^ l o g 2 (N)+l sammenligninger der N er antall ord i treet. 67
- 68 Uten balansering vil vi kunne risikere å må tt e foreta N/2 sammenligninger. Det ferdige treet vil kunne se f.eks, slik ut må måned mange hmax = 4, N = 10 Flg. 4 1 3 S^kemetode For å finne ut om et ord er 1 ordlista benytter vi følgende metode (4): - Første bokstav viser hvilket tre vi skal søke 1. Lengda av første ordstamme i treet viser hvor stor del av ordet vi må begynne med i søkinga. Resten av ordet blir b e handla som el ending. - Deretter leter vi i treet til vi finner den aktuelle ordstammen eller vi finner en stamme som er lenger enn den vi har for øyeblikket-.- Dersom vi har kommet fram til en lengere ordstamme enn den vi søker med, forlenger vi stammen med neste bokstav i søkeordet. Endinga blir da forkorta tilsvarende. Viss det ikke er flere bokstaver igjen, finnes ikke søkeordet, ellers fortsetter vi søkinga til vi finner ordet, eller vi når slutten på treet. 68
69 - Når vi har funnet en ordstamme som passer, må vi sjekke om resten av ordet (endinga) finnes som ei lovlig ending til denne stammen. Dersom det er tilfelle, er alt ok og vi kan returnere den informasjonen vi har funnet. Dersom resten av ordet ikke er ei lovlig ending, må vi forlenge stammen og fortsette søkinga. Et par enkle eksempler vil vise hvordan metoden fungerer i p r a k s i s : 1 ) ' m å ' 'mi' / \ Fig. 5 'måned' Leter etter ordet 'måned'., begynner med 'må' - 'ned' '. finner 'må' først i treet, men denne stammen har ikke 'ned' som tillatt ending. utvider til 'mån' - 'ed', men treet har ingen ordstammer langs denne greina med tre bokstaver. Det samme gjelder for 'måne'-- 'd'.. først når vi utvider ordstammen til 'måned' - ' ' finner vi ordet og kan returnere 'måned subst ubest-sing' 2 ) 'bli' / \ t 1 ^. j.' ^ ^ t t ' 1 1 i v e r b v^rb i ' v e r b im p e r a tiv p re s e n s p e r f J 1 ± v e rb ~ i n f i n i t i v F i g. 6 I 69
- 70 Leter etter ordet 'blitt'. Siden første ordstammen har tre bokstaver, starter vi med 'bli'- 'tt'. Vi finner at 'bli' er en lovlig ordstamme og søker langs kjeda av lovlige endinger med 'tt'. Som vi ser i fig. 6, finner vi denne endinga sist i kjeda o g returnerer derfor 'blitt bli verb perf. Som tidligere sagt under 1.1 blir uregelmessige verb og substantiver knytta til stammen via den delen vi kaller ut-info. Dersom vi f.eks, skulle leite eller 'blei' Istedenfor 'blitt' ville vi ha funnet dette som et eget innslag i tabellen og fått returnert 'blei bli verb I m p e r f 2. HANDTERING A V STAVEFEIL Eksperimenter og innsamla erfaringsdata Indikerer at den alt overveiende delen av skrive/stave-feil tilhører en av følgende kategorier (5): - én ekstra bokstav - én manglende bokstav - én feil bokstav I tillegg har det vist seg at feilraten for alle disse feiltypene er langt større "inne i" ordet enn i starten og slutten. Disse forholda har gjort at vi har valgt følgende metode for handtering av stavefeil (6): - for hvert ord som er lagra i ordlista blir det laga en b i t vektor som forteller hvilke bostaver som finnes i ordet. E k s. ALLE nijihumin r j a b c d e f g h i j k l m n o p q r s t u v w x y z æ ø å I tillegg tar vi vare på ordlengden. Den samme informasjonen blir generert for et ord som ikke er blitt funnet i ordlista etter et vanlig gjennomløp. ' 70
71 - for hvert ord i det treet vi gjennomløper, sjekker vi så differansen mellom ordet i ordlista og det ordet vi tror er et feilstava ord. Denne differansen kommer fram ved å sammenligne de to bit-vektorene og summere alle bitene som ikke finnes i begge orda. Til dette tallet legger vi så absoluttverdien av forskjellen i ordlengdene. E k s.: ALLE (trykkfeil for ALLE) for at et ord skal bil godtatt som en feilstaving av et annet, må differansen være mindre enn en forhandssatt terskel, dmax. Det er lett å forvisse seg om at de tre vanlige formene for skrivefeil alle vil gi en differanse på ma ks im um 2. Vi har derfor valgt dmax lik 2, unntatt når ordet har færre enn fire bokstaver. I de tilfellene benytter vi dmax lik 1. Metoden har så langt vist seg relativt tilfredsstillende. Det eneste problemet har vært at metoden ofte kommer opp med alt for mange tolkningsalternativer. Dette problemet vil kunne øke etter hvert som vi får flere ord i ordlista. 3. KOBLING TIL PROLOG Den syntaktiske og semantiske analysen av inndata foregår i et PROLOG- program (7). PROLOG benytter listestruktur til å representere inn- og u t data. I Mjuke System kommer data inn som fri-format tekst. Leksikalanalysatoren deler opp teksten i ord, tall og skilletegn og henger på en del informasjon om hver tekstenhet. Denne informasjonen har følgende format:. ( ;.inn-data> j(<indikator> ' s t a m m e X t o l k i n g» j. ) indikator kan være: I : ordet er funnet i ordlista? : ordet er ikke funnet i ordlista, men vi har funnet rimelig tolking ut fra fellstavingsalgoritma tolking ::= v o t d k l a s s o ^bøyning > 71
- 72 - Dersom bøyning ikke er relevant, blir den erstatta med I _ I Noen eksempler vil vise hvordan denne blir brukt: vil gi: "Hvilke filer har jeg?" (HVILKE (! HVILKE PRON PL )) (FILER (1 FIL SUBST UBEST- PL )) (HAR C HA VB PRES )) (JEG C JEG PRON - )) ti n (? (1 TEGN SPØRSMÅL )) Filler" (trykkfeil for Filer) vil gi: (FILLER (? FILLER IDENT - ) (? FLER ADJ PL ) (? FINN VB PRES ) (? FEIL SUBST BEST-SING) (7 FIL SUBST BEST-PL ) (? FIL SUBST UBEST- PL )) 4. OPPSUMMERING Det er vår mening at den implementerte løsninga tilfredsstiller alle viktige krav til en leksikal-analysator for et naturlig.språk:. Det er lett å legge inn nye ord. Det er lett å legge på nye tolkninger av ord som allerede finnes. Det er lett å legge inn nye former og skrivemåter. Systemet er rimelig tolerant overfor de vanligste skrivefeil Det videre arbeidet med leksikalanalysen i Mjuke System vil konsentrere seg om to områder: - utvidelse av vokabularet etter hvert som vi får m e r brukererfaring - forsøk på å dele vokabularet i én generell norsk-del som er brukeruavhengig, og en fagterm-del som må byttes ut når systemet skal handtere andre fagfelt/ universer. 72
73 5. REFERANSER (1) Amble, Tore Mjuke System,. Arbeidsnotat nr. 2, RUNIT 1981 (2) Kelly, Michael Limited Vocabulary Natural Language Dialogue Int. J. Man- Machine Studies, 1977 no. 9 (3) Wirth, Niklaus Algorithms + Datastructures = Programs Prentice-Hall, Englewood Cliffs NJ, 1976 (4) Stålhane, Tor Mjuke System, Ar beidsnotat nr. 5, RUNIT 1981 (5) Morgan, H.L. Spelling Error Correction in Systems Programs Comm A C M 13, 1970 (6) Tenczar, P. Spelling, Word and Concept Recognition University of Illinois, Urbana, 111. 1972 (7) Amble, Tore Introduction to Logic Programming RUNIT, 1981 73