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.