Identifiering av ordvitsar med Granska

Relevanta dokument
Taggning av räkneord som årtal eller andra räkneord, Språkteknologi 2D1418, HT 01 Jonas Sjöbergh, , 15 oktober 2001

Kungliga Tekniska Högskolan Patrik Dallmann

Innehåll. Grammatikkontroll i Granska. Problemställning. Datorstöd för skrivande. Vilka metoder finns? Granskas uppbyggnad

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

Innehåll GRAMMATIKKONTROLL I GRANSKA. Datorstöd för skrivande. Problemställning. Ola Knutsson

Föreläsning 7: Syntaxanalys

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

Programmering II (ID1019) :00-11:00

BLOCK 1. 1A. Att komma igång

Uppgift 1 (grundläggande konstruktioner)

Dependensregler - Lathund

Programmering för språkteknologer II, HT2014. Rum

LEGO Robot programmering och felsökning Hur svårt ska det vara att följa den svarta linjen?

FUZZY LOGIC. Christopher Palm chrpa087

Lathund för Stava Rex

Lexikal semantik. Lingvistik 1. Hanna Seppälä Uppsala universitet 1

TENTAMEN OOP

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

PROGRAMMERING-JAVA TENTAMINA

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

JavaScript del 3 If, Operatorer och Confirm

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Lektion 8: Konstruktion av semantiska tablåer för PTL-formler

Programmering II (ID1019) :00-12:00

Text och galleri på fotoklubbens nya hemsida

Laboration A Objektsamlingar

Tentamen Grundläggande programmering

Grafer MST Top. sortering Starkt samm. komponenter Kortaste avstånd. Grafalgoritmer 1. Douglas Wikström KTH Stockholm

Kungl. Tekniska högskolan NADA Grundformer med Stava

TIPS OCH IDÉER för Windows XP och Word 2003

Så här fungerar Stava Rex

Laboration: Whitebox- och blackboxtesting

Programkonstruktion. Tentamen,

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Bakgrund. Bakgrund. Bakgrund. Håkan Jonsson Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige

DD1361 Programmeringsparadigm. Carina Edlund

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Lektion 2: Sökagenter. Robin Keskisärkkä

Tentamen i Objektorienterad programmering

Arduinokurs. Kurstillfälle 4

Författarhandledning för kholm.se

Inför genomförandet av ThomasGIA

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

12. Relationer och funktioner

Tentamen, Algoritmer och datastrukturer

TUTORIAL: KLASSER & OBJEKT

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Använda SpellRight 2 i Word 2010

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Föreläsning 8: Aritmetik och stora heltal

Skrivstöd. Joakim Nivre. Introduktion till språkteknologi. Skrivstöd. Inledning. Orsaker till stavfel. Detektering av icke-ord

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

PROGRAMMERING-Java TENTAMINA

Bootstrapping för substantivtaggning

Användarhandledning Version 1.2

729G11 Artificiell Intelligens Marcus Johansson Marjo581. Fuzzy logic. Marcus Johansson Marjo581

Tentamen Del A. Marco Kuhlmann

Backcode. Jonathan Crusoe TDP019 Projekt: Datorspråk Linköpings universitet

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

Tentamen i Introduktion till programmering

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Innehåll B-nivå B.1 Två olika konsonanter i rad; i slutet och i början av ord.

RIKTLINJER FÖR GRANSKNING AV GEMENSKAPSVARUMÄRKEN VID KONTORET FÖR HARMONISERING INOM DEN INRE MARKNADEN (VARUMÄRKEN OCH MÖNSTER) DEL A

Tentamen, EDAA10 Programmering i Java

10. Moralisk fiktionalism och ickedeskriptiv

Exempeltenta GruDat 2002/2003

Vi tror på att kommunikation ska vara roligt - därför är Prata utformad för att

Dokumentmallar i praktiken, Nyps

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Kritiskt tänkande HTXF04:3 FTEB05. Grundläggande semantik II

de var svåra att implementera och var väldigt ineffektiva.

Lexikon: ordbildning och lexikalisering

Systemutvecklare SU13, Malmö

Algoritmer, datastrukturer och komplexitet

Obesvarade frågor från F4

Hur bestämmer man vilka fonem ett språk har? Fonologi. Kommutationstest. Hur bestämmer man vilka fonem ett språk har?

Lathund för SpellRight

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

Använda Stava Rex i Word 2010

StoCKK Stockholm Center för Kommunikativt och Kognitivt stöd. Tips på appar för träning av tidig läs- och skrivförmåga

NKRR. Regelskrivning i praktiken

Programsnickaren. Grunderna för hur du kommer igång och arbetar med Programsnickaren till Micro Rolltalk. Habilitering & Hjälpmedel

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Grim. Några förslag på hur du kan använda Grim. Version 0.8

Svensk nationell datatjänst, SND BAS Online

Grundkurs i programmering, 6 hp (725G61) Dugga 1 tillfälle 3

Objektorientering i liten skala

Programmeringsteknik I

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Laboration 6 Formulär och stränghantering övningar/uppgifter

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Semantik. Semantik och språkteknologi

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Antag att följande träd genereras i ett spelförande program om vi applicerar evalueringsfunktionen

TDP015: Lektion 5 - Svar

Föreläsning 10. Besiktningsprotokollet

Visual Basic, en snabbgenomgång

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 25 maj 2009

Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass.

Transkript:

Identifiering av ordvitsar med Granska jonord@kth.se Inledning För att försöka identifiera ordvitsar med Granska användes ett litet urval av ordvitsar hämtade från olika ställen. Målet med identifiering är att hitta allt som tillnärmelsevis kan vara en ordvits strävan ligger i hög täckning och inte hög precision. Med hjälp av bra kommentarer till träffarna ska man själv kunna utröna om det är en ordvits eller inte. Nedan presenteras en genomgång av några olika ordvitsar, kategoriserade i vad som föreföll lämpliga kategorier. Ordvitskategorier Ihopskrivningar Exempel på en ihopskrivning som bildar enb lustighet: "Mitt galleri finns det inga galler i." Denna är enkel att identifiera. De två sista orden slås ihop och matchas med det första. : galleri@ordvits { X(, X1(*, Y(, Z(smart_concat(Y.real_text,real_text = X.real_text

detect("mitt galleri finns det inga galler i." mark(x Y Z info ("Det är roligt för " Y " och " Z " bildar " X corr(x Y.join(Z.text Falsklarm Inga falskalarm uppträdde i testtexterna. Uttalsberoende ordvitsar Ytterligare exempel i kategorin ihopskrivningar, här med uttalsliknelser: "Hästen stod på ängen, det var poängen." Denna liknar vitsen om galleriet, förutom att det anspelar på uttalet och inte enbart stavningen. Tanken var här att använda stava för rättstava det ihopslagna "påängen" till "poängen" och därav finna det roliga. En exempelregel för detta kan se ut enligt nedan: poäng@ordvits { X(, X1(, Y(*, Z(spell_corr(smart_concat(X.text,X1.text = text... spell_corr( returnerar en sträng bestående av samtliga rättstavelseförslag, i fallet ovan blir de båda förslagen "poängen" och "påhängen". Detta resultat kan dock inte jämföras med text attributet, och således kan denna metod ej användas. En annan lösningsvariant på ovanstående problem hade varit att applicera föreslagna ändringar på texten och granska texten igen med tagging eller editing åtgärden enligt nedan. Nu är dessa åtgärder ej implementerade i Granska, varför ej heller denna lösning kunde genomföras. Eftersom ingen metod kunde lösa problemet tillfgreddställande, ändrades ursprungsvitsen till "Hästen stod på, det var påängen". Nu är "påängen" felstavat och vitsen är egentligen ingen vits längre, men detta valdes för att med framtida omtaggnings åtgärder ändå kunna identifiera sammansättningen. poängen@ordvits { X(, Y(, Y1(*, Z(real_text = smart_concat(x.real_text, Y.real_text

detect("hästen stod på ängen, det var påängen" mark(x Y Z info ("Det är roligt för " X " och " Y " bildar " Z Isärskrivningar som bildar ordvitsar Sammansatta ord som isärskrivna kan bilda lustigheter kan se ut enligt nedan: "Varför får inte jag äta smågrus, när fotbollslaget Åtvidaberg?" Den här vitsen är aningen knepigare då den innehåller helt olika ord. Gör man om meningien till "Jag åt vida berg eftersom fotbollslaget Åtvidaberg" blir det inte alls lika roligt, men betydligt enklare att analysera. Regler För att finns att "Åtvidaberg" kan bilda "åt vida berg" används nedanstående regel: åtvidaberg@ordvits { X(, X2(, X3(, Y(*, Z(length >= X.length+X2.length+X3.length & ( (X.text = text.substr(0, X.length X.lemma = text.substr(0, X.length & (X2.text = text.substr(x.length, X2.length X2.lemma = text.substr(x.length, X2.length & (X3.text = text.substr(x2.length+2, X3.length+2 X3.lemma = text.substr(x2.length+2, X3.length+2 detect("jag åt vida berg för att fotbollslaget Åtvidaberg" mark(x X2 X3 Z info ("Kul för att " Z " blir " Z.text.substr(0, X.length", " Z.text.substr(X.length, X2.length " och " (Z.text.substr(X2.length+2, X3.length+2 "(" X X2 X3 "" Denna regel delar upp ordet "Åtvidaberg" och jämför det med text och lemma attributet för tre föregående efter varandra följande ord. Lemma attributet sak förhoppningsvis öka täckningen av regeln. Dock hade det varit väldigt värdefullt att kunna få lemmat av "åt" i "Åtvidaberg". I och med att omtaggningsfunktionerna inte fungerar går

detta ej eftersom detta "åt" inte är något regelrätt ord utan enbart de två första bokstäverna ur "Åtvidaberg". Falskalarm Antingen kan man med denna regel få väldigt få falskalarm eller väldigt många. Som regelen är presenterad ovan, där text eller lemma måste matcha varje ord fås inga falskalarm ur testtexterna. Ändrar man till att tillåta att något delord matchas och något endast är rättstavat får man flera falskalarm, som att "samarbete" anses roligt eftersom "sa" och "mar" är rättstavade ord och "bete" matchas med "bete" någonstans i kontexten. För att identiera ytterligare vitsar skapade på snarlikt sätt skrevs en regel som identifierar alla ord som består av flera ord. Denna funktionalitet finns implementerad i Stava, men hur eller om den kan nås från Granskas regelspråk är oklart. båtvidaberg@ { Y(wordcl!=pn & vbt!=aux & wordcl!=sn & length > 3 & spell_ok(text.substr(0, length (length 2, TOKEN_SIMPLE_WORD & spell_ok(text.substr(length (length 2, length, TOKEN_SIMPLE_WORD mark(y info(y.text.substr(0, Y.length (Y.length 2 Y.text.substr(Y.length (Y.length 2, Y.length corr(y.delete( Y.insert(Y.text.substr(Y.length (Y.length 2, Y.length Y.insert(Y.text.substr(0, Y.length (Y.length 2 ; Y(length > 4 & spell_ok(text.substr(0, length (length 3, TOKEN_SIMPLE_WORD & spell_ok(text.substr(length (length 3, length, TOKEN_SIMPLE_WORD mark(y info( Y.text.substr(0, Y.length (Y.length 3 Y.text.substr(Y.length (Y.length 3, Y.length corr(y.delete( Y.insert(Y.text.substr(Y.length (Y.length 3, Y.length Y.insert(Y.text.substr(0, Y.length (Y.length 3 ;...

Det är helt enkelt en union av regler som identifierar delord i det större ordet. Dessa regler blir väldigt otympliga att läsa och skriva utan möjlighet till egendefinerierade variabler eller for loopar. En kortare vits som inte består av lika många delord är: "Jag målade mitt staket vitt, det var vitsen." Detta är roligt för att "vitsen" uttalas på samma sätt som "vitt sedan". "Vitsen" delas upp i de två fungerande orden "vit" och "sen" och lemmat av "vitt" jämförs med "vit". vitsen@ordvits { X(lemma.length>1 & spell_ok(text, token, W(*, Y(length>X.lemma.length & if (X.lemma = text.substr(0, X.lemma.length then true else false end & spell_ok(text.substr(0, X.lemma.length, TOKEN_SIMPLE_WORD & spell_ok(text.substr(x.lemma.length, length, TOKEN_SIMPLE_WORD detect("jag målade mitt staket vitt, det var vitsen." mark(x Y info("roligt för att " X.lemma " finns i " Y.text "." corr(y.delete( Y.insert(text.substr(X.lemma.length, Y.length Y.insert(text.substr(0, X.lemma.length Semantiskt relaterade ordvitsar "En man rodde åt väst, och den andre åt ost." Detta är roligt för att det sista kan tolkas som ett verb. osten@ordvits { W1(wordcl=vb, W2(wordcl=ab*, X(wordcl=pp, W3(*, Y(text=X.text & E(lex.wordcl=vb detect("den ena rodde åt väst, och den andre åt ost." mark(x Y info("kul, för att " Y.text " kan tolkas som ett verb, "

Ordvitsar med djupare semantisk innebörd Ordvitsar av mer semantisk karaktär är aningen krångligare att identifiera. Exempel på några som idnetifierats: "Två bagare och en smet." "Två knarkare och en drog." Här ligger det lustiga i "bagare" förknippas med "smet" som i deg, och att det även kan tolkas som ett verb (med försvinnande följd. För att identifiera dessa ordentligt måste man kunna koppla "smet" till "bagare" och"drog" till "knarkare". Detta skulle kunna göras på samma sätt som andra taggtolkningar med E, A och P funktionerna, med något synonym eller närhetsparslexikon bakom som skulle kunna räkna ut hur nära olika ord ligger varandra. Men, för att först överhuvudtaget notera det eventuellt roliga måste dubbeltolkningen av "smet" och "drog" identifieras. Ordvitsarna ovan kan identifieras med regeln nedan: synonym@ordvits{ X(cht=undef & sed=undef & wordcl!=rg & wordcl!=ro & wordcl!=dt & wordcl!=sn & wordcl!=dl & wordcl!=an & wordcl!=kn, W(*, Y(wordcl=nn & P(0.7, lex.wordcl=vb detect("två bagare och en smet." info("kan vara kul, för " Y " kan tolkas som ett verb också. Om " X.lemma " har ngt med " Y " att göra är det säkerligen roligt." link("http://www.synonymer.se/?queryx.lemma" "Link" Tanken med "link" ovan var att kunna koppla det till något externt lexikon, men att infoga attribut i länkadressen går inte. Falskalarm Även om det genereras en del falskalarm borde de flesta kunna förhindras genom att ovan nämnda närhetsparfunktion implementeras. Exemplet nedan skulle dock kunna vara ett exempel på en felaktigt identiferad ordvits, även med närhetsparfunktionen. "Diskopulsen finns också på plats, som en röd tråd genom varenda

låt." Kan vara kul, för låt kan tolkas som ett verb också. Om diskopuls har ngt med låt att göra är det säkerligen roligt. Dock skulle den tolkningen inte vara giltig svenksa, eftersom "låt" även ska kunna tolkas som verb, och detta skulle i sin tur kunna uppmärksammas om tagging/editing funktioner var implementerade. Slutdiskussion Även om de flesta regler som skrivits har gett upphov till flertalet falska alarm så borde detta ändå kunna ligga till grund för framtida arbete. Om editering och omtaggningsfunktionerna implementeras borde några ordvitsar blir mer lättidentifierade. För att identifiera mer semantiskt konstruerade ordvitsar måste någon sorts närhetsparfunktionealitet implementeras. Detta kunde rent tekniskt bestå av någon sorts synonymordbok eller närhetsberäkning med random indexing eller dylikt. I regelspråket kunde de lämpligen implementeras som kvantifikatorfunktionerna.