Grundläggande textanalys, VT2013 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv13/gta/ (Tack till Sofia Gustafson-Capkovâ för material.)
Idag - Stavningskontroll - Granska - Laboration 3 - Fördjupningsuppgift 2
Varför behöver vi stavnings- och grammatikkontroll? 3
Varför behöver vi stavnings- och grammatikkontroll? - För att upptäcka slarvfel 4
Varför behöver vi stavnings- och grammatikkontroll? - För att upptäcka slarvfel - Stilkontroll Är man konsekvent när man skriver: ska skall mej - mig 5
Varför behöver vi stavnings- och grammatikkontroll? - För att upptäcka slarvfel - Stilkontroll Är man konsekvent när man skriver: ska skall mej - mig Minusord: - talspråk - ålderdomliga - byråkratiska 6
Varför behöver vi stavnings- och grammatikkontroll? - För att upptäcka slarvfel - Stilkontroll Är man konsekvent när man skriver: ska skall mej - mig Minusord: - talspråk - ålderdomliga - byråkratiska - Andraspråksinlärning 7
Varför behöver vi stavnings- och grammatikkontroll? - För att upptäcka slarvfel - Stilkontroll Är man konsekvent när man skriver: ska skall mej - mig Minusord: - talspråk - ålderdomliga - byråkratiska - Andraspråksinlärning - Dyslexi 8
Varför är inte stavningskontroll tillräckligt? 9
Varför är inte stavningskontroll tillräckligt? - Vi kan hitta icke-ord: råf får 10
Varför är inte stavningskontroll tillräckligt? - Vi kan hitta icke-ord: råf får - Men vi missar följande: om lexikonet inte är tillräckligt stort missar vi särskrivna sammansättningar: hus vagn husvagn 11
Varför är inte stavningskontroll tillräckligt? - Vi kan hitta icke-ord: råf får - Men vi missar följande: om lexikonet inte är tillräckligt stort missar vi särskrivna sammansättningar: hus vagn husvagn stavfel som är riktiga ord (real word errors): Du er duktig på att går. 12
Vad gör grammatikkontroll? 13
Vad gör grammatikkontroll? - Accepterar de korrekta grammatiska strukturerna 14
Vad gör grammatikkontroll? - Accepterar de korrekta grammatiska strukturerna - Känner igen och talar om de grammatiska fel som finns i texten fokuserar på de fel som är lätt att hitta 15
Vad gör grammatikkontroll? - Accepterar de korrekta grammatiska strukturerna - Känner igen och talar om de grammatiska fel som finns i texten fokuserar på de fel som är lätt att hitta - Ger ersättningsförslag för: ogrammatiska strukturer felaktiga ordformer 16
Grammatikkontrollens faser 17
Grammatikkontrollens faser - Feldetektering(detection) Fel i nominalfrasen(np): den röda stolarna 18
Grammatikkontrollens faser - Feldetektering(detection) Fel i nominalfrasen(np): den röda stolarna - Feligenkänning (recognition) numeriusinkongruens: artikel huvudord: den röda stolarna 19
Grammatikkontrollens faser - Feldetektering(detection) Fel i nominalfrasen(np): den röda stolarna - Feligenkänning (recognition) numeriusinkongruens: artikel huvudord: den röda stolarna - Feldiagnos (diagnosis) artikeln står i singularis istället för pluralis: den de substantivet står i pluralis istället för singularis: stolarna stolen 20
Grammatikkontrollens faser - Feldetektering(detection) Fel i nominalfrasen(np): den röda stolarna - Feligenkänning (recognition) numeriusinkongruens: artikel huvudord: den röda stolarna - Feldiagnos (diagnosis) artikeln står i singularis istället för pluralis: den de substantivet står i pluralis istället för singularis: stolarna stolen - Felkorrigering(correction) de röda stolarna den röda stolen 21
Problem 22
Problem - Hur kan man hitta så många fel som möjligt utan att alltför många korrekta meningar bedöms som felaktiga? 23
Problem - Hur kan man hitta så många fel som möjligt utan att alltför många korrekta meningar bedöms som felaktiga? - Komplexa strukturer: Exempel: De i stycket 7 stadgade punkterna. 24
Problem - Hur kan man hitta så många fel som möjligt utan att alltför många korrekta meningar bedöms som felaktiga? - Komplexa strukturer: Exempel: De i stycket 7 stadgade punkterna. - Begränsning på meningsnivå: Exempel: Jag såg bra datorer i butiken. Den vara ganska dyr. 25
Problem - Hur kan man hitta så många fel som möjligt utan att alltför många korrekta meningar bedöms som felaktiga? - Komplexa strukturer: Exempel: De i stycket 7 stadgade punkterna. - Begränsning på meningsnivå: Exempel: Jag såg bra datorer i butiken. Den vara ganska dyr. - Hur gör man med dialekter? Exempel: Denna stolen är svart. 26
Granska 27
Granska - Utvecklat på Nada, KTH - Använder ett lexikon och en samling regler 28
Granska uppbyggnad Tokeniseraren Tokeniserar med hjälp av reguljära uttryck Taggaren Lexikon(SUC och SAOL) Statistik(SUC) Regelmatcharen 300 granskningsregler ordböjningsfunktion Grafiskt gränsnitt 29
Granska uppbyggnad Exempel på taggningar: kvinnan kvinna nn.utr.sin.def.nom hade ha vb.prt.akt.aux gått gå vb.sup.akt 30
Granska Körexempel Källa: http://skrutten.nada.kth.se/granska/ 31
Granska Körexempel Skriv in en mening här. Skicka iväg meningen till Granska. Källa: http://skrutten.nada.kth.se/granska/ 32
Granska Körexempel - Resultat Källa: http://skrutten.nada.kth.se/granska/ 33
Granska Körexempel - Resultat detection Källa: http://skrutten.nada.kth.se/granska/ 34
Granska Körexempel - Resultat detection diagnosis Källa: http://skrutten.nada.kth.se/granska/ 35
Granska Körexempel - Resultat detection diagnosis Källa: http://skrutten.nada.kth.se/granska/ correction 36
Granska Skapa regler 37
Granska Skapa regler - Först skapar men en kategori som man kan samla reglerna i ( jämför klass i java) 38
Granska Skapa regler - Först skapar men en kategori som man kan samla reglerna i ( jämför klass i java) - Sedan skapar man reglerna och talar om i vilken varje regel tillhör (jämför metoder i java) 39
Granska Deklarera en kategori Syntaxen för att deklarera en kategori ser ut så här: category regelkategori info("exempelregler") link ("url" "namn på länk") 40
Granska Deklarera en kategori Syntaxen för att deklarera en kategori ser ut så här: category regelkategori info("exempelregler") link ("url" "namn på länk") category reserverat ord som talar om att vi skapar en kategori 41
Granska Deklarera en kategori Syntaxen för att deklarera en kategori ser ut så här: category regelkategori info("exempelregler") link ("url" "namn på länk") category reserverat ord som talar om att vi skapar en kategori regelkategori samlingsnamn för de regler man skapar 42
Granska Deklarera en kategori Syntaxen för att deklarera en kategori ser ut så här: category regelkategori info("exempelregler") link ("url" "namn på länk") category reserverat ord som talar om att vi skapar en kategori regelkategori samlingsnamn för de regler man skapar info("exempelregler") innehåller en generell kommentar om reglerna 43
Granska Deklarera en kategori Syntaxen för att deklarera en kategori ser ut så här: category regelkategori info("exempelregler") link ("url" "namn på länk") category reserverat ord som talar om att vi skapar en kategori regelkategori samlingsnamn för de regler man skapar info("exempelregler") innehåller en generell kommentar om reglerna link("url", "namn på länk") 44 innehåller håller url:en till sidan med mer information om reglerna
Granska Exempel Så här skapar man kategorin minaregler: category minaregler info("mina regler") link("" "") 45
Granska Deklarera en regel Syntaxen för att skapa en regel ser ut så här: regelnamn@regelkategori X_0()... X_n() konsekvens_0... konsekvens_n 46
Granska Deklarera en regel Syntaxen för att skapa en regel ser ut så här: regelnamn@regelkategori X_0(),..., X_n() konsekvens_0... konsekvens_n regelnamn Namnet på regeln 47
Granska Deklarera en regel Syntaxen för att skapa en regel ser ut så här: regelnamn@regelkategori X_0(),..., X_n() konsekvens_0... konsekvens_n regelnamn Namnet på regeln regelkategori Vilken kategori regeln tillhör 48
Granska Deklarera en regel Syntaxen för att skapa en regel ser ut så här: regelnamn@regelkategori X_0(),..., X_n() konsekvens_0... konsekvens_n X_0(),..., X_n() Matchningsvariabler som måste vara uppfyllda innan man kan använda regeln. 49
Granska Deklarera en regel Syntaxen för att skapa en regel ser ut så här: regelnamn@regelkategori X_0(),..., X_n() konsekvens_0... konsekvens_n konsekvens_0... konsekvens_n Det som ska hända när man exekverar regeln. 50
Granska Exempel tabortdubbletter@minaregler ORD1(), ORD2(text=ORD1.text) mark(ord1 ORD2) corr(ord1.delete()) 51
Granska Exempel1 tabortdubbletter@minaregler ORD1(), ORD2(text=ORD1.text) mark(ord1 ORD2) corr(ord1.delete()) tabortdubletter namnet på regeln 52
Granska Exempel1 tabortdubbletter@minaregler ORD1(), ORD2(text=ORD1.text) mark(ord1 ORD2) corr(ord1.delete()) tabortdubletter namnet på regeln minaregler den kategori av regler som regeln tillhör 53
Granska Exempel1 tabortdubbletter@minaregler ORD1(), ORD2(text=ORD1.text) mark(ord1 ORD2) corr(ord1.delete()) tabortdubletter namnet på regeln minaregler den kategori av regler som regeln tillhör ORD1 det första ordet som vi hittar 54
Granska Exempel1 tabortdubbletter@minaregler ORD1(), ORD2(text=ORD1.text) mark(ord1 ORD2) corr(ord1.delete()) tabortdubletter namnet på regeln minaregler den kategori av regler som regeln tillhör ORD1 det första ordet som vi hittar ORD2(text=ORD1.text) den lexikala strängen för ORD2 måste vara samma som för ORD1 55
Granska Exempel1 tabortdubbletter@minaregler ORD1(), ORD2(text=ORD1.text) mark(ord1 ORD2) corr(ord1.delete()) tabortdubletter namnet på regeln minaregler den kategori av regler som regeln tillhör ORD1 det första ordet som vi hittar ORD2(text=ORD1.text) den lexikala strängen för ORD2 måste vara samma som för ORD1 mark(ord1, ORD2) markera ORD1 och ORD2 56
Granska Exempel1 tabortdubbletter@minaregler ORD1(), ORD2(text=ORD1.text) mark(ord1 ORD2) corr(ord1.delete()) tabortdubletter namnet på regeln minaregler den kategori av regler som regeln tillhör ORD1 det första ordet som vi hittar ORD2(text=ORD1.text) den lexikala strängen för ORD2 måste vara samma som för ORD1 mark(ord1, ORD2) ORD1.delete() markera ORD1 och ORD2 ta bort ORD1 57
Granska Exempel1 tabortdubbletter@minaregler ORD1(), ORD2(text=ORD1.text) mark(ord1 ORD2) corr(ord1.delete()) tabortdubletter namnet på regeln minaregler den kategori av regler som regeln tillhör ORD1 det första ordet som vi hittar ORD2(text=ORD1.text) den lexikala strängen för ORD2 måste vara samma som för ORD1 mark(ord1, ORD2) ORD1.delete() corr() markera ORD1 och ORD2 ta bort ORD1 talar om att man vill ändra på något 58
Granska Exempel1 tabortdubbletter@minaregler ORD1(), ORD2(text=ORD1.text) mark(ord1 ORD2) corr(ord1.delete()) talar om att regeln är en granskningsregel för stavnings- och grammatikkontroll 59
Granska Exempel1 Exekvering tabortdubbletter@minaregler ORD1(), ORD2(text=ORD1.text) mark(ord1 ORD2) corr(ord1.delete()) indata: ett träd träd utdata: 60
Granska Exempel1 Exekvering tabortdubbletter@minaregler ORD1(), ORD2(text=ORD1.text) mark(ord1 ORD2) corr(ord1.delete()) indata: ett träd träd utdata: 61
Granska Exempel1 Exekvering tabortdubbletter@minaregler ORD1(), ORD2(text=ORD1.text) mark(ord1 ORD2) corr(ord1.delete()) indata: ett träd träd utdata: 62
Granska Exempel1 Exekvering tabortdubbletter@minaregler ORD1(), ORD2(text=ORD1.text) mark(ord1 ORD2) corr(ord1.delete()) indata: ett träd träd utdata: ett träd träd 63
Granska Exempel1 Exekvering tabortdubbletter@minaregler ORD1(), ORD2(text=ORD1.text) mark(ord1 ORD2) corr(ord1.delete()) indata: ett träd träd utdata: ett träd träd träd träd 64
Granska Exempel1 Exekvering tabortdubbletter@minaregler ORD1(), ORD2(text=ORD1.text) mark(ord1 ORD2) corr(ord1.delete()) indata: ett träd träd utdata: ett träd träd träd träd träd 65
Ersättningsförslag 66
Ersättningsförslag - ORD1.delete() -- tar bort ordet ORD1 67
Ersättningsförslag - ORD1.delete() -- tar bort ordet ORD1 - ORD1.insert(ORD2) -- sätter in ORD2 före ORD1 68
Ersättningsförslag - ORD1.delete() -- tar bort ordet ORD1 - ORD1.insert(ORD2) -- sätter in ORD2 före ORD1 - ORD1.join(ORD2) -- sätter ihop ORD1 och ORD2 till ett ord ORD1ORD2 69
Ersättningsförslag - ORD1.delete() -- tar bort ordet ORD1 - ORD1.insert(ORD2) -- sätter in ORD2 före ORD1 - ORD1.join(ORD2) -- sätter ihop ORD1 och ORD2 till ett ord ORD1ORD2 - ORD1.replace(ORD2) -- ersätter ORD1 med ORD2 70
Ersättningsförslag - ORD1.delete() -- tar bort ordet ORD1 - ORD1.insert(ORD2) -- sätter in ORD2 före ORD1 - ORD1.join(ORD2) -- sätter ihop ORD1 och ORD2 till ett ord ORD1ORD2 - ORD1.replace(ORD2) -- ersätter ORD1 med ORD2 - form(ord1.särdrag:=särdragsvärde) -- ersätter särdrag med särdragsvärde 71
Hur känner vi igen sammansättningar? 72
Hur känner vi igen sammansättningar? - enklaste strategin: ord = ord + ord Exempel: hus + bil = husbil 73
Hur känner vi igen sammansättningar? - enklaste strategin: ord = ord + ord Exempel: hus + bil = husbil - bättre strategi: ord = förled + ord Exempel: skola + bok = skolbok tangent + bord = tangentbord 74
Hur känner vi igen sammansättningar? - enklaste strategin: ord = ord + ord Exempel: hus + bil = husbil - bättre strategi: ord = förled + ord Exempel: skola + bok = skolbok tangent + bord = tangentbord - positivt: minskar antal felaktiga bedömningar 75
Hur känner vi igen sammansättningar? - enklaste strategin: ord = ord + ord Exempel: hus + bil = husbil - bättre strategi: ord = förled + ord Exempel: skola + bok = skolbok tangent + bord = tangentbord - positivt: minskar antal felaktiga bedömningar - negativt: kan öka antalet missade fel 76
Granska Exempel2 sammansattning@minaregler ORD1(wordcl=dt), ORD2(wordcl=nn & gender!=ord1.gender), ORD3(wordcl=nn & gender=ord1.gender) mark(ord2 ORD3) corr(ord2.join(ord3.real_text)) sammansattning namnet på regeln 77
Granska Exempel2 sammansattning@minaregler ORD1(wordcl=dt), ORD2(wordcl=nn & gender!=ord1.gender), ORD3(wordcl=nn & gender=ord1.gender) mark(ord2 ORD3) corr(ord2.join(ord3.real_text)) sammansattning namnet på regeln minaregler den kategori av regler som regeln tillhör 78
Granska Exempel2 sammansattning@minaregler ORD1(wordcl=dt), ORD2(wordcl=nn & gender!=ord1.gender), ORD3(wordcl=nn & gender=ord1.gender) mark(ord2 ORD3) corr(ord2.join(ord3.real_text)) sammansattning namnet på regeln minaregler den kategori av regler som regeln tillhör ORD1(wordcl=dt) det första ordet vi hittar och som har ordklassen artikel(dt) 79
Granska Exempel2 sammansattning@minaregler ORD1(wordcl=dt), ORD2(wordcl=nn & gender!=ord1.gender), ORD3(wordcl=nn & gender=ord1.gender) mark(ord2 ORD3) corr(ord2.join(ord3.real_text)) sammansattning namnet på regeln minaregler den kategori av regler som regeln tillhör ORD1(wordcl=dt) det första ordet vi hittar och som har ordklassen artikel(dt) ORD2(wordcl=nn & gender!=ord1.gender) ordet som kommer efter ORD1 måste vara ett substantiv(nn) och inte ha samma genus(gender) som ORD1 80
Granska Exempel2 sammansattning@minaregler ORD1(wordcl=dt), ORD2(wordcl=nn & gender!=ord1.gender), ORD3(wordcl=nn & gender=ord1.gender) mark(ord2 ORD3) corr(ord2.join(ord3.real_text)) ORD2(wordcl=nn & gender!=ord1.gender) ordet som kommer efter ORD1 måste vara ett substantiv(nn) och inte ha samma genus(gender) som ORD1 ORD3(wordcl=nn & gender=ord1.gender) ordet som kommer efter ORD1 måste vara ett substantiv(nn) och ha samma genus(gender) som ORD1 81
Granska Exempel2 sammansattning@minaregler ORD1(wordcl=dt), ORD2(wordcl=nn & gender!=ord1.gender), ORD3(wordcl=nn & gender=ord1.gender) mark(ord2 ORD3) corr(ord2.join(ord3.real_text)) mark(ord2, ORD3) markera ORD2 och ORD3 82
Granska Exempel2 sammansattning@minaregler ORD1(wordcl=dt), ORD2(wordcl=nn & gender!=ord1.gender), ORD3(wordcl=nn & gender=ord1.gender) mark(ord2 ORD3) corr(ord2.join(ord3.real_text)) mark(ord2, ORD3) ORD3.real_text markera ORD2 och ORD3 - ordets teckensträng 83
Granska Exempel2 sammansattning@minaregler ORD1(wordcl=dt), ORD2(wordcl=nn & gender!=ord1.gender), ORD3(wordcl=nn & gender=ord1.gender) mark(ord2 ORD3) corr(ord2.join(ord3.real_text)) mark(ord2, ORD3) ORD3.real_text join() markera ORD2 och ORD3 - ordets teckensträng - sätter ihop två strängar till en 84
Granska Exempel2 sammansattning@minaregler ORD1(wordcl=dt), ORD2(wordcl=nn & gender!=ord1.gender), ORD3(wordcl=nn & gender=ord1.gender) mark(ord2 ORD3) corr(ord2.join(ord3.real_text)) mark(ord2, ORD3) ORD3.real_text join() corr() markera ORD2 och ORD3 - ordets teckensträng - sätter ihop två strängar till en - talar om att man vill ändra på något 85
Granska Exempel2 sammansattning@minaregler ORD1(wordcl=dt), ORD2(wordcl=nn & gender!=ord1.gender), ORD3(wordcl=nn & gender=ord1.gender) mark(ord2 ORD3) corr(ord2.join(ord3.real_text)) mark(ord2, ORD3) ORD3.real_text join() corr() markera ORD2 och ORD3 - ordets teckensträng - sätter ihop två strängar till en - talar om att man vill ändra på något talar om att regeln är en granskningsregel för stavnings- och grammatikkontroll 86
Granska Exempel2 Exekvering sammansattning@minaregler ORD1(wordcl=dt), ORD2(wordcl=nn & gender!=ord1.gender), ORD3(wordcl=nn & gender=ord1.gender) mark(ord2 ORD3) corr(ord2.join(ord3.real_text)) indata: en <dt.utr.sin.ind> spel <nn.neu.sin.ind.nom> korg <nn.utr.sin.ind.nom> utdata: 87
Granska Exempel2 Exekvering sammansattning@minaregler ORD1(wordcl=dt), ORD2(wordcl=nn & gender!=ord1.gender), ORD3(wordcl=nn & gender=ord1.gender) mark(ord2 ORD3) corr(ord2.join(ord3.real_text)) indata: en <dt.utr.sin.ind> spel <nn.neu.sin.ind.nom> korg <nn.utr.sin.ind.nom> utdata: 88
Granska Exempel2 Exekvering sammansattning@minaregler ORD1(wordcl=dt), ORD2(wordcl=nn & gender!=ord1.gender), ORD3(wordcl=nn & gender=ord1.gender) mark(ord2 ORD3) corr(ord2.join(ord3.real_text)) indata: en <dt.utr.sin.ind> spel <nn.neu.sin.ind.nom> korg <nn.utr.sin.ind.nom> utdata: 89
Granska Exempel2 Exekvering sammansattning@minaregler ORD1(wordcl=dt), ORD2(wordcl=nn & gender!=ord1.gender), ORD3(wordcl=nn & gender=ord1.gender) mark(ord2 ORD3) corr(ord2.join(ord3.real_text)) indata: en <dt.utr.sin.ind> spel <nn.neu.sin.ind.nom> korg <nn.utr.sin.ind.nom> utdata: 90
Granska Exempel2 Exekvering sammansattning@minaregler ORD1(wordcl=dt), ORD2(wordcl=nn & gender!=ord1.gender), ORD3(wordcl=nn & gender=ord1.gender) mark(ord2 ORD3) corr(ord2.join(ord3.real_text)) indata: en <dt.utr.sin.ind> spel <nn.neu.sin.ind.nom> korg <nn.utr.sin.ind.nom> utdata: 91
Granska Exempel2 Exekvering sammansattning@minaregler ORD1(wordcl=dt), ORD2(wordcl=nn & gender!=ord1.gender), ORD3(wordcl=nn & gender=ord1.gender) mark(ord2 ORD3) corr(ord2.join(ord3.real_text)) indata: en <dt.utr.sin.ind> spel <nn.neu.sin.ind.nom> korg <nn.utr.sin.ind.nom> utdata: 92
Granska Exempel2 Exekvering sammansattning@minaregler ORD1(wordcl=dt), ORD2(wordcl=nn & gender!=ord1.gender), ORD3(wordcl=nn & gender=ord1.gender) mark(ord2 ORD3) corr(ord2.join(ord3.real_text)) indata: en <dt.utr.sin.ind> spel <nn.neu.sin.ind.nom> korg <nn.utr.sin.ind.nom> utdata: en spel korg 93
Granska Exempel2 Exekvering sammansattning@minaregler ORD1(wordcl=dt), ORD2(wordcl=nn & gender!=ord1.gender), ORD3(wordcl=nn & gender=ord1.gender) mark(ord2 ORD3) corr(ord2.join(ord3.real_text)) indata: en <dt.utr.sin.ind> spel <nn.neu.sin.ind.nom> korg <nn.utr.sin.ind.nom> utdata: en spel korg spel korg spel 94
Granska Exempel2 Exekvering sammansattning@minaregler ORD1(wordcl=dt), ORD2(wordcl=nn & gender!=ord1.gender), ORD3(wordcl=nn & gender=ord1.gender) mark(ord2 ORD3) corr(ord2.join(ord3.real_text)) indata: en <dt.utr.sin.ind> spel <nn.neu.sin.ind.nom> korg <nn.utr.sin.ind.nom> utdata: en spel korg spel korg spelkorg 95
Granska Exempel2 Exekvering sammansattning@minaregler ORD1(wordcl=dt), ORD2(wordcl=nn & gender!=ord1.gender), ORD3(wordcl=nn & gender=ord1.gender) mark(ord2 ORD3) corr(ord2.join(ord3.real_text)) indata: en <dt.utr.sin.ind> spel <nn.neu.sin.ind.nom> korg <nn.utr.sin.ind.nom> utdata: en spel korg spel korg spelkorg 96
Kongruensfel Exempel: det stora katten Hur skriver vi en regel för att upptäcka att det ska bytas ut mot den? 97
Granska Exempel3 nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) 98
Granska Exempel3 nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) nykongruens namnet på regeln 99
Granska Exempel3 nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) nykongruens minaregler namnet på regeln den kategori av regler som regeln tillhör 100
Granska Exempel3 nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) nykongruens namnet på regeln minaregler den kategori av regler som regeln tillhör ORD1(wordcl=dt) det första ordet vi hittar och som har ordklassen artikel(dt) 101
Granska Exempel3 nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) Nykongruens namnet på regeln minaregler den kategori av regler som regeln tillhör ORD1(wordcl=dt) det första ordet vi hittar och som har ordklassen artikel(dt) ORD2(wordcl=jj) det andra ordet vi hittar och som har ordklassen adjektiv(jj) 102
Granska Exempel3 nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) wordcl=nn % ordet måste vara ett substantiv 103
Granska Exempel3 nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) wordcl=nn % ordet måste vara ett substantiv gender!=ord1.gender % ordet får inte ha samma genus som % ORD1 104
Granska Exempel3 nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) wordcl=nn % ordet måste vara ett substantiv gender!=ord1.gender % ordet får inte ha samma genus som % ORD1 gender==ord2.gender % ordet ska ha samma genus som % ORD2 105
Granska Exempel3 nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) num=ord2.num % ordet ska ha samma numerus som ORD2 106
Granska Exempel3 nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) spec=ord2.spec % ordet ska ha samma species som ORD2 107
Granska Exempel3 nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) ORD3 är ett substantiv(nn), har inte samma genus som ORD1, har samma genus som ORD2, har samma numerus som ORD2 och samma species som ORD2. 108
Granska Exempel3 Exekvering nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) indata: det <dt.neu.sin.def> stora <jj.pos.utr/neu.sin.def.nom> katten <nn.utr.sin.def.nom> 109
Granska Exempel3 Exekvering nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) indata: det <dt.neu.sin.def> stora <jj.pos.utr/neu.sin.def.nom> katten <nn.utr.sin.def.nom> 110
Granska Exempel3 Exekvering nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) indata: det <dt.neu.sin.def> stora <jj.pos.utr/neu.sin.def.nom> katten <nn.utr.sin.def.nom> 111
Granska Exempel3 Exekvering nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) indata: det <dt.neu.sin.def> stora <jj.pos.utr/neu.sin.def.nom> katten <nn.utr.sin.def.nom> 112
Granska Exempel3 Exekvering nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) indata: det <dt.neu.sin.def> stora <jj.pos.utr/neu.sin.def.nom> katten <nn.utr.sin.def.nom> 113
Granska Exempel3 Exekvering nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) indata: det <dt.neu.sin.def> stora <jj.pos.utr/neu.sin.def.nom> katten <nn.utr.sin.def.nom> 114
Granska Exempel3 Exekvering nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) indata: det <dt.neu.sin.def> stora <jj.pos.utr/neu.sin.def.nom> katten <nn.utr.sin.def.nom> 115
Granska Exempel3 Exekvering nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) indata: det <dt.neu.sin.def> stora <jj.pos.utr/neu.sin.def.nom> katten <nn.utr.sin.def.nom> 116
Granska Exempel3 Exekvering nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) indata: det <dt.neu.sin.def> stora <jj.pos.utr/neu.sin.def.nom> katten <nn.utr.sin.def.nom> utdata: det stora katten 117
Granska Exempel3 Exekvering nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) indata: det <dt.neu.sin.def> stora <jj.pos.utr/neu.sin.def.nom> katten <nn.utr.sin.def.nom> utdata: det stora katten den <dt.utr.sin.def> 118
Granska Exempel3 Exekvering nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) indata: det <dt.neu.sin.def> stora <jj.pos.utr/neu.sin.def.nom> katten <nn.utr.sin.def.nom> utdata: det stora katten den <dt.utr.sin.def> 119
Granska Exempel3 Exekvering nykongruens@minaregler ORD1(wordcl=dt), ORD2(wordcl=jj), ORD3(wordcl=nn & gender!=ord1.gender & gender=ord2.gender & num=ord2.num & spec=ord2.spec) mark(ord1 ORD2 ORD3) corr(ord1.form(gender:=ord3.gender)) indata: det <dt.neu.sin.def> stora <jj.pos.utr/neu.sin.def.nom> katten <nn.utr.sin.def.nom> utdata: det stora katten den <dt.utr.sin.def> stora katten 120
Alternativa ersättningsförslag Exempel: en dator Ersättningsförslag: en dator några datorer Hur skriver man en regel för detta? 121
Alternativa ersättningsförslag Exempel tvacorr@minaregler DT(wordcl=dt), NN(wordcl=nn & num!=dt.num) corr(dt.form(num:=nn.num)) % byt ut artikeln corr(nn.form(num:=dt.num)) % byt ut substantivet 122
Alternativa ersättningsförslag Exempel tvacorr@minaregler DT(wordcl=dt), NN(wordcl=nn & num!=dt.num) corr(dt.form(num:=nn.num)) % byt ut artikeln corr(nn.form(num:=dt.num)) % byt ut substantivet DT(wordcl=dt) det första ordet är en artikel(dt) 123
Alternativa ersättningsförslag Exempel tvacorr@minaregler DT(wordcl=dt), NN(wordcl=nn & num!=dt.num) corr(dt.form(num:=nn.num)) % byt ut artikeln corr(nn.form(num:=dt.num)) % byt ut substantivet DT(wordcl=dt) det första ordet är en artikel(dt) NN(wordcl=nn & num!=dt.num) det andra ordet är ett substantiv(nn) och har inte samma numerus(num) som artikeln 124
Alternativa ersättningsförslag Exempel tvacorr@minaregler DT(wordcl=dt), NN(wordcl=nn & num!=dt.num) corr(dt.form(num:=nn.num)) % byt ut artikeln corr(nn.form(num:=dt.num)) % byt ut substantivet corr(dt.form(num:=nn.num)) artikeln får samma numerus som substantivet 125
Alternativa ersättningsförslag Exempel tvacorr@minaregler DT(wordcl=dt), NN(wordcl=nn & num!=dt.num) corr(dt.form(num:=nn.num)) % byt ut artikeln corr(nn.form(num:=dt.num)) % byt ut substantivet corr(dt.form(num:=nn.num)) artikeln får samma numerus som substantivet corr(nn.form(num:=dt.num)) substantivet får samma numerus som artikeln 126
Alternativa ersättningsförslag Exempel tvacorr@minaregler DT(wordcl=dt), NN(wordcl=nn & num!=dt.num) corr(dt.form(num:=nn.num)) % byt ut artikeln corr(nn.form(num:=dt.num)) % byt ut substantivet 127
Alternativa ersättningsförslag Exempel tvacorr@minaregler DT(wordcl=dt), NN(wordcl=nn & num!=dt.num) corr(dt.form(num:=nn.num)) % byt ut artikeln corr(nn.form(num:=dt.num)) % byt ut substantivet indata: en <dt.utr.sin.ind> datorer <nn.utr.plu.ind.nom> 128
Alternativa ersättningsförslag Exempel tvacorr@minaregler DT(wordcl=dt), NN(wordcl=nn & num!=dt.num) corr(dt.form(num:=nn.num)) % byt ut artikeln corr(nn.form(num:=dt.num)) % byt ut substantivet indata: en <dt.utr.sin.ind> datorer <nn.utr.plu.ind.nom> 129
Alternativa ersättningsförslag Exempel tvacorr@minaregler DT(wordcl=dt), NN(wordcl=nn & num!=dt.num) corr(dt.form(num:=nn.num)) % byt ut artikeln corr(nn.form(num:=dt.num)) % byt ut substantivet indata: en <dt.utr.sin.ind> datorer <nn.utr.plu.ind.nom> 130
Alternativa ersättningsförslag Exempel tvacorr@minaregler DT(wordcl=dt), NN(wordcl=nn & num!=dt.num) corr(dt.form(num:=nn.num)) % byt ut artikeln corr(nn.form(num:=dt.num)) % byt ut substantivet indata: en <dt.utr.sin.ind> datorer <nn.utr.plu.ind.nom> 131
Alternativa ersättningsförslag Exempel tvacorr@minaregler DT(wordcl=dt), NN(wordcl=nn & num!=dt.num) corr(dt.form(num:=nn.num)) % byt ut artikeln corr(nn.form(num:=dt.num)) % byt ut substantivet indata: en <dt.utr.sin.ind> datorer <nn.utr.plu.ind.nom> utdata: några <dt.utr/neu.plu.ind> datorer 132
Alternativa ersättningsförslag Exempel tvacorr@minaregler DT(wordcl=dt), NN(wordcl=nn & num!=dt.num) corr(dt.form(num:=nn.num)) % byt ut artikeln corr(nn.form(num:=dt.num)) % byt ut substantivet indata: en <dt.utr.sin.ind> datorer <nn.utr.plu.ind.nom> utdata: en dator <nn.utr.sin.ind.nom> några <dt.utr/neu.plu.ind> datorer 133
Alternativa ersättningsförslag Exempel tvacorr@minaregler DT(wordcl=dt), NN(wordcl=nn & num!=dt.num) corr(dt.form(num:=nn.num)) % byt ut artikeln corr(nn.form(num:=dt.num)) % byt ut substantivet indata: en <dt.utr.sin.ind> datorer <nn.utr.plu.ind.nom> utdata: en dator <nn.utr.sin.ind.nom> några <dt.utr/neu.plu.ind> datorer 134
Hoppa mellan reglerna 135
Hoppa mellan reglerna - Reglerna i granska exekveras i samma ordning som de står i 136
Hoppa mellan reglerna - Reglerna i granska exekveras i samma ordning som de står i - För att hoppa frammåt i reglerna, kan man använda jump(läge) 137
Hoppa mellan reglerna - Reglerna i granska exekveras i samma ordning som de står i - För att hoppa frammåt i reglerna, kan man använda jump(läge) - För att skapa ett läge skriver man läge: 138
Hoppa mellan reglerna - Reglerna i granska exekveras i samma ordning som de står i - För att hoppa frammåt i reglerna, kan man använda jump(läge) - För att skapa ett läge skriver man läge: - Regelsamlingen blir då så här: regler... läge-etikett: fler regler... 139
Hoppa mellan reglerna - Reglerna i granska exekveras i samma ordning som de står i - För att hoppa frammåt i reglerna, kan man använda jump(läge) - För att skapa ett läge skriver man läge: - Regelsamlingen blir då så här: regler... läge-etikett: fler regler... - Om man vill hoppa till början av reglerna kan man skriva jump(beginlabel) 140
Hoppa mellan reglerna - Exempel minjump@minaregler DT(wordcl=dt), NN(wordcl=nn & num!=dt.num) mark(dt, NN) jump(etikett)... etikett: När jump(etikett) körs, hoppar man ner till etikett. 141
Nästa gång Minsta redigeringsavstånd (för strängar) - Fler verktyg 142