Språkgranskningsverktyg, vt 2008

Relevanta dokument
Djupstruktur och ytstruktur

Språkgranskningsverktyg. Grammatikkontroll med Scarrie

Maskinöversättning och språkgranskning

Maskinöversättning och språkgranskning. F6: Grammatikkontroll

SATSLÖSNING I EN LEXIKONORIENTERAD PARSER FÖR SVENSKA. Mats Dahllöf

Svårigheter med kurslitteraturen

språkgranskning, ht 2007

Anna Sågvall Hein Centrum för datorlingvistik Sturegatan 13 B, 5 tr U P P S A L A

För närmare upplysningar om bakgrunden till UCP samt om hur den är relaterad till tidigare arbeten, se Sägvall 80b.

Obesvarade frågor från F1

MÖSG ht 2005 Maskinöversättningssystemet MATS


Introduktion till språkteknologi. Datorstöd för språkgranskning

Grundläggande textanalys, VT 2011 Stavnings- och grammatikkontroll i Microsoft Word. Eva Pettersson UU/Convertus

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Grundläggande logik och modellteori

Grammatisk teori III Praktisk analys

Partiell parsning Parsning som sökning

Grammatisk teori II Attributvärdesgrammatik

Två fall: q Tom sekvens: () q Sekvens av element: (a b c) ; (sum-rec '(2 4 6)) = 12. q Första elementet uppfyller vissa villkor: (2 a b c)

Syntaktisk parsning (Jurafsky & Martin kapitel 13)

Tekniker för storskalig parsning

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Utsagor (Propositioner) sammansatta utsagor sanningstabeller logisk ekvivalens predikat (öppna utsagor) kvantifierare Section

Föreläsning 5: Modellering av frasstruktur. 729G09 Språkvetenskaplig databehandling Lars Ahrenberg

Programmeringsteknik med C och Matlab

DD1361 Programmeringsparadigm HT17

Språkgranskningsverktyg. Grammatikkontroll i Word

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Automatateori (2) Idag: Sammanhangsfria språk. Dessa kan uttryckas med Grammatik PDA

TDP007 Konstruktion av datorspråk Hemtentamen

DE GRAMMATISKA BESKRIVNINGARNA I SVE.UCP

Parsning. TDP007 Konstruktion av datorspråk Föreläsning 6. Peter Dalenius Institutionen för datavetenskap

Språket Python - Del 1 Grundkurs i programmering med Python

Dugga Datastrukturer (DAT036)

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13:15

Extra övningar på SDD:er/SDT:er

Grammatisk teori III - Seminarium

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Dependensregler - Lathund

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Repetition C-programmering

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Ordklasser. Särdrag, lexikon och syntax. Ordklasskriterier II. Ordklasskriterier. Öppna klasser. Slutna klasser

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Språkgranskningsverktyg, vt 2009

Föreläsning 7 Datastrukturer (DAT037)

Särdrag, lexikon och syntax. Ordklasser. Ordklasskriterier II. Ordklasskriterier. Öppna klasser. Slutna klasser

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Objektorienterad programmering

Introduktion C-programmering

Parsningens olika nivåer

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Pythons standardbibliotek

n Detta för att kunna koncentrera oss på n Tal: number? n Symboler: symbol? n Strängar: string? n Tecken: char? n Boolskt: boolean?

2. Utgångspunkter och angreppssätt för automatisk språkgranskning

Ordklasser. Särdrag, lexikon och syntax. Öppna klasser. Slutna klasser. Vilka ord i lexikon? Vad skall man med en grammatik till?

BEGREPP HITTILLS FÖRELÄSNING 2 SAMMANSATTA UTTRYCK - SCHEME DATORSPRÅK

Två-nivåmodellen, TWOL. 2D1418 Språkteknologi, Nada KTH Höstterminen 2004 Lisa Lagerkvist, Me-01

Logik och kontrollstrukturer

MATEMATIKENS SPRÅK. Avsnitt 1

En introduktion till logik

Föreläsning 3: Booleans, if, switch

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Variabler och konstanter

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

Datorn har utvecklats till vårt viktigaste. Datorn som språkgranskare SPRÅKTEKNOLOGI OLA KNUTSSON

TDIU01 - Programmering i C++, grundkurs

Föreläsning 9 Innehåll

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Föreläsning 5 Mer om funktioner, villkor

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

i LabVIEW. Några programmeringstekniska grundbegrepp

Översikt över Visual Basic

Objektorienterad Programmering (TDDC77)

729G04 Programmering och diskret matematik

Grundläggande datalogi - Övning 9

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Föreläsning Datastrukturer (DAT037)

Datorlingvistisk grammatik

Deklarativ programmering

Parsningens olika nivåer

Dagens föreläsning Programmering i Lisp Fö 7. Sammanfattning funktionell programmering Exempel på funktionella programspråk

Pre-editering och maskinöversättning. Convertus AB

Deklarativ programmering

729G74 IT och programmering, grundkurs. Tema 2, Föreläsning 2 Jody Foo,

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Tentamen i. TDDC67 Funktionell programmering och Lisp

Föreläsning 6 Datastrukturer (DAT037)

Kungl. Tekniska högskolan NADA Grundformer med Stava

DD1314 Programmeringsteknik

Modellering med kontextfri grammatik Kontextfri grammatik - definition En enkel kontextfri grammatik Klasser av formella språk

Tentamen i. TDDA 69 Data och programstrukturer

Transkript:

, vt 2008 Föreläsning 7 Chartparsning i allmänhet och UCP i synnerhet evapet@stp.lingfil.uu.se 1

Djupstruktur och ytstruktur Jag läste en bok igår Igår läste jag en bok 2

Chartparsning - bakgrund Utvecklades i slutet av 60-talet och början av 70-talet (Martin Kay och Ron Kaplan) Generell datastruktur för satsanalys Utforskar alla alternativa analyser vid varje steg i parsningsprocessen Alla alternativa analyser sparas i en chart (av eng. tabell/diagram/grafisk bild) Delanalyserna kan sedan användas vid lösning av större segment i satsen 3

Chartparsning Den centrala datastrukturen i en chartparser är en chart En chart är en riktad graf, som består av noder (vertices) och bågar (edges) Noderna utgörs av ord eller tecken Bågarna är aktiva eller passiva: aktiva bågar representerar delanalyser under uppbyggnad (regeltillämpningar och partiellt analyserade konstituenter) passiva bågar representerar kompletta (del)analyser 4

Samspelet mellan aktiva och passiva bågar (1) Analysen byggs upp genom ett samspel mellan aktiva och passiva bågar Chartparsningens fundamentala lag: När en aktiv båge träffar på en passiv båge (dvs den högraste noden i en aktiv båge är samma nod som den vänstraste noden i en passiv båge) bildas ett bearbetningssteg, en task Bearbetningsstegen läggs på en agenda (scheduling) Från agendan hämtas de för exekvering (selecting) i den ordning som bestämts av systemet 5

Samspelet mellan aktiva och passiva bågar (2) Ett bearbetningssteg involverar alltid exakt en aktiv och en passiv båge Utförandet av ett bearbetningssteg leder vanligen till nya bågar och nya bågkonstellationer, som genererar nya bearbetningssteg När agendan är uttömd är parsningen avslutad Resultatet av en komplett parsning representeras av en passiv båge från första till sista noden 6

Processkontroll Bearbetningen i en chartparser styrs av: tillståndet i charten principer för scheduling och selection bredden först (i den ordning de skapades) djupet först (vänstraste/högraste symbolen först) Formalismens uppgift bygga strukturbeskrivningar i form av särdragsstrukturer införa nya bågar i charten och därmed föra bearbetningen framåt 7

UCP (Uppsala Chart Parser) UCP1/UCP2 skrivet i LISP chartparsning tecken för tecken lexikonsökning, stavelseanalys, morfologisk och syntaktisk analys UCP2 används på labben UCP3 (UCP light) mindre och snabbare variant, konverterad till C chartparsning ord för ord hanterar syntaktisk analys (lexikon hanteras av andra moduler) används för t.ex. maskinöversättning 8

Tillämpningar av UCP böjnings- och sammansättningsanalys för lexikonbyggande grammatikkontroll SCARRIE Scania Checker maskinöversättning Convertus-systemet (föregångare: Multra, MATS) ordpredicering Fasty-projektet http://www.is.tuwien.ac.at/fortec/reha.e/projects/fasty/s 9

Uppbyggnad av charten i UCP UCP bygger en initial passiv chart av inputsträngen och lägger in en aktiv båge från och till startnoden Fortsatt uppbyggnad av charten styrs av regler i språkbeskrivningen, dvs i lexikon och grammatik start.rule är ett reserverat namn på den regel som inleder parsningen 10

Bågar i UCP alla bågar i en UCP-chart innehåller uppgift om ursrpungstask (creator) start- och slutnod aktiva bågar innehåller en särdragsstruktur (features) med ett toppsärdrag & passiva bågar innehåller en särdragsstruktur (features) med ett toppsärdrag * aktiva bågar innehåller en LR-Action (regelsekvens eller lexikonpekare) en initial aktiv båge går från och till sig själv 11

Exempel på en UCP-regel (define sve.gram-entry np_noun #u <* word.cat> = 'NOUN, <& phr.cat>:=:'np, <& numb> :=: <* numb>, <& gender>:=:<* gender>, <& case>:=:<* case>, <& def>:=:<* def>, <& head lem>:=:<* lem>, <& head word.cat>:=:<* word.cat>, store; #! word.cat; ) 12

Exempel på en passiv båge 1--7 Creator: 112 Features: (* = (START = 1 END = 7 PHR.CAT = NP NUMB = SING GENDER = UTR CASE = BASIC DEF = DEF HEAD = (WORD.CAT = NOUN LEM = SOL.NN))) 13

Exempel på en UCP-regel (define sve.gram-entry cl.decl #u <& phr.cat>:=:'cl, <& type>:=:'main, <& mode>:=:'decl, <* phr.cat>='np, <* case>:=:'basic, <& subj>:=:<*>, advance, <* word.cat>='verb, <* inff>='fin, <& verb>:=:<*>, store; #! phr.cat or word.cat; ) 14

Exempel på en aktiv båge 1--7 Creator: 78 Features: (& = (PHR.CAT = CL TYPE = MAIN MODE = DECL NP = (START = 1 END = 7 PHR.CAT = NP NUMB = SING GENDER = UTR CASE = BASIC DEF = DEF HEAD = (LEM = SOL.NN WORD.CAT = NOUN)))) LR-Action: <* PHR.CAT> = 'VP, <* INFF> = 'FIN, <& VP> :=: <*>, STORE, MAJORPROCESS(SENT); 15

Regelformat (define grammatiknamn-entry regelnamn #u rule.body; #! passivt.filter; #! aktivt.filter; ) (define sve.gram-entry np_noun #u <* word.cat> = 'NOUN, <& phr.cat>:=:'np, <& numb> :=: <* numb>, <& gender>:=:<* gender>, <& case>:=:<* case>, <& def>:=:<* def>, <& head lem>:=:<* lem>, <& head word.cat>:=:<* word.cat>, store; #! word.cat; ) 16

Konstanter och särdragsstrukturer Konstanter, dvs atomiska värden i en särdragsstruktur, föregås av ' Bågar skrivs inom < > (define sve.gram-entry np_noun #u <* word.cat> = 'NOUN, <& phr.cat>:=:'np, <& numb> :=: <* numb>, <& gender>:=:<* gender>, <& case>:=:<* case>, <& def>:=:<* def>, <& head lem>:=:<* lem>, <& head word.cat>:=:<* word.cat>, store; #! word.cat; ) 17

Operatorer i UCP operatorer för test och tilldelning av attribut och värden operatorer för kontroll operatorer för att införa nya bågar i charten 18

Operatorer för test och tilldelning Likhetsoperatorn: attribut = värde testar att två särdragsstrukturer är ekvivalenta om attributet är ospecificerat eller har ett annat värde än det som står till höger om likhetsoperatorn så misslyckas regeln Unifieringsoperatorn: attribut :=: värde testar och tilldelar på samma gång om attributet är ospecificerat tilldelas det värdet till höger om unifieringsoperatorn om attributet har ett annat värde än det som står till höger om unifieringsoperatorn så misslyckas regeln 19

Operatorer för test och tilldelning (define sve.gram-entry cl.decl #u <& phr.cat>:=:'cl, <& type>:=:'main, <& mode>:=:'decl, <* phr.cat>='np, <* case>:=:'basic, <& subj>:=:<*>, advance, <* word.cat>='verb, <* inff>='fin, <& verb>:=:<*>, store; #! phr.cat or word.cat; ) 20

nil-värdet atomen nil betecknar underspecificerade värden ordformen barn kan vara antingen singular eller plural, och kan därför initialt tilldelas nil-värdet för sitt numerussärdrag vid unifiering med en struktur där värdet är specificerat, skrivs nil-värdet över med det specificerade värdet 21

Operatorer för kontroll (1) konjunktion: expr1,..., exprn uttryck åtskilda med kommatecken testas i sekvens om ett uttryck misslyckas, testas inte följande uttryck, utan hela regeln misslyckas 22

Konjunktion (define sve.gram-entry cl.decl #u <& phr.cat>:=:'cl, <& type>:=:'main, <& mode>:=:'decl, <* phr.cat>='np, <* case>:=:'basic, <& subj>:=:<*>, advance, <* word.cat>='verb, <* inff>='fin, <& verb>:=:<*>, store; #! phr.cat or word.cat; ) 23

Operatorer för kontroll (2) beroende disjunktion: expr1 /... / exprn uttryck åtskilda med / testas i sekvens om ett uttryck i disjunktionen misslyckas, testas följande uttryck istället om ett uttryck i disjunktionen lyckas, testas inte följande uttryck rekommenderas att disjunktionen skrivs inom parentes: (expr1 /... / exprn) 24

Beroende disjunktion (define sve.gram-entry np_noun #u <* word.cat> = 'NOUN, <& phr.cat>:=:'np, (<& numb> :=: 'plur/<& numb> :=:'sing), <& gender>:=:<* gender>, <& case>:=:<* case>, <& def>:=:<* def>, <& head lem>:=:<* lem>, <& head word.cat>:=:<* word.cat>, store; #! word.cat; ) 25

Operatorer för kontroll (3) oberoende disjunktion: expr1 //... // exprn uttryck åtskilda med // testas var och en för sig, oberoende av varandra rekommenderas att disjunktionen skrivs inom parentes: (expr1 //... // exprn) 26

Oberoende disjunktion (define sve.gram-entry np_noun #u <* word.cat> = 'NOUN, <& phr.cat>:=:'np, (<& numb> :=: 'plur//<& numb> :=:'sing), <& gender>:=:<* gender>, <& case>:=:<* case>, <& def>:=:<* def>, <& head lem>:=:<* lem>, <& head word.cat>:=:<* word.cat>, store; #! word.cat; ) 27

Operatorer för kontroll (4) villkorssatser: if condition then expr1 else expr2 om villkoret condition är uppfyllt, så utförs expr1, annars utförs expr2 else-satsen är optionell 28

Villkorssatser (define sve.gram-entry cl.decl #u <& phr.cat>:=:'cl, <& type>:=:'main, <& mode>:=:'decl, <* phr.cat>='np, <* case>:=:'basic, <& subj>:=:<*>, advance, <* word.cat>='verb, <* inff>='fin, <& verb>:=:<*>, store; #! phr.cat or word.cat; ) (define sve.gram-entry cl.decl #u <& phr.cat>:=:'cl, <& type>:=:'main, <& mode>:=:'decl, <* phr.cat>='np, <* case>:=:'basic, <& subj>:=:<*>, advance, if (<* word.cat>='verb, <* inff>='fin) then (<& verb>:=:<*>, store) #! phr.cat or word.cat; ) 29

Sanningsvärden och negation continue (sant) failure (falskt, regeln misslyckas) not (negation) if (not <* numb>='sing) then continue else failure 30

Operatorer för kontroll (5) regelanrop: regelnamn(arg1,..., argn) bearbetar den anropade regeln innan nästa instruktion utförs argument är optionella om argument skickas med, kan de anropas från den nya regeln med hjälp av indexerade variabler:?1,?2,?3 etc. 31

Regelanrop (define form.dic-entry "studenten" #u noun.entry('student.nn, 'utr, 'sing, 'def, 'basic); ) (define sve.gram-entry noun.entry #u end.of.word, <& word.cat>:=:'noun, <& lem> :=:?1, <& gender> :=:?2, <& numb> :=:?3, <& def> :=:?4, <& case> :=:?5, majorprocess(np_noun), store.form; ) 32

Operatorer för att skapa nya aktiva bågar (1) process(arg) startar en ny process i ändpunkten på den aktiva bågen i aktuell task arg utgörs av namnet på en grammatikregel (define sve.gram-entry start.rule #u process(form.dic), majorprocess(cl.decl); #! char; ) 33

Operatorer för att skapa nya aktiva bågar (2) majorprocess(arg) startar en ny process i startpunkten på den aktiva bågen i aktuell task (define sve.gram-entry noun.entry #u end.of.word, <& word.cat>:=:'noun, <& lem> :=:?1, <& gender> :=:?2, <& numb> :=:?3, <& def> :=:?4, <& case> :=:?5, majorprocess(np_noun), store.form; ) 34

Operatorer för att skapa nya aktiva bågar (3) advance(arg) för pågående process vidare genom att lägga in en ny aktiv båge från startpunkten i den aktiva bågen i aktuell task till slutpunkten i den passiva bågen 35

advance (define sve.gram-entry cl.decl #u <& phr.cat>:=:'cl, <& type>:=:'main, <& mode>:=:'decl, <* phr.cat>='np, <* case>:=:'basic, <& subj>:=:<*>, advance, <* word.cat>='verb, <* inff>='fin, <& verb>:=:<*>, store; #! phr.cat or word.cat; ) 36

Operatorer för att skapa nya passiva bågar (1) store(arg) lagrar resultatet av bearbetningen i aktuell task genom att lägga in en ny passiv båge från startpunkten i den aktiva bågen till slutpunkten i den passiva bågen ( konsumerar den passiva bågen) 37

store (define sve.gram-entry cl.decl #u <& phr.cat>:=:'cl, <& type>:=:'main, <& mode>:=:'decl, <* phr.cat>='np, <* case>:=:'basic, <& subj>:=:<*>, advance, <* word.cat>='verb, <* inff>='fin, <& verb>:=:<*>, store; #! phr.cat or word.cat; ) 38

Operatorer för att skapa nya passiva bågar (2) minorstore(arg) lagrar resultatet av bearbetningen i aktuell task genom att lägga in en ny passiv båge från startpunkten i den aktiva bågen till dess slutpunkt 39

Grammatikkontroll med UCP Lokala felregler ReportChart Chartscanner som söker efter felsärdrag i charten Tre grundläggande principer: Simplicity Principle Sök endast efter fel på toppnivån i särdragsstrukturen Longest Span Principle Välj alltid den längsta analysen Right-Before-Wrong Principle Om det finns flera analyser av samma längd, så välj alltid en analys utan fel i framför en analys med fel i 40

ett student - brott mot genuskongruens i NP (define sve.gram-entry np_art_noun #u <& phr.cat> :=: 'np, <* word.cat> = 'art, <& art> :=: <*>, advance, <* word.cat> = 'noun, (<& art gender> :=: <* gender> / <& err :new> :=: 'np-gender), <& head> :=: <*>, store; #! word.cat; ) (setq *error-acts* '(:VAL (np-gender. "Brott mot genuskongruens i NP") (felkod1. "beskrivning av felet") (felkod2. "beskrivning av ett annat fel") ))

ett student - brott mot genuskongruens i NP (* = (START = 1 END = 13 NUMB = SING GENDER = NEUTR DEF = INDEF PHR.CAT = NP DET = (LEM = EN.AL WORD.CAT = ART) ERR = (1 = NP-GENDER) CASE = BASIC HEAD = (LEM = STUDENT.NN WORD.CAT = NOUN)))

Uppärvning av särdrag Chartscannern söker endast efter felsärdraget på toppnivån i charten Felsärdrag som ligger på fraser under toppninvån måste ärvas upp till toppnivån för att ge effekt ett student NP-kongruensfel pluggar verb deklarativ huvudsats NP + verb 43

ett student pluggar - inga felmeddelanden från grammatiken! (define sve.gram-entry np_art_noun #u <& phr.cat> :=: 'np, <* word.cat> = 'art, <& art> :=: <*>, advance, <* word.cat> = 'noun, (<& art gender> :=: <* gender> / <& err :new> :=: 'np-gender), <& head> :=: <*>, store; #! word.cat; ) (define sve.gram-entry cl.decl #u <& phr.cat>:=:'cl, <& type>:=:'main, <& mode>:=:'decl, <* phr.cat>='np, <* case>:=:'basic, <& subj>:=:<*>, advance, <* word.cat>='verb, <* inff>='fin, <& verb>:=:<*>, store; #! phr.cat or word.cat; )

(* = (START = 1 END = 21 PHR.CAT = CL TYPE = MAIN MODE = DECL SUBJ = (START = 1 END = 13 NUMB = SING GENDER = NEUTR DEF = INDEF PHR.CAT = NP DET = (LEM = EN.AL WORD.CAT = ART) ERR = (1 = NP-GENDER) CASE = BASIC HEAD = (LEM = STUDENT.NN WORD.CAT = NOUN)) VERB = (START = 13 END = 21 WORD.CAT = VERB LEM = PLUGGA.VB DIAT = ACT INFF = FIN TENSE = PRES VERB.TYPE = MAIN)))

ett student pluggar - brott mot genuskongruens i NP (define sve.gram-entry np_art_noun #u <& phr.cat> :=: 'np, <* word.cat> = 'art, <& art> :=: <*>, advance, <* word.cat> = 'noun, (<& art gender> :=: <* gender> / <& err :new> :=: 'np-gender), <& head> :=: <*>, store; #! word.cat; ) (define sve.gram-entry cl.decl #u <& phr.cat>:=:'cl, <& type>:=:'main, <& mode>:=:'decl, <* phr.cat>='np, <* case>:=:'basic, <& subj>:=:<*>, (<& subj err>, <& err>:=:<& subj err>/ not <& subj err>), advance, <* word.cat>='verb, <* inff>='fin, <& verb>:=:<*>, store; #! phr.cat or word.cat; )

(* = (START = 1 END = 21 PHR.CAT = CL TYPE = MAIN MODE = DECL SUBJ = (START = 1 END = 13 NUMB = SING GENDER = NEUTR DEF = INDEF PHR.CAT = NP DET = (LEM = EN.AL WORD.CAT = ART) ERR = (1 = NP-GENDER) CASE = BASIC HEAD = (LEM = STUDENT.NN WORD.CAT = NOUN)) ERR = <* SUBJ ERR> VERB = (START = 13 END = 21 WORD.CAT = VERB LEM = PLUGGA.VB DIAT = ACT INFF = FIN TENSE = PRES VERB.TYPE = MAIN)))

Referenser Anna Sågvall Heins föreläsningsbilder från Maskinöversättning och språkgranskning 2006 Weijnitz, Per: Uppsala Chart Parser Light System Documentation, in Working Papers in Computational Linguistics & Language Engineering 12 Sågvall Hein, Anna: A Test Version of the Grammar Checker for Swedish, in Working Papers in Computational Linguistics & Language Engineering 12 48