Ontologisk tekstsgning Niels Castle Andersen, Per Drge, Thomas Hald Frandsen og Rasmus Knappe Vejleder: Troels Andreasen Datalogispeciale Roskilde Universitetscenter 5. oktober 2000
Resume In this Master Thesis principles are proposed and demonstrated, that improve the performance of Information Retrieval systems, beyond the capabilities of traditional keyword based systems. The principles focus on identi cation, representation and evaluation of concepts in natural language as well as the use of ontological, id est semantic and lexical, relations in query modi cation. We propose a model for decomposition of natural language into descriptive phrases. The descriptive phrases and proposed model serve as a base for identi cation and representation of concepts. Normative guidelines are proposed for the evaluation of concepts by semantic and lexical relations. On the foundations of the proposed principles and model, we build a prototype text retrieval system. The prototype is developed in PL/SQL on an Oracle database server. Based on an analysis of the implemented prototype it is concluded that text retrieval systems that employ natural language processing and query modi cation can bene t from the adaption of machine readable dictionaries with semantic and lexical relations.
Keywords: Information Retrieval, Natural Language Processing, Query Modi cation, Ontology, Content Analysis and Indexing, Models and Principles.
Indhold 1 Indledning 1.1 1.2 1.3 1.4 1.5
Forord . . . . . . . . Motivation . . . . . Problemfelt . . . . . Problemformulering Metode . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
2 Baggrund og betragtninger
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
2.1 Hvad er et godt svar? . . . . . . . . . . . . . . . . 2.1.1 Grice maksimer . . . . . . . . . . . . . . . . 2.2 Processuelle niveauer . . . . . . . . . . . . . . . . . 2.3 Opslagsvrker . . . . . . . . . . . . . . . . . . . . 2.3.1 Opslagsord . . . . . . . . . . . . . . . . . . 2.3.2 Grammatiske klasser . . . . . . . . . . . . . 2.3.3 Metainformation . . . . . . . . . . . . . . . 2.3.4 Interleksikalske relationer . . . . . . . . . . 2.3.5 Opsummering . . . . . . . . . . . . . . . . . 2.4 Dokumentindeksering . . . . . . . . . . . . . . . . 2.4.1 Invertering af dokumenter . . . . . . . . . . 2.4.2 Valg af termers indeksering . . . . . . . . . 2.4.3 Vgtning og valg af termer . . . . . . . . . 2.4.4 Opsummering . . . . . . . . . . . . . . . . . 2.5 Beskrivelse af dokumentindhold . . . . . . . . . . . 2.5.1 Behovet for beskrivelse af dokumentindhold 2.5.2 Kendte beskrivelsesmodeller . . . . . . . . . 2.5.3 En generisk dokumentbeskrivelsesmodel . . 2.5.4 Opsummering . . . . . . . . . . . . . . . . . 2.6 Dokumentsgning . . . . . . . . . . . . . . . . . . . 2.6.1 Sgeprocessen . . . . . . . . . . . . . . . . . 2.6.2 Formulering af foresprgsel . . . . . . . . . 2
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
5
5 5 6 7 8
9
9 10 12 15 15 15 16 17 21 21 22 23 23 24 24 24 25 25 26 26 26 27
INDHOLD
3
2.6.3 Foresprgselsmodi kation . . . . . . . . . . . . . . . . . . 28 2.6.4 Evaluering af foresprgsel . . . . . . . . . . . . . . . . . . 33 2.6.5 Ontologi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3 Design af prototype
3.1 Eksperimentel systemudvikling . . . . . . 3.2 Realisering af den valgte dokumentmodel 3.2.1 E/R diagrammet . . . . . . . . . . 3.3 Beskrivelse af indekseringsprocessen . . . 3.4 Beskrivelse af sgeprocessen . . . . . . . . 3.4.1 Implementation af databasen . . . 3.4.2 Afprvning af prototypen . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
45
45 46 47 49 50 52 60
4 Indsamling af empiri
61
5 Konklusion
65
Litteraturliste
68
Bilag
73
A Beregning af vgte
74
B Afprvning
79
C Uddata fra eksempelforesprgsel
88
D Erklring af tabeller
92
E Kildetekst
94
5.1 Opsummering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 5.2 Perspektivering . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
E.1 Eksempelforesprgsel . . . . . . . . . . E.2 Typer, erklring . . . . . . . . . . . . E.3 Ordbog, erklring . . . . . . . . . . . E.4 Ordbog, implementation . . . . . . . . E.5 Tagger, erklring . . . . . . . . . . . . E.6 Tagger, implementation . . . . . . . . E.7 Beskrivelsesgenerator, erklring . . . . E.8 Beskrivelsesgenerator, implementation E.9 Dokumentindeksering, erklring . . . E.10 Dokumentindeksering, implementation E.11 Dokumentsammenligning, erklring .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
94 96 98 98 99 100 105 106 112 113 114
4
INDHOLD E.12 Dokumentsammenligning, implementation . . . . . . . . . . . . . 115
Kapitel 1
Indledning 1.1 Forord Denne specialerapport er udarbejdet i perioden fra marts til og med september 2000 af Per Drge, Thomas Hald Frandsen, Rasmus Knappe og Niels Castle Andersen. I forbindelse med vores arbejde vil vi gerne takke:
Vores vejleder Troels Andreasen for engageret vejledning, koncis kritik og vores deltagelse i en udbytterig SIGIR 2000 i Athen.
Bolette Sandford Pedersen fra Center for Sprogteknologi ved Kbenhavns Universitet for at svare p a vores utallige sprgsm al om lingvistik.
Jrg Asmussen fra Det Danske Sprog- og Litteraturselskab for vores korpus.
Henrik Bulskov for at importere vores ordbogsmateriale til databasen. Leslie Fleming, Sisse Plesner Jakobsen og Dan Rasmussen for kritisk gennemlsning og konstruktiv kritik af vores rapport.
Roskilde, september 2000
1.2 Motivation Udgangspunktet for specialet er vores tidligere arbejde med udvikling af et klassisk termbaseret sgesystem1 . Det er vores erfaring, at s adanne sgesystemer kan generere svar af hj kvalitet, i betragtning af de relativt simple metoder der anvendes. Der eksisterer imidlertid andre og mere komplekse tilgange til omr adet text retrieval, der abner mulighed for styrkelse af systemernes funktionalitet. Med funktionalitet mener vi bidrag til sgesystemer, der forbedrer systemers 1 Med klassisk mener vi et sgesystem som for eksempel Salton's SMART sgesystem [Salton, 1983]
5
6
KAPITEL 1. INDLEDNING
svar i retning af det ideelle svar. Det ideelle svar er sandsynligvis uopn aeligt, men vi arbejder i den and, at selv diminutive raÆneringer af funktionaliteten, er et skridt i den rigtige retning. En vsentlig motivationsfaktor for os er s aledes, at nde metoder til, at styrke funktionaliteten for sgesystemer. Via forskningsprojektet OntoQuery [Andreasen et al., 1999], har vi f aet stillet data i form af maskinlsbare opslagsvrker til r adighed. Det drejer sig primrt om en ontologi i form af en taksonomi over det danske sprog, et udsnit af Den Store Danske Encyklopdi, en retskrivningsordbog, en synonymordbog samt Nudansk Ordbog. Den vsentligste motivationsfaktor for os, har s aledes vret, at integrere og inkorporere disse vrktjer i udvikling af et nyt sgesystem med yderligere funktionalitet. Ontologien rummer interessante perspektiver. Dens begrebstaksonomi er opbygget efter Pustejovsky's lingvistiske princip, der beskriver begreber generativt ud fra relationer til andre begreber [Pustejovsky, 1995]. Relationerne kan eksempelvis vre er-en, del-af, best ar-af og produkt-af. Denne viden anvendes til at operere p a et begrebsmssigt niveau med foresprgsler, svar og dokumenter. Vi har fundet det mest interessant at fokusere p a foresprgselsmodi kation, da vi i tidligere arbejde har gjort erfaring med netop denne del af sgeprocessen [Andersen et al., 1998]. En type modi kation af foresprgslen kunne eksempelvis vre at ekspandere et begreb med dets specialiserede begreber. Foresprgslen efter begrebet \frugt", kan s aledes udvides med alle de frugttyper ontologien stiller til r adighed, eksempelvis begreberne \ble" og \banan". Selvom foresprgselsmodi kation ogs a kan anvendes til at indsnvre foresprgsler og dermed svar, har vi fundet det mest interessant at fokusere p a foresprgselsekspandering.
1.3 Problemfelt I det flgende vil vi opridse nogle af de problemomr ader vi har identi ceret i forbindelse med klassisk termbaseret sgning. Et vsentligt problem ved klassisk termbaseret sgning er, at det ikke rummer tilstrkkelige muligheder for yderligere udvidelse af funktionaliteten. For eksempel vil klassisk termbaseret sgning ikke kunne fortolke en natursprogsforesprgsel anderledes end en liste af termer. Det er et problem, fordi semantikken i en stning oplses, n ar den reprsenteres af termer, hvor relationerne imellem termerne, ikke er bevaret. Man kan ikke genskabe en stnings semantiske indhold, men blot afgre, hvilke termer stningen bestod af. For at sgemaskiner kan fortolke natursprogsforesprgsler er det ndvendigt at kunne reprsentere semantik i enheder, der er strre end isolerede termer. Selvom funktionaliteten i et klassisk termbaseret sgesystem udvides s aledes, at det er i stand til at analysere strre enheder end termer, vil systemet alligevel ikke have de forndne informationer til at foretage en natursprogsanalyse. Analysen krver som minimum information om termernes grammatiske klasser. Information der er helt essentiel for at kunne foretage en grundliggende grammatisk analyse af dokumenternes indhold. Vi mener s aledes at en grundig analyse af stningerne er ndvendig for
1.4. PROBLEMFORMULERING
7
at opn a yderligere funktionalitet, b ade i forbindelse med beskrivelsen af dokumenter, som i analyse og ekspansion af foresprgsler. Vi arbejder alts a inden for omr adet maskinel identi kation og afgrelse af stningers betydning, og de ordbger vi har til r adighed indeholder netop metadata p a termniveau, i form af eksempelvis grammatisk klasse. Metadata som er ndvendig, for at opn a den gede funktionalitet. Et yderligere problem ved klassiske termbaserede sgesystemer er, at de ikke h andterer den kontekst termer st ar i, hverken i dokumenter eller foresprgsler. Dette problem kan anskues p a ere m ader. For eksempel er det ikke uvsentligt for forst aelsen af en tekst, om termen \sl a" optrder som verbum, "at sl a et slag" eller som substantiv, \en sl a p a en dr". I dette tilflde vil bestemmelse af termens grammatiske klasse kunne klassi cere termen semantisk. I andre tilflde er det ikke tilstrkkeligt at kunne bestemme en terms grammatiske klasse. For eksempel eksisterer termen \skat" i tre semantiske varianter, der alle er substantiver. Der er s aledes tale om introduktion af stj, hvis foresprgsler og dokumenter sammenlignes uden hensyntagen til termers kontekst. Det er ikke muligt at afgre en forfatters intention givet en enkelt term. Bestemmelse af betydning krver inddragelse af termens kontekst. Selvom vi har opridset nogle problemomr ader ved klassisk termbaserede sgesystemer og antydet nogle konkrete teknikker til styrkelse af funktionaliteten i sgesystemer, er deres syntetiseringen ikke abenbar. Hvordan teknikkerne skal sammensttes, for at lse problemerne, er et problem i sig selv. Dels fordi denne del af information retrieval er ny for os, dels fordi information retrieval har en pragmatisk tilgang til sit felt. Anvendelsen af, dansksprogede ontologier til text retrieval, er et forholdsvis nyt omr ade. Den ontologi vi har f aet stillet til r adighed via OntoQuery{projektet er hidtil ikke anvendt i praksis.
1.4 Problemformulering Hensigten er alts a at forbedre sgesystemers funktionalitet, udover de muligheder der er givet ved klassisk termbaserede sgesystemer. Metoderne fokuserer p a natursprogsgenkendelse og maskinlsbare ordbger, isr Den Danske SIMPLE{ Ordbog til foresprgselsekspansion, i et anvendelsesorienteret perspektiv. En vsentlig tilgang til metoderne er eksplorativt at afdkke hvordan de skal anvendes, ved at implementere et prototypesgesystem. Prototypen udvikles til en Oracle database og det tilstrbes, at systemets logik afvikles i databasen, via PL/SQL. I bestrbelserne p a at lse det overordnede problem, at forbedre sgesystemers funktionalitet, er det ndvendigt
at opstille en model for dekomposition af dokumenter i beskrivende enheder der understtter foresprgsler i natursprog.
at opstille et st normative retningslinier for begrebsmssig ekspandering af foresprgsler via ontologiens er-en relation.
8
KAPITEL 1. INDLEDNING
1.5 Metode Vores speciale er et omfattende litteraturstudie efterfulgt af en praktisk del, hvor der udvikles en prototype. Litteraturstudiet tilvejebringer den forndne viden mens prototypen bidrager med erfaring til afsgningen af problemomr adet. De udvalgte teoriers anvendelighed vurderes med basis i analysen af den indsamlede empiri fra den implementerede prototype. Da danske ontologiers anvendelsesmuligheder til informationssgning endnu ikke er behandlet i litteraturen, anvender vi eksperimentel udvikling til at afsge problemfeltet. Eksperimentel udvikling opfatter vi som udvikling, der i startfasen, i udstrakt grad, baserer sig p a lbende praktisk afprvning og prototyping. Vi kombinerer den eksperimentelle side af vores systemudviklingsarbejde med objektorienteret design til at speci cere systemets enkelte komponenter [McConnell, 1993, s. 149]. Den objektorienterede tilgang giver os mulighed for at holde designet af prototypen generisk og modulrt. Hovedparten af designprocessen og den efterflgende dokumentation er realiseret ved hjlp af The Uni ed Modeling Language (UML) [Booch et al., 1999]. Da prototypen afprves lbende under udviklingen og da den de nitorisk ikke er at betragte som et frdigt system, har vi valgt en simpel modulr afprvning som den interne afprvning. Afprvningen afvikles som en serie af funktionskald med et destruktivt udgangspunkt. Udgangspunktet er et nske om at afslre graverende fejl, der vil forhindre prototypen i at fungere korrekt. Med hensyn til en ekstern afprvning er vores metodiske udgangspunkt, at vi nsker at kunne sondre ontologien fra synonymordbogen med hensyn til deres respektive bidrag til ekspandering p a foresprgselssiden.
Kapitel 2
Baggrund og betragtninger I dette kapitel prsenterer vi det teoretiske felt, vi arbejder indenfor. Diskussionen i hvert afsnit afsluttes med en praktisk del, hvor vi syntetiserer teorien. Dette gres for at skabe en vekselvirkning mellem et teoretisk og et mere implementationsnrt perspektiv. Vi vil i det flgende beskrive kvalitative krav til svar, indeksering, sgning, term kontekst og frem for alt anvendelse af opslagsvrker i sgesystemer, med fokus p a ontologi. Da vores arbejde kredser om problemstillingen, at nde gode svar til foresprgsler vil vi indledningsvis fokusere p a hvad et godt svar helt grundliggende er. Vi vil begynde ved at se p a gode svar gennem Grices re maksimer [Grice, 1975].
2.1 Hvad er et godt svar? N ar vi som mennesker stiller sprgsm al til hinanden, har vi en helt basal forventning om at f a et ldigt svar. Som oftest opst ar der i svarprocessen en dialog mellem sprger og svarer. En dialog der er med til at etablere og styrke den kontekst og tydeliggre de normer hvori og under et svar prsenteres [Grice, 1975]. Forud for dialogen manifesterer kontekst og normer sig i form af tid, sted og eksempelvis gldende samfundsnormer. Et basalt sgesystem opererer fjernt fra menneskers facon at sprge og svare p a. Sgesystemet svarer altid helt eksakt p a foresprgsler, uanset kontekst og samfundsnormer. Selvom sgesystemet er ubekendt med de nvnte normer og kontekst, er det alligevel af betydning for brugeren at f a returneret det bedst mulige svar p a en given foresprgsel. Det er en forventning vi har fra det samfund vi lever i. For at honorere forventningen om et tilfredsstillende svar, er det imperativt at vurdere hvilke kvalitative krav der skal stilles til sgesystemet. Vi ser derfor i det flgende nrmere p a gode svar som begreb og nder karakteristika vi kan anvende i designet af vores sgesystem. 9
10
KAPITEL 2. BAGGRUND OG BETRAGTNINGER
2.1.1 Grice maksimer Grice [Grice, 1975] de nerer re maksimer, de s akaldte Grice maksimer. Maksimerne beskriver, hvad der kan betragtes som et godt svar, n ar mennesker sprger og svarer hinanden. Grice redegr for hvordan et svar der opfylder alle maksimerne, kan betragtes som et kvalitativt godt svar. Sowa [Sowa, 1984, s. 266] og Gaasterland et al [Gaasterland et al., 1992] overfrer Grice maksimerne til at analysere dialogen mellem menneske og sgemaskine. Sowa beskriver Grice maksimerne som en formulering af det kooperative princip [Sowa, 1984, s. 266]. Sowa knytter derfor en vigtig forbindelse mellem Grice's generelle loso ske betragtninger og menneskers forventninger til interaktionen og udbyttet ved anvendelsen af sgemaskiner. Gaasterland et al anvender i forlngelse heraf Grice maksimer til direkte at beskrive hvorn ar et sgesystem fungerer kooperativt [Gaasterland et al., 1992]. Vi har valgt at tydeliggre Gaasterland et al's [Gaasterland et al., 1992, s. 3] fortolkning af de re maksimers relevans for sgesystemer, gennem eksempli cering af situationer hvor Grice maksimerne ikke overholdes.
Kvalitetsmaksimet Kvalitetsmaksimet krver at hvert bidrag til en samtale br vre gyldigt. Det vil sige at man ikke m a sige ting man ikke tror er sande eller ting man ikke har tilstrkkelig belg for. Kvalitetsmaksimet p apeger derfor at sgesystemet aldrig skal returnere svar der vildleder brugeren. Hvis et svar p a en foresprgsel, vil lede brugeren til forkerte antagelser, skal sgesystemet give yderligere information, for at forhindre dette [Gaasterland et al., 1992, s. 3]. N ar der sges p a Internettet, hnder det ofte, at sgetjenester returnerer svar i form af referencer til dokumenter, der ikke lngere eksisterer. Sgetjenesten burde kontrollere sit svar, fjerne referencerne til de ikke eksisterende dokumenter, og dermed give et bedre svar.
Kvantitetsmaksimet Kvantitetsmaksimet p apeger at et bidrag til en samtale skal vre s a informativt som p akrvet. Det vil sige at bidraget ikke skal vre mere detaljeret end ndvendigt, ej heller indeholde for f a informationer. Kvantitetsmaksimet vedrrer dermed mngden af information brugeren f ar som svar p a en foresprgsel [Gaasterland et al., 1992, s. 3]. Sgetjenester p a Internettet returnerer ofte ingen eller tusinder af dokumenter til en given foresprgsel. Begge ekstremer er uanvendelige som svar. Selv om tusinder af dokumenter rent formelt passer til foresprgslen, vil det ofte vre bedre at returnerer de mest generelle og dermed bedste reprsentanter for samtlige dokumenter [Korpimies & Ukkonen, 1988]. Sgetjenesten kan hjlpe brugeren ved at udvide en sgning hvis, der er for f a returnerede poster, ligesom et sgesystem kan tilbyde brugeren at sgningen indsnvres hvis der for mange returnerede poster.
2.1. HVAD ER ET GODT SVAR?
11
Relevansmaksimet Relevansmaksimet krver at et bidrag til en samtale skal vre relevant. Specielt skal et svar p a et sprgsm al vre relevant for den der sprger. Relevansmaksimet indikerer s aledes at brugeren skal vre enig i, hvorvidt de foresl aede dokumenter er relevante svar p a den stillede foresprgsel. Der er forsket meget i tolkning af brugerintentioner [Gaasterland et al., 1992, s. 3], men det er per de nition et problematisk omr ade. Sges der med en Internet sgetjeneste efter eksempelvis ordet \sl a" vil svaret indeholde alle mulige forekomster af ordet \sl a". Vi mener at, kendskab til brugerens kontekst eller sgehistorik, kan bidrage til udvlgelsen af et segment omhandlende eksempelvis, vold eller havel ager.
M ademaksimet M ademaksimet krver at man skal undg a at formulere uklare og tvetydige udtryk. Man skal ogs a fatte sig i korthed. M ademaksimet p apeger at et sgesystem br returnere svar p a en form, der er forst aelig for brugeren. Svaret br ikke indeholde tvetydighed, s a brugeren selv skal fortolke meningen. Svaret skal vre prcist uden over dige ord og uden at underkende de andre maksimer [Gaasterland et al., 1992, s. 3]. Ofte returnerer sgetjenester et kortfattet maskingenereret resume (eng. smell) der tillader brugeren at vurdere de enkelte dokumenters relevans. Enkelte sgetjenester returnerer dog svar til brugeren, der er uoverskueligt store eller resumeer, der er s a kortfattede, at brugeren ikke er i stand til at vurdere relevansen.
Diskussion af Grice Maximer Med Grice maksimer har vi en checkliste til at vurdere om vores sgemaskine giver kvalitativt gode svar [Grice, 1975]. Grice maksimerne giver os ikke et vrktj til at beregne hvor godt et svar er, som eksempelvis testsamlingen TREC1 [Voorhees & Tice, 2000], men giver os et vrdifuldt ngerpeg om systemets anvendelighed. N ar vi, som Gaasterland et al, bruger Grice til at beskrive gode svar i informationssgning bliver den kontekst en sgning foreg ar, i meget vigtig. Gaasterland et al p apeger problemet med, at fastsl a brugers kontekst og intention, men lser det ikke i vores jne. Et problem der i sin mest enkle form kan lses ved at resolvere for ords forskellige betydninger2 eller alternativt anvende natursprogsanalyse3 [Kilgarri, 1997, s. 3]. Vi behandler i de flgende afsnit s avel bestemmelse af ords kontekst som analyse af natursprog mere detaljeret. 1 TREC konferencen producerer en serie af dokumentsamlinger, der indeholder en mngde af manuelt konstruerede sprgsm al og deres tilhrende korrekte svar. Dokumentsamlingen anvendes som flles referenceramme i forbindelse med test af sgesystemer. 2 Kontekstbestemmelse af ord, (eng.) Word Sense Disambiguation (WSD). 3 Analyse af natursprog, (eng.) Natural Language Processing (NLP).
12
KAPITEL 2. BAGGRUND OG BETRAGTNINGER
2.2 Processuelle niveauer Da vi i hele projektet diskuterer mange aspekter med et lingvistisk udgangspunkt, vil vi kort introducere sprogets processuelle niveauer set i et informationssgnings perspektiv. Sprogets processuelle niveauer beskrives med henblik p a, at kunne identi cere de niveauer, der vil vre frugtbare at bearbejde i forbindelse med natursprogsanalyse. For at kunne h andtere kompleksiteten af natursprog vil en lingvistisk tilgang ofte opdele analysen i sprogets forskellige processuelle niveauer. Ud fra en datalogisk betragtning, forekommer det, af implementationsmssige arsager, fornuftigt at foretage en tilsvarende sondring imellem disse processuelle niveauer. Den flgende beskrivelse af de processuelle niveauer kan ses som en referenceramme for og perspektivering af de teknologier og metoder der efterflgende beskrives i detaljer. Der er ingen generel enighed om antallet af eller vigtigheden af de enkelte niveauer. Vi har derfor valgt at foretage diskussionen med udgangspunkt i Salton [Salton, 1983, s. 257{261] og supplere med Sowa [Sowa, 1984, s. 216].
Det fonologiske niveau Her behandles hvordan ord udtales. Niveauet og de forbundne processer er primrt vsentlige for systemer, der er i stand til at forst a og gengive talesprog. Systemer der eksempelvis tillader fonetisk modi kation af foresprgsler med SOUNDEX [Gadd, 1988] opererer p a det fonologiske niveau. Niveauet er ikke relevant at behandle i denne sammenhng.
Det morfologiske niveau Disse processer beskftiger sig med genkendelse af ords grundformer, en proces der ofte benvnes lemmatisering (eng. stemming). En del af processen er eksempelvis fjernelse af pr- og suÆkser. Det morfologiske niveau dkker ligeledes over de grammatiske regler, der beskriver hvordan morfemer sammensttes til nye ord. Problemer med h andtering af sammensatte ord, er et specielt problem for de agglutinative sprog, som eksempelvis dansk og tysk. I de analytiske sprog, som eksempelvis kinesisk eller engelsk, kan nsten alle morfemer anvendes enkeltvis [Sowa, 2000]. Et eksempel er det engelske \life insurance company employee" der p a dansk sammensttes til \livsforsikringsselskabsmedarbejder". Reglerne for oplsning af sammensatte ord er, selvom problemet umiddelbart virker enkelt, srdeles komplekse. Selvom agglutinativ morfologi udgr en vsentlig og interessant udfordring for sgning p a dansk, vil vi ikke yderligere behandle omr adet.
Det leksikalske niveau P a det leksikalske niveau opereres der fortsat p a det enkelte ord. Set i et informationssgningperspektiv dkker niveauet over operationer som eksempelvis fjernelse af ofte forekommende ord, udvidelse med synonymer, klassi cering af ord med deres grammatiske klasser [Salton, 1983, s. 257] samt udskiftning af st
2.2. PROCESSUELLE NIVEAUER
13
af ord med en flles markr. Markren kan vre en ontologisk klasse, et synset som i WordNet [Miller et al., 1990, s. 240], eller en tilsvarende reprsentant for en gruppe af synonyme ord. Salton [Salton, 1983] tager i hans beskrivelse af dette niveau ikke hjde for bestemmelse af enkeltords betydning og homonymer. Da sproget vi behandler ikke er monomor sk [Pustejovsky, 1995, s. 55] br udskiftning af ord med en flles markr derfor frst ske p a et af de sidste processurelle niveauer. Frst p a det senere semantiske niveau kan der skelnes mellem forskellige betydninger af homonymer og almindelig ertydighed [Sowa, 1984, s. 255]. Sowa [Sowa, 1995] opererer ikke eksplicit med et leksikalsk niveau, men beskriver alle operationer hidrrende det syntaktiske.
Det syntaktiske niveau Den strukturelle information der uddrages i den syntaktiske behandling baserer sig p a den foreg aende klassi kation af ords grammatiske klasser, s a som substantiver, adjektiver og verber. Det syntaktiske niveau grupperer ord i stninger eller lignende strukturerede enheder. Der kan anvendes ere forskellige gensidigt komplimenterende strukturerede enheder, der kollektivet reprsenterer stningernes grammatiske struktur. De strukturelle enheder kan eksempelvis vre verbumfraser og substantivfraser. En syntaktisk analyse tager udgangspunkt i klassi kationen af stningernes enkelte ord og danner herefter, udfra grammatiske regler, de strukturerede enheder.
Det semantiske niveau Tilfjer kontekstuel viden til den samlede analyse. Det vil sige, at man beskftiger sig med hvilken betydning der skabes, n ar man kombinerer ordene i stninger. Vi mener at det naturligt vil vre p a dette processuelle niveau at
ertydige ords betydning bestemmes.
Det pragmatiske niveau P a det pragmatiske niveau inddrages den sociale kontekst i analysen, det vil sige hvordan stninger anvendes i forskellige situationer og hvilken fortolkning de f ar i den situation de bliver brugt i. Sowa [Sowa, 1995] opererer ikke eksplicit med noget pragmatisk niveau, men har opdelt dette niveau i diskursviden og viden om verden.
Diskursviden Diskursviden behandler hvorledes rkkeflgen af stninger er afgrende for bestemmelse af betydning og dannelse af mening. Et eksempel p a anvendelsen af diskursviden, er problemstillingen omkring relative pronomen og deres korrelater.
blet l a p a bordet. S a ad han det.
KAPITEL 2. BAGGRUND OG BETRAGTNINGER
14
Det relative pronomen \det" kan frst tilskrives mening, n ar det analyseres i sammenhng med den foreg aende stning og sttes i forbindelse med dets korrelat, \blet". Det valgte eksempel er specielt udfordrende, da det kun ved anaforisk resolution kan afgres om det er \blet" eller \bordet" der spises. Selektionsrestriktioner, fra eksempelvis en ontologi, vil kunne afdkke at mennesker ikke der borde, men derimod bler. Situationer hvor selektionsrestriktioner ikke kan afgre ertydighed er yderst sjldne, idet sproglige regler forhindrer formuleringen af stninger med ertydighed. Bestemmelse af relative pronominers korrelater og anaforisk resolution er en srdeles kompleks opgave at udfre maskinelt og ligger uden for vores fokus. For en detaljeret gennemgang henvises til Kamp [Kamp, 1988].
Viden om verden Viden om verden omfatter kendskab til faktorer, der er eksterne for teksten. Eksempelvis hvem der er tekstens forfatter, modtager, struktur og tilstand af verden. Viden om verden er eksempelvis vsentlig for at kunne skelne mellem betydning, der kan skifte afhngig af hvem afsender og modtager er.
De giver ham gaver?
I det ovenst aende eksempel er det ikke, uden at kende konteksten, muligt at afgre om \de" er en enkelt person eller ere. P a ere andre sprog er det oftest i hjere grad muligt at arbejde uden fuld kendskab til kontekst. P a japansk kan man ud fra valg af bjninger og ord lse eksempelvis sociale relationer. I det ovenst aende eksempel vil det vre muligt at skelne mellem forring fra en overordnet til en underordnet og vice versa [Sowa, 1999].
Opsummering Vi mener, med udgangspunkt i ovenst aende introduktion til sprogets processuelle niveauer, at have identi ceret de grundliggende problemstillinger p a hvert niveau. De vsentligste problemer er i vores jne, at kunne h andtere bjning af ord, for der igennem at kunne identi cere ord og deres tilhrende grammatiske klasse. Denne viden er ndvendig for at kunne uddrage sprogets strukturelle og meningsbrende enheder. N ar vi har identi ceret eksempelvis navneog verbumfraser, har vi mulighed for at kunne behandle enkelte ord i en strre sammenhng. Behandlingen af ord i deres rette sammenhng, kan efterflgende hjlpe os til at skelne mellem de ertydige ords forskellige betydninger. De centrale niveauer for vores arbejde er derfor det morfologiske, leksikalske, syntaktiske og semantiske niveau. Bearbejdningen af disse niveauer danner referenceramme for vores identi kation og design af metoder, der udtrkker og behandler viden der er indeholdt i natursprog. Ovenst aende ndvendiggr en analyse af vores ordbogsressourcer og deres anvendelighed.
2.3. OPSLAGSVRKER
15
2.3 Opslagsvrker For til fulde at kunne udtrkke og anvende den viden der er formuleret i natursprog er det ndvendigt at have adgang til information om sprogets interne struktur. Denne metaviden er formaliseret og direkte tilgngelig i opslagsvrker, som eksempelvis ordbger, thesauri og ontologier. Det er derfor interessant at f a identi ceret hvilke informationer disse ressourcer kan bidrage med, n ar de integreres i et sgesystem. Det flgende afsnit er en identi kation af hvilket ordbogsmateriale og dermed hvilke informationer vi kan inddrage i vores arbejde med tekstsgning. Vores basismateriale svarer i omfang og detaljeringsgrad til Politikens Synonym Ordbog [Politikens Synonymordbog, 2000], Politikens Nudansk Ordbog [Nudansk Ordbog, 1999], Retskrivningsordbogen [Retskrivningsordbogen, 1996] samt SIMPLE{Ordbogen4 [Pedersen, 1999]. Alt materialet er p a maskinlsbar form5 , hvorfor det kan benyttes umiddelbart. Adgang til s adanne elektroniske ressourcer er overordentlig vigtig, n ar der arbejdes med korpa der ikke begrnser sig til et simpelt domne, hvor manuelt opbyggede ordbger er tilstrkkelige [Atwell & Pocock, 1994].
2.3.1 Opslagsord Opslagsordene i sig selv er en vigtig resource, da de giver os en helt essentiel mulighed for at genkende de dele af vores dokumenter, der er reelle ord og som potentielt kan udgre stninger. En typisk indgang giver ligeledes mulighed for at identi cere ord som kan indg a i sammensatte ord, som eksempelvis \lmmel" i eksemplet i tabel 2.1
lmmel, lm(me)len, lmler. lmmeljalder -en. 1. ln -nen (betaling). 2. ln -nen, -ne (tr), i sms. lnne-, fx. lnnetr. 3. ln: i ln (skjul). lnjarbejder. Tabel 2.1: Indgange i Retskrivningsordbogen [Retskrivningsordbogen, 1996]
2.3.2 Grammatiske klasser Ords grammatiske klasser beskriver i hvilken rolle det enkelte opslagsord benyttes i stninger samt hvordan det det bjes. Kendskab til opslagsordenes bjningsformer giver mulighed for, ikke kun at genkende ord i deres stamform, men ogs a i deres forskellige bjningsformer. 4 Den Danske SIMPLE{Ordbog er venligst udl ant af Center for Sprog Teknologi (CST) ved Kbenhavns Universitet. 5 Litteraturen beskriver ofte maskinlsbare ordbger som (eng.) Machine Readable Dictionaries (MRD) [Atwell & Pocock, 1994].
KAPITEL 2. BAGGRUND OG BETRAGTNINGER
16
Folder vi opslagsordet \banan" ud i dets bjningsformer, vil vi umiddelbart have adgang til \bananen, bananer, bananerne" [Nudansk Ordbog, 1999]. Flere bjningsformer som eksempelvis genitiv, \bananens, bananernes", kan udledes ud fra opslagsordets grammatiske klasse. Opslaget for \banan" i Nudansk Ordbog kan ses i sin fulde udstrkning i tabel 2.2.
2.3.3 Metainformation I vores ordbger har vi endvidere metainformation til r adighed. Typisk kan materialet opdeles i henholdsvis etymologi og anvendelseseksempler.
Etymologi Etymologi er forklaringen af de enkelte opslagsords oprindelse, udvikling og slgtskab med andre ord. En typisk indgang i Nudansk Ordbog ses i tabel 2.2.
banan [ba'na'n] subst. -en, -er, -ene
1. en krum frugt med tyk gul skal og bldt, sdt kd; latinsk navn Musca 2 en klase bananer skrlle en banan } bananis banankage bananklase bananpalme bananplante } melbanan hard banan (slang): en person der virker barsk og uflsom / purtogisisk banana (a) enten / evt. via et vestafrikansk sprog / arabisk banan ' nger, ngerspids' (araberne bruger ikke dette ord for banan) (b) el. / fra det karabiske sprog chaima i det nordstlige Venezuela Tabel 2.2: Eksempel p a indgange i Nudansk ordbog [Nudansk Ordbog, 1999] Vores samlede ordbog som, Nudansk Ordbog bidrager til, er en sprogteknologisk ordbog, der kan anvendes til at analysere moderne tekst. I denne sammenhng er etymologi ikke af direkte betydning eller relevans, men udgr en vigtig resource for opbygning af metanymtermnetvrk.
Eksempler p a anvendelse Der forekommer eksempler p a brug af ord i s avel Nudansk Ordbog som i SIMPLE{ Ordbogen. Eksemplerne i Nudansk Ordbog er fortrinsvis meget korte sammenholdt med SIMPLE{Ordbogens. Et eksempel p a anvendelse kan ses i tabel 2.3. naming = example =
\kirsebr" \p a dessertsiden bydes p a de frste franske kirsebr til 15 kr. for 1/4 kg"
Tabel 2.3: Eksempel p a del af indgang i SIMPLE{Ordbog [Pedersen, 1999] Teksterne der er tilgngelige i eksemplerne kan med fordel benyttes til opbygning af, de senere beskrevne, metanymtermnetvrk.
2.3. OPSLAGSVRKER
17
2.3.4 Interleksikalske relationer Udover klassi kationen af opslagsord i grammatiske klasser, er der en mngde relationer de enkelte opslagsord imellem. De relationer vi eksplicit kan nde i vores materiale gennemg as i det flgende. Herefter beskrives en af de udfordrende implicitte relationer der ndes i materialet, homonymi. Typisk benyttes de interleksikalske relationer til ekspansion og indsnvring af foresprgsler. N ar vi beskriver hvordan et ord anvendes til at ekspandere en foresprgsel, sker det ved logisk disjunktion mellem ordet og den eksisterende foresprgsel. Tilsvarende sker indsnvring ved logisk konjunktion mellem det tilfjede ord og foresprgsel.
Synonymi Den gngse de nition af synonymer6 , er ord der frit kan substitueres. Udskiftningen af et ord i en stning med dets synonym, ndrer ikke stningens betydning. Eksempelvis ordene \computer" og \datamat". En lsere de nition er kravet om, ikke at ndre stningens betydning i et givet domne [Miller et al., 1990, s. 7]. Eksempelvis er ordene \disk" og \bar" kun synonyme i bevrtningsdomnet. Uden for bevrtningsdomnet kan ordene ogs a betyde henholdsvis \plade" og \ngen". Vi har erfaret at synonymordbger br anvendes med en vis p apasselighed, da den indeholder synonymrelationer, der ikke overholder ovenst aende de nitioner. De este synonymordbger beskriver en brugsmssig sammenhng snarere end en egentlig begrebsmssig relation. Eksempelvis beskriver Politikens Synonymordbog \lstue" som et synonym til \restaurant", selvom de to ord nppe kan ses som vrende synonyme i alle tilflde. Synonymi er dog srdeles anvendeligt til ekspansion af foresprgsler og styrkelse af recall. Ved at tilfje synonymer for foresprgslens termer kan vi nde dokumenter, der udover termer angivet i foresprgslen, indeholder termer der har en tilsvarende betydning.
Antonymi Antonymet til \x" de neres ofte som \ikke-x". Der skelnes dog mellem binre antonymer, \liv" kontra \dd", og antonymer med mange mellemvrdier som eksempelvis \rig" versus \fattig". At antonymet til \rig" som nvnt er \fattig" [Politikens Synonymordbog, 2000] betyder s aledes langt fra at frasen \han er ikke rig" er synonymt med \han er fattig" [Miller et al., 1990, s. 7{8]. I det materiale vi har til r adighed dierentieres der ikke mellem de to typer af antonymer. Antonymi kan som synonymi bruges til ekspansion af foresprgsler, der krves dog, qua den beskrevne problemstilling, en vis forsigtighed ved anvendelsen af ikke binre antonymer. Vi vil s aledes eksempelvis kunne udvide foresprgslen \kvinder" med \ikke mnd" 6 De nitionen
tilskrives ofte Leibniz [Miller et al., 1990, s. 6].
KAPITEL 2. BAGGRUND OG BETRAGTNINGER
18
Hyponymi I modstning til synonymi og antonymi, der er leksikalske relationer mellem ord, er hyponymi en semantisk relation [Miller et al., 1990, s. 8]. Hyponymi er asymmetrisk og transitiv og relationerne udgr en hierarkisk er-en struktur. Hvor WordNet [Miller et al., 1990, s. 8] kun lader ord vre relateret til et overordnet ord, tillader den anvendte SIMPLE{Ordbog at ord underordnes mere end et andet ord. Et eksempel p a er-en relationer ses p a gur 2.1, hvor det fremg ar at \kop" er en specialisering af \beholder" og har specialiseringen \tekop". Taksonomien baseret p a er-en relationerne i SIMPLE{Ordbogen er, set i lyset af Guarinos de nitioner, rygraden i ontologien [Guarino, 1998]. Skelettet som eren taksonomien udgr udfyldes med attributter som eksempelvis meronymi og antonymi og danner dermed en fuld ontologi [Guarino, 1998]. ... beholder ...
@ @ glas kop @
@
tekop
Figur 2.1: Eksempel p a er-en relationer fra SIMPLE{Ordbogen Hyponymi kan primrt bruges til begrebsmssig abstraktion og specialisering i ekspansion eller indsnvring af foresprgsler. Sges der eksempelvis efter begrebet \kop" kan vi udvide med henholdsvis \tekop" og \beholder".
Meronymi og holonymi Meronymi henholdsvis holonymi beskriver del-af og best ar-af relationer. Relationerne beskriver hvordan entiteter kan best a af dele eller vre del af strre sammenhnge [Miller et al., 1990, s. 8]. Et eksempel p a en del-af relation er hvordan \hale" blandt andet relaterer til \hest". Som hyponymi er er meronymi og holonymi b ade transitiv og asymmetrisk [Miller et al., 1990, s. 8]. Vi mener meronymi og holonymi, s avel som hyponomi, kan anvendes til ekspansion og indsnvring af foresprgsler. Er der eksempelvis tale om en foresprgsel der kun indeholder et overordnet begrebs bestanddele, men ikke begrebet selv, mener vi at man med fordel kan anvende meronymi til at udpege det generelle begreb. Har vi eksempelvis en foresprgsel der indeholder \kde", \ringeklokke" og \hjul" vil det vre muligt at identi cere det overordnede begreb som vrende \cykel". Foresprgslen kan indsnvres ved efterflgende at tilfje det overordnede begreb. Omvendt kan en foresprgsel indeholdende ordet \bil" ekspanderes til ogs a at indeholde \dk", \lygter", \dre", et cetera.
2.3. OPSLAGSVRKER
19
Semantisk implikation og biimplikation Der er ikke enighed om den prcise de nition af dette begreb. Pustejovsky [Pustejovsky, 1995, s. 24] giver dog en bred, men generelt accepteret beskrivelse af begreberne semantic presupposition og semantic entailment, der i vores fortolkning, er identisk med de logiske operatorer implikation og biimplikation (se tabel 2.4).
! S F S S
A
S S F F
B
S F S F
$ S F F S
Tabel 2.4: Sandheds tabel for [Andreasen & Christiansen, 1996, s. 27]
A
S S F F
B
S F S F
implikation
og
biimplikation
Et kort eksempel kan anskueliggre betydningen af implikation og biimplikation. 1. De sneede inde. 2. De var indesprret. 3. De varmede hytten op. 4. Hytten blev varmere. Ovenst aende liste af konstruerede udsagn fra SIMPLE{Ordbogen7 kan beskrives med semantisk implikation, A ! B , hvis b ade A og B er sande eller A er falsk og B er sand. De sneede inde ! De var indesprret. Hvilket tolkes som, at s afremt de er sneet inde er de ogs a indesprret. De kan dog sagtens vre indesprret uden at vre sneet inde, de kan eksempelvis vre fngslet. Det er alts a en logisk flge af at vre sneet inde, at vre indesprret. Udsagnene kan ligeledes beskrives med semantisk biimplikation, A $ B , hvis og kun hvis b ade A og B er sande. De varmede hytten op $ Hytten blev varmere. Hvis de opvarmer hytten bliver den varmere og bliver hytten varmere m a det vre fordi den bliver opvarmet. Der er alts a en forudstning for at hytten bliver varmere, at den opvarmes, ligesom varme er en logisk flge af opvarmning. Vi mener at semantisk implikation og biimplikation med fordel kan anvendes til modi kation af foresprgsler. Beskriver en foresprgsel hndelsen at sne inde, kan dette ses som vrende analogt til at vre indesprret, et faktum der kan supplere betydningen indeholdt i den oprindelige foresprgsel. 7 Udsagnene er konstrueret ud fra relationer som eksempelvis SRResultingState og SRProduces fra SIMPLE{Ordbogen.
KAPITEL 2. BAGGRUND OG BETRAGTNINGER
20
Metanymi Metanymi er en speciel leksikalsk relation da den, i modstning til de vrige leksikalske relationer, er dannet udelukkende p a baggrund af statistik. Typisk dannes metanymnetvrk ud fra tekster, ved at registrere om termer forekommer sammen. Forekommer termer ofte sammen i tekster, stninger eller fraser, kan de behandles som metanymer. Metanymi er en enkelt m ade, ud fra det foreliggende korpus, at danne et netvrk af termer, der kan anvendes til eksempelvis ekspansion af foresprgsler [Merzbacher & Chu, 1992]. Vi nder det dog problematisk, at maskinelt opbyggede termnetvrk ikke ndvendigvis afspejler begrebsmssig sammenhng, men blot at termerne ofte forekommer sammen. Da vi aktuelt har adgang til et rigt ordbogsmateriale, af en usdvanlig hj kvalitet, vil vi derfor ikke her benytte os af et metanymtermnetvrk.
Homonymi Homonymer er ord med samme form, men forskellig betydning. Der kan skelnes mellem homogra , hvor ord har samme ortogra ske form, det vil sige skrives p a samme m ade, og homofoni, hvor ordene har samme fonetiske udtryk og dermed udtales ens (se tabel 2.5) [Semantics, 1996]. Vores behandling af homonymer dkker udelukkende homogra . Homonymi Fuld homonymi Homogra Homofoni
Eksempel ro (b ad) ro (fred) kost (brste) kost (mad) hvor (sted) v ar (for ar)
Tabel 2.5: Homonymi, bearbejdet efter [Semantics, 1996] Homonymi beskrives som kontrastiv ertydighed idet homonymer er ord uden relaterede betydninger. Den implicitte leksikalske relation som homonymi danner, er problematisk i forhold til analyse af natursprog. Det er qua ordenes samme ortogra ske form ikke umiddelbart muligt at bestemme hvilken af homonymets betydningsdimensioner, der er anvendt.
Polysemi Polysemi er i hj grad beslgtet med homonymi, men ved polysemi er ertydigheden ikke et resultat af ortogra ske tilfldigheder eller fonetisk konvergens. Polysemi er derimod relateret til enkelte ord og de forskellige betydninger hvori det anvendes [Pustejovsky, 1995, s. 27]. Pustejovsky beskriver to typer polysemi [Pustejovsky, 1995, s. 27{28]. Komplementerende polysemi, hvor et ord anvendes i to forskellige, men relaterede
2.4. DOKUMENTINDEKSERING
21
eller overlappende betydninger. Et eksempel p a komplementerende polysemi, er nedenst aende to udtryk. 1. En arbejder blev fyret. 2. John arbejder nede p a kaj 4. Tilsvarende beskrives logisk polysemi, der er en delmngde af komplementerende polysemi. Logisk polysemi er, som komplementerende polysemi n ar ord anvendes i forskellige men relaterede eller overlappende betydninger, og de yderligere har samme grammatiske klasse [Pustejovsky, 1995, s. 28]. 1. Avisen fyrede sin redaktr. 2. John spildte kae p a avisen. I det ovenst aende eksempel skifter ordet \avisen" mellem betydningen produkt og producent, men er i begge tilflde et substantiv.
2.3.5 Opsummering Vi har s aledes identi ceret en rkke ordbogsressourcer som vi kan gre brug af i vores arbejde med tekstsgning. Strstedelen af de interessante relationer og tekstmateriale ndes i to af vores ordbger. Vi mener dermed at de vigtigste kilder til metainformation er Nudansk Ordbog og Den Danske SIMPLE{Ordbog. Vi nder Nudansk Ordbog interessant, da den giver os de fundamentale opslagsord, deres grundliggende bjningsformer og opslagsordenes meget vigtige grammatiske kategorier. Disse informationer er essentielle, da de danner grundlag for indekseringsprocessen og dermed identi kation af dokumenternes meningsbrende enheder. Den Danske SIMPLE{Ordbog indeholder en mngde interessante relationer, hvor vi specielt vlger at fokusere p a brugen af er-en-relationerne, da det umiddelbart giver os adgang til begrebsmssig generalisering og specialisering. Vi vlger at give er-en-relationerne en central rolle i forbindelse med sammenligning af systemets meningsbrende enheder, da det tillader os at foretage en egentlig begrebsmssig sammenligning.
2.4 Dokumentindeksering I dette og det flgende afsnit vil vi undersge hvordan vi kan anvende vores tilgngelige metaviden til at generere og lagre dokumentbeskrivelser. For at danne beskrivelser er vi ndt til at kunne identi cere dokumenternes meningsbrende enheder. Vi opstiller derfor en generisk model for dekomposition af dokumenter. Modellen danner udgangspunkt for beskrivelse, identi kation og h andtering af meningsbrende enheder i systemet. Da vi ikke kan behandle de meningsbrende enheder direkte i de enkelte dokumenter, er vi ndt til at foretage en indeksering. Indekseringen sikrer at vi p a en eektiv vis kan sge og gen nde beskrivelser.
KAPITEL 2. BAGGRUND OG BETRAGTNINGER
22 Dokument 1 2 3 4
Tekst De lokale taler om asylcenteret. Et lokale i feriecenteret. Lokalplanen taler om feriecenteret. Et forbud mod asylcenteret skyldes lokalplanen. Tabel 2.6: Eksempel dokumentsamling
Hvis dokumenterne i det valgte korpus ikke indekseres, m a alle dokumenter gennemlbes i deres fulde lngde for hver sgning. En operation der er alt for tidsmssig kostbar til at kunne anvendes i praksis [Salton, 1983, s. 53]. Udvlgelsen af det optimale st af attributter kan have overordentlig stor betydning for sgesystemets ydelse. Indekseringsprocessen er derfor den vigtigste, og formentlig den vanskeligste, af processerne i designet af et sgesystem [Salton, 1983, s. 52]. En succesfuld indeksering tjener tre form al [Salton, 1983, s. 54]: 1. At give brugeren mulighed for at lokalisere interessante informationer. 2. At relatere og associere ens informationer. 3. At prde nere en rankering af de individuelle informationer i forhold til hinanden, via et indeks af termer med velde neret virkefelt og mening. Indekseringen kan ske manuelt eller automatisk. En manuel indeksering er kendetegnet ved meget hj prcision, s afremt den udfres af domneeksperter [Salton, 1983, s. 54]. Da manuel indeksering er tidskrvende, isr for store dokumentsamlinger, er der blevet forsket meget i halv- og helautomatiske indekseringmetoder. En af de mest anvendte og eektive automatiske indekseringmetoder i forbindelse med ngleordsbaserede sgesystemer, er invertering af dokumenter.
2.4.1 Invertering af dokumenter Resultatet af dokumentinvertering er en liste af termer, med en reference til de dokumenter de forekommer i. Typisk genereres der en unik ngle, for hvert dokument i dokumentsamlingen. Det samme gres for hver term, der nskes indekseret. Der kan ud fra disse referencer genereres en liste med par af dokumentog termreferencer for hele dokumentsamlingen. En s adan parret liste af referencer, er en noget nr optimal struktur at gennemsge, og dermed en af grundene til ngleordsbaserede sgesystemers eektivitet, med hensyn til sgetid. Tabel 2.6 er en lille dokumentsamling med re korte dokumenter. Den tilsvarende inverterede struktur er tabel 2.7. Inverterede dokumentstrukturer kan ogs a indeholde information om, hvor ofte, eller hvor, en given term forekommer i et dokument. S avel frekvens som termposition, kan give anledning til vgtning af termer [Andersen et al., 1998]. Termer kan tilskrives strre betydning, s afremt de forekommer i eksempelvis et dokuments titel eller resume [Salton, 1983, s. 54].
2.4. DOKUMENTINDEKSERING Indeks 1 2 3 4 5 6 7 8 9 10 11 12
Term asylcenteret de et feriecenteret forbud i lokale lokalplanen mod om skyldes taler
23 Dokument 1, 4 1 2, 4 2, 3 4 2 1, 2 3, 4 4 1, 3 4 1, 3
Tabel 2.7: Inverterede dokumenter
2.4.2 Valg af termers indeksering En vsentlig designbeslutning er, om systemet skal indeksere alle termer i domnet eller om, de indekserede termer skal valideres op mod en referenceramme { en positivliste. Fordelen ved at validere termer imod en positivliste er, at man dels har mulighed for at associere relaterede termer, dels kan tage hjde for synonymi med videre. P a tilsvarende vis kan der benyttes en negativliste, ofte beskrevet som en stopordsliste, til at fravlge unskede termer. Unskede termer er ofte bindeord og ord med meget hj eller lav frekvens. En ulempe ved kontrolleret indeksering er, at det ger behovet for domneviden for systemets brugere. Graden af succes med sgning, kommer til at afhnge af erfaringen med at formulere gode foresprgsler, med de termer der genkendes af systemet [Salton, 1983, s. 54].
2.4.3 Vgtning og valg af termer Shannon beskriver hvordan vrdien af information i et dokument, en stning eller term, er en invers funktion af sandsynligheden for forekomst [Shannon, 1951]. Er der stor sandsynlighed for at en term forekommer, indeholder den ringe information og vice versa. Shannons betragtninger er analoge til den empirisk efterviste Zipf-lov. Loven beskriver hvordan termfrekvensen kan beregnes for alle termer i et dokument og termerne sorteres efter faldende termfrekvens. Termfrekvensen multipliceret med termens rank vil tilnrmelsesvis vre lig en konstant [Salton, 1983, s. 60{61]. Det kan argumenteres at termer der kun forekommer meget sjldent i dokumentsamlingen kan vre stavefejl eller lignende, hvilket der m a tages hjde for. H.P. Luhn redegr, med udgangspunkt i Zipf-lovmssigheden samt empirisk arbejde for, at termfrekvensen, for termer i et dokument, typisk er tilnrmelsesvist normalfordelt. Ydermere viser hans empiriske arbejde, at termer med s avel hj som lav termfrekvens er de termer, der er d arligst beskrivende for
24
KAPITEL 2. BAGGRUND OG BETRAGTNINGER
det p agldende dokuments indhold. Det vil alts a sige at de mest beskrivende termer for et dokument, er dem med en termfrekvens i strrelsesordnen af medianen. Udfordringen ved ovenfor beskrevende tommel ngerregel er, at bestemme grnsevrdierne for henholdsvis de hj- og lavfrekvente termer, der ikke skal indekseres samt, at der under normale omstndigheder ogs a vil forekomme, et mindre antal, b ade lav- og hjfrekvente termer, der er beskrivende for dokumentet [Salton, 1983, s. 60{63].
2.4.4 Opsummering Med fokus p a kretid vlger vi invertering som udgangspunkt for indekseringen. Under indekseringen anvender vi vores ordbog, som en positivliste der sikrer at der kun indekseres velde nerede termer. Slang og nyere introducerede ord og vendinger i det danske sprog indekseres ikke. Dette er en fordel, da sjldent forekommende termer, i flge Luhn's princip er relativt d arligt beskrivende for dokumenter. Vi kan dog risikere at indeksering med en utilstrkkelig ordbog, i form af manglende dkning, kan resultere i en mangelfuld indeksering af domner med et hjt specialiseret fagsprog. Den konkret anvendte positivliste er derfor vurderet i forhold til det bearbejdede korpus og fundet dkkende. Indekseringen skal dog ikke omfatte alle tilgngelige termer, men kun den delmngde der udgres af termer, der klassi ceres som substantiv, verbum eller adjektiv. Vi redegr for valget af, netop de tre ovenst aende grammatiske klasser, i det flgende afsnit.
2.5 Beskrivelse af dokumentindhold I dette afsnit redegres for vores tilgang til beskrivelse af dokumenter i vores sgesystem. Vi vil frst kortlgge behovet for beskrivelse, dernst identi cere mulige tilgange til beskrivelsen og efterflgende formulere en generisk beskrivelsesmodel for vores sgesystem.
2.5.1 Behovet for beskrivelse af dokumentindhold Vi nsker at kunne beskrive og reprsentere indhold af vilk arlige dokumenter. Vi har ikke nogen forh andsviden om hvilke emner der behandles i dokumenterne og er s aledes ndt til at kunne behandle og reprsentere alle mulige emnemssige former for indhold i dokumenter. Indholdet af vores dokumenter er kun begrnset af den verden der omgiver os. Vores model for beskrivelse er derfor ndt til at vre i stand til at reprsenterer alle former for vilk arlig dansk tekst. Modeller kan beskrive verden med forskellige grader af prcision. Vlger vi en meget prcis model af verden, vil den vre for kompleks til at kunne behandles maskinelt. Omvendt vil en for simpel model med begrnset udtrykskraft betyde, at der skal lgges for mange stttende regler i den omkringliggende programlogik [Luger & Stubble eld, 1998, s. 304]. Vi m a vlge en s a enkel model som muligt uden at begrnse mulighederne for at reprsentere mening og indhold.
2.5. BESKRIVELSE AF DOKUMENTINDHOLD
25
2.5.2 Kendte beskrivelsesmodeller En model vi tidligere har arbejdet med [Andersen et al., 1998] identi cerede, gennem en objektorienteret analyse, dokumenter og termer som informationsbrende enheder. Disse enheder blev senere specialiseret til dokumenter i databaser, vgtede dokumenter og termer samt st af vgtede dokumenter der reprsenterer et resultatst. Det er dog ikke givet at termer skal vre systemets mindste deskriptive enhed. Anick et al [Anick & Vaithyanathan, 1997, s. 317] foresl ar navnefraser (eng. simple noun compounds) de neret som to eller ere p a hinanden flgende adjektiver og substantiver, der afsluttes med et hovedsubstantiv, som den primre deskriptive enhed. I vores nuvrende arbejde har vi ydermere brug for at kunne behandle dokumenter p a et detaljeringsniveau svarende til stninger. Stninger vil kunne reprsenteres som en flge af termer. Stninger der har vret natursprogsanalyseret reprsenteres som strukturerede stninger, en specialisering af stninger. Vi indfrer ligeledes muligheden for at termer kan have en placering i en thesaurus eller ontologi, hvorfor termer specialiseres til at indeholde ogs a denne information. Der har i ere tidlige sammenhnge vret brug for at kunne beskrive verden p a en systematisk m ade. Indenfor feltet vidensreprsentation ses det eksempelvis i forbindelse med konceptuelle grafer [Luger & Stubble eld, 1998, s. 309{ 318], [Sowa, 1984, s. 69{126] og Knowledge Interchange Format [Ginsberg, 1991]. Frnvnte metoder baserer sig i udstrakt grad p a en tilnrmelsesvis fuldstndig natursprogsforst aelse, der ligger ud over projektets primre fokus. Vi mener dog at kunne udtrkke og reprsentere en vsentlig del af dokumenters mening og indhold, uden at arbejde i samme detaljeringsgrad med natursprogsanalyse.
2.5.3 En generisk dokumentbeskrivelsesmodel Den mest enkle beskrivelse af verden vil vre ved hjlp af en hierarkisk struktur af objekter og deres interaktion med hinanden og omverdenen. Vi beskriver s aledes entiteter og hndelser. Verber vil direkte kunne reprsentere hndelser, mens entiteter beskrives som sekvenser af adjektiver og et substantiv, s akaldte navnfraser. En navnefrase er en flge af nul eller ere adjektiver efterfulgt af et substantiv. Grammatikken for navnefraser er beskrevet i nedenst aende BNF grammatik: NF Adjer S Adj
-> -> -> -> -> ->
Adjer S Adj Adjer | Adj e alle substantiver alle adjektiver
Dokumentmodellen arbejder alts a med navnefraser og verber som mindste meningsbrende enheder. Som det fremg ar af ovenst aende grammatik kan en navnefrase betragtes som en specialisering af et substantiv. Har vi eksempelvis stningen: \Den glade mand krte en tur i sin nyindkbte rde bil.", giver
KAPITEL 2. BAGGRUND OG BETRAGTNINGER
26
det anledning til verbet \krte" og flgende to navnefraser: \glade mand" og \nyindkbte rde bil", hvor det tydeligt fremg ar at navnefraserne tilfjer vrdifuld information om stningens substantiver, herunder mandens humr samt bilens alder og farve. En information der eksempelvis ville vre svrt tilgngelig ved traditionel termbaseret indeksering. For at styrke forbindelsen mellem entiteter og hndelser, i ovenst aende tilflde mellem \mand", \krte" og \bil", identi ceres og grupperes disse p a stningsniveau. Et dokument er s aledes en mngde at stninger, hvor hver stninger har en beskrivelse som indeholder en mngde af navnefraser og en mngde af verber. Modellen abner mulighed for at hver stning, med en lille modi kation, kan have ere typer af forskelligartede beskrivelser p a lige fod med vores navnefraser og verber. Dette nder vi hensigtsmssigt, specielt i forhold til vores overordnede m al ang aende generiske design, modularitet og eksibilitet. Denne eksibilitet kunne eksempelvis udnyttes i forbindelse med dokumenter, der indeholder andet end tekst.
2.5.4 Opsummering Udgangspunktet for at opstille en dokumentmodel var nsket om at kunne indfange og behandle mening fra dokumenter p a en struktureret m ade. Det var derfor ndvendigt at beskrive de meningsbrende enheder, der h andterer de grundlggende syntaktiske strukturer, som vi tidligere har identi ceret i afsnit 2.2. Vores identi kation af objekter og deres interaktion som centrale for natursprogs mening, gav anledning til valget af navnefraser og verber. For at bibeholde sammenhngen mellem de meningsbrende enheder, struktureres disse p a stningsniveau.
2.6 Dokumentsgning Med de grundliggende enheder i systemet identi ceret, kan vi opstille normative retningslinier for sgning i og sammenligning af beskrivelser. I udarbejdelsen af disse retningslinier behandler vi de udfordringer der manifesterede sig primrt p a det semantiske niveau, herunder ords ertydighed og kontekst. Vores arbejde med de normative retningslinier, sker med udgangspunkt i eksisterende metoder og videreudvikles til at omfatte begrebsmssig foresprgselsmodi kation og sammenligning.
2.6.1 Sgeprocessen Vi mener at sgeprocessen grundlggende er en tilpasning af brugerens foresprgsel og dokumentsamlingen til sammenlignelige strrelser. N ar en sammenlignelig form er opn aet, kan dokumenter der matcher brugerens foresprgsel lokaliseres i dokumentsamlingen. Sgeprocessen kan anskues i 4 trin.
Brugeren formulerer sin foresprgsel til systemet.
2.6. DOKUMENTSGNING
27
Systemet foretager en indledende behandling af foresprgslen. Systemet evaluerer foresprgslen og udvlger relevante dokumenter. Systemet prsenterer brugeren for de udvalgte dokumenter.
Kooperative sgesystemer er oftest iterative [Motro, 1994] og tillader brugeren at undersge svarene af sine foresprgsler og arbejde videre med dem. Det giver derfor mening at reprsentere et generelt sgesystem som p a gur 2.2.
'$ &% -
(Re)formulering af m al Prsentation af resultat
6
?Foresprgselsmodi kation
Evaluering
Figur 2.2: Model af simpelt sgesystem I flgende afsnit vil vi, med undtagelse af prsentation af resultater, kort redegre for de enkelte delprocesser, der er at nde i de este sgesystemer.
2.6.2 Formulering af foresprgsel Der er ere m ader at lade brugeren kommunikere sit m al til sgesystemet. Den dominerende og mest enkle formulering af foresprgsler, sker ud fra en implementationsmssig betragtning, i form af ngleord. Mere stringente sgesprog ses dog ogs a benyttet og er specielt fremherskende i bibliotekssammenhnge. Vi har i det flgende valgt udelukkende at beskrive rent tekstuelle metoder til formulering af foresprgsler. Teknikker som eksempelvis manipulation af gra ske Venndiagrammer, behandles ikke. De vigtigste former for foresprgselsformulering beskrives s aledes i det flgende.
Ngleord Brugeren speci cerer et eller ere ngleord, der opleves som beskrivende, for det nskede resultat. I nedenst aende eksempler er der implicit konjunktion mellem de anvendte ngleord. Er brugeren i frd med at planlgge ferie til USA, vil ngleordene naturlig kunne vre \ferie USA". Er brugeren specielt interesseret i mulighederne for at leje en bil under opholdet, kan foresprgslen for eksempel udvides til \ferie USA billeje". Udvlgelsen af gode, ngleord forudstter domneviden, med hensyn til relevante formuleringer og detaljeringsgrad. For at kunne vlge gode ngleord, er det ndvendigt at kende de termer eller typer af information der er indekseret. I ovennvnte eksempel kunne der eksempelvis vre tale om sgning i en database hos et autoudlejningsselskab. Brugeren indtaster \bil Californien", men
28
KAPITEL 2. BAGGRUND OG BETRAGTNINGER
databasen er struktureret p a et hjere detaljeringsniveau og der returneres et tomt svar. Der kan ikke sges p a typen af kretj eller stat, men m aske p a bilmrke og by, hvorfor en sgning p a \Chevrolet Oakland" ville have vret mere succesfuld. Et konkret eksempel er Arbejdsformidlingens system Amanda, der indeholder en database med jobbeskrivelser. Det er i databasen ikke muligt at sge efter eksempelvis det gngse \taxachaur", men derimod det mere kryptiske \vognmand med kompetance til hyrevogn".
Stringente sgesprog Strkt strukturerede databaser tilg as ofte med mere stringente sgesprog. Brugeren af et bibliotekssystem beskriver eksempelvis sit m al, ved at speci cere en eller ere attributter, ved det nskede resultat. Attributterne er typisk forfatternavn, titel, emneord, og lignende. Et af de sgesprog, der tidligere har opn aet strre udbredelse, isr p a biblioteker, er Common Command Language (CCL). Stringente sgesprog kan vre et strkt vrktj for kendere og trnede brugere, men for den lejlighedsvise bruger, er stringente sprog en reel hindring.
Natursprog Brugeren formulerer sit m al direkte til sgesystemet. For eksempel \Hvem skd John F. Kennedy?". Sgesystemet kan eksempelvis omforme brugerens foresprgsel til en intern reprsentation, inden den sendes videre til det egentlige sgesystem. En s adan teknik er Speci c Expressive Forms-metoden (SEF), der reformulerer foresprgslerne til domnespeci kke formuleringer [Lawrence & Giles, 1998]. Dette sker for bedre at parre foresprgslens formulering med dokumentsamlingens. Ovenst aende foresprgsel vil for eksempel kunne modi ceres, s a der sges efter dokumenter med formuleringer som \skd Kennedy", \myrdede Kennedy", \skd Prsident Kennedy", og lignende reformuleringer. Foresprgsler formuleret i natursprog kan evalueres i ere dybder. SEF er et eksempel p a en metode, der opererer p a de lave processuelle niveauer. Systemer der i hjere grad tolker og behandler betydning af natursprog arbejder p a de hjere niveauer. Et eksempel p a et komplekst system, der inkorporerer pragmatisk viden, er et system der ikke svarer \ja" p a sprgsm alet \ved du hvad klokken er?". Vi ser brugerens foresprgsel som et stningseksempel eller en modelstning, som brugere nsker at nde reprsenteret i dokumentsamlingen. Hvorvidt brugeren formulerer sin foresprgsel som et sprgsm al, er dog uden betydning for vores fortolkning, blot der i sprgsm alet benyttes begreber og fraser som systemet kan identi cere og bearbejde.
2.6.3 Foresprgselsmodi kation Inden foresprgslen sendes til egentlig evaluering i sgesystemet, kan foresprgslen modi ceres for at ge henholdsvis precision eller recall.
2.6. DOKUMENTSGNING
29
Foresprgselsmodi kation kan eksempelvis anvendes til projicering af foresprgsel fra brugerens verden til databasens verden. Foresprgslen kan modi ceres s a de termer brugeren anvender i foresprgslen projiceres over i den terminologi, der anvendes i dokumentsamlingen. I medicinske databaser, der anvendes af lgfolk, ses sgninger med termer som \hoftebrud" og \mellemrebetndelse" mens dokumentsamlingen er indekseret med tilsvarende latinske betegnelser. Ensretning af foresprgsel og dokumenters terminologi er ndvendig og h andteres her ved foresprgselsmodi kation. I det flgende vil vi eksempli cere brugen af foresprgselsmodi kation til at hve enten precision eller recall [Salton, 1983, s. 174].
Styrkelse af recall Ved, som i ovenst aende medicinske eksempel, at tilfje synonymer for de termer brugeren har anvendt, kan recall hves. Termer i brugerens foresprgsel kan ekspanderes, ikke bare med synonymer, men ogs a med termer fra en lang rkke andre interleksikalske relationer, eksempelvis holonymi, meronymi eller hyponomi. S aledes kan termen \kongehuset", med udgangspunkt i SIMPLE-Ordbogen, tilfjes eller erstattes af blandt andet termerne \konge, enkedronning, prins, prinsesse" der alle er del{af kongehuset. Udvidelse af foresprgslen med interleksikalske relationer, kan dog ikke gres ukritisk. Det danske sprog indeholder homonymer, der br h andteres fr modi kationen kan foretages.
Styrkelse af precision En ukritisk tilfjelse af synonymer vil medfre et fald i precision, idet vi kan risikere at tilfje synonymer, der ikke er gyldige i en given sammenhng. For at undg a et fald i precision er det dermed vigtigt at termers aktuelle betydning bestemmes fr der udvides med deres synonymer. Homonymer udgr p a tilsvarende vis en udfordring. Findes eksempelvis ordet \kost" i en foresprgsel er det ndvendigt at afgre om det bruges i betydningen, \han spiste en nrende kost" eller \han fejede med sin kost". S afremt sgesystemet er i stand til at afgre, i hvilken betydning brugeren benytter de
ertydige termer i foresprgslen og tilsvarende har vret i stand til at afgre betydningen i de indekserede dokumenter, kan precision hves. Precision hves da systemet ikke returner dokumenter, der indeholder ngleord der forekommer i en forkert, og for brugeren irrelevant, betydning [Jing & Tzoukermann, 1999, s. 90{91]. Foresprgselsudvidelse anvendes ofte i sammenhng med kooperative sgesystemer, hvor systemet foresl ar termer, som brugeren kan ekspandere sin foresprgsel med. Systemet udvider kun foresprgslen, med de termer som brugeren udvlger. P a denne m ade sikres det, at sgningen manipuleres i en retning, der honorerer brugerens intention. Det er dog i mange henseender ikke praktisk muligt, at lade brugeren afgre termers korrekte betydning. Det er derfor interessant at undersge mulige tilgange til en automatiseret bestemmelse af termers betydninger.
30
KAPITEL 2. BAGGRUND OG BETRAGTNINGER
Bestemmelse af kontekst Bestemmelse af termers betydning er essentiel for sgesystemer, der opererer p a ikke monomorfe sprog, idet termer kan have forskellig betydning afhngig af deres kontekst. Vi vil her beskrive de udfordringer, der ligger i bestemmelsen af termers betydning og efterflgende undersge to konkrete analysemetoder.
Den rigtige analyseenhed N ar en terms semantik skal analyseres, er konteksten en variabel lingvistisk analyseenhed. N ar der, som i dette tilflde, er tale om en maskinel analyse, giver det anledning til metodiske overvejelser om, hvor meget af den omkringst aende kontekst, i form af nabotermer, der skal indg a i analysen. I klassisk information retrieval, har det tidligere vret normen, at beskftige sig med enkelttermer som analyseenhed [Anick & Vaithyanathan, 1997, s. 319]. Samhrighed mellem termer har dermed typisk vret, deres afstand og forekomst i srlige omr ader af teksten, et cetera. I et traditionelt sgesystem, hvor dokumenter behandles som mngder af isolerede enkelttermer, bevares rkkeflge og dermed termers kontekst ikke. Intuitivt har traditionelle systemer ikke mulighed for at resolvere termers betydning. Der resolveres dog implicit betydning, idet sgninger typisk sker med mere end et sgeord. Et dokument gives en hj score n ar, ikke et, men ere af de angivne sgeord forekommer. Disse st af gensidigt komplimenterende sgeord er ofte nok til implicit at afgrnse sgningen til den rette betydning af de enkelte sgeord [Schutze & Pedersen, 1995, s. 161]. Det er dog et problem, at der ofte anvendes meget f a beskrivende termer i foresprgsler. Gennemsnittet er 2,4 termer per foresprgsel [Wolfram, 2000], hvilket giver sgesystemer et d arligt grundlag for at tolke brugerens intention med sgningen. Som beskrevet er bestemmelse af betydning vigtigst ved sgninger med f a ngleord eller begreber, hvor der ikke er sgeord nok til at begrnse sgningen til den rette kontekst. Vlger vi at arbejde med foresprgsler formuleret i natursprog, har vi de bedst muligt betingelser for at resolvere betydning.
Resolveringsdybde Der kan arbejdes med bestemmelse af betydning p a to niveauer. Man kan vlge at skelne mellem forskellig brug af termer eller at knytte de forskellige anvendelser af termerne til en semantik. Det vil sige enten kunne skelne mellem to betydninger af \bank", \bank(1), bank(2)", eller identi cere to betydninger \bank(tv), bank(pengeinstitut)". Vi mener at der i et system der gr udprget brug af natursprogsanalyse og leksika vil vre en fordel ved at kunne identi cere de enkelte betydninger. En skelnen vil give mulighed for eksempelvis ekspandering ved hjlp af interleksikale relationer.
2.6. DOKUMENTSGNING
31
Fremgangsmade Der har vret forsgt anvendt et bredt spekter af informationskilder til bestemmelse af betydning. Tidlige tilgange fokuserede p a h andkodede regler for resolvering af betydning, som eksempelvis Kelly og Stone [Kelly & Stone, 1975]. Vi mener dog at en automatiseret tilgang er at foretrkke idet der er forbundet store omkostninger med den manuelle konstruktion af regelst. Vi vil derfor specielt se nrmere p a metoder der alene baserer sig p a dokumentsamlingen og eventuelt ordbogsmateriale. Tidligere er s adanne systemer set beskrevet af blandt andet Lesk [Lesk, 1986], Croft [Krovetz & Croft, 1989], Hearst [Hearst, 1991] og Yarowsky [Yarowsky, 1992]. Jing og Tzoukermann [Jing & Tzoukermann, 1999, s. 91] anvender kontekstvektorer til bestemmelse af kontekst. I Jing og Tzoukermanns tilgang analyseres stninger, de neret ved et vindue p a fem termer til begge sider, m alt fra den term, hvis betydning skal bestemmes. For hver indekseret term opbygges en kontekstvektor (se gur 2.3), der indeholder termer fra den analyserede terms lokale kontekst. Kontekstvektor : Bank f Konto(0; 44) Rente(0; 38) Gebyr(0; 11) g Figur 2.3: Konteksvektor Hver term i vektoren tildeles en vgt i intervallet nul til en, der beskriver hvor ofte, termen optrder sammen med den analyserede term, relativt til hvor ofte termen optrder i dokumentet. V gt =
T ermf rekvenslokalkontekster T ermf rekvensdokument
(2.1)
Hver termvektor beskriver s aledes en term og den kontekst i form af vgtede nabotermer. Jing og Tzoukermann forudstter at en term har den samme betydning igennem et helt dokument [Jing & Tzoukermann, 1999], hvilket dog ikke er en ndvendig begrnsning [Schutze & Pedersen, 1995, s. 166]. Pedersen og Schutze anvender ligeledes kontekstvektorer [Schutze & Pedersen, 1995], men er i stand til at modellere, at ortogra sk ens termer kan have semantisk forskellige betydninger igennem et dokument. Selve kontekstvektoren er meget lig Jing og Tzoukermanns [Jing & Tzoukermann, 1999, s. 91], men der opereres p a stninger med et fyrre ords vindue og vgten er givet ved den inverse dokument frekvens V gt = log (
Dokumenter ) DokumentF rekvensterm
(2.2)
Pedersen og Schutze anvender gruppering af kontekstvektorer til at h andtere
ere betydninger af enkelte termer, tilgangen er analog til de metoder de prsenterer i [Cutting et al., 1992, Karger & Pedersen, 1993, Hearst et al., 1995] og
KAPITEL 2. BAGGRUND OG BETRAGTNINGER
32
[Hearst & Pedersen, 1996] i forbindelse med gruppering af dokumenter. Pedersen og Schutze behandler dermed gruppering af dokumenter og gruppering af termer nsten analogt. Dette er helt i overensstemmelse med den grundliggende hypotese om gruppering8 , der antager at dokumenter, der er tt associeret, vil vre relevante som svar p a samme foresprgsel. Med andre ord har dokumenter eller termer fra samme gruppe en flles betydning.
Forbedringer Jing og Tzoukermann [Jing & Tzoukermann, 1999, s. 94] integrerer, for at forbedre precision, deres kontekstvektor-model med en morfologisk analyse. Iflge Jing og Tzoukermann hver morfologi isoleret recall mens bestemmelse af ertydige termers betydning isoleret forbedrer precision [Jing & Tzoukermann, 1999, s. 92]. Kombinationen af de to metoder vil iflge Jing og Tzoukermann hve precision [Jing & Tzoukermann, 1999, s. 96]. Vi er af den opfattelse at h andtering af morfologi gennem eksempelvis traditionel lemmatisering, s a som Porter-stemming [Porter, 1980], ikke er optimal. Istedet for at lemmatisere ved hjlp af et ad hoc genereret regelst, vlger vi diametralt at udfolde alle ord i vores ordbger, i alle deres morfologiske forekomster.
Erfaringer med bestemmelse af betydning Mod forventning viser en rkke tidligere eksperimenter ikke videre forbedring af hverken precision eller recall ved bestemmelse af ords betydning [Weiss, 1973, Krovetz & Croft, 1992]. Enkelte tekster rapporterer om direkte ringere ydelse [Voorhees, 1993, Wallis, 1993] ved bestemmelse af ords betydning. Yarowsky [Yarowsky, 1992] rapporterer som en af de f a om gode resultater. Hans bestemmelse af betydning bygger p a data fra Roget's thesaurus. Da materialet i eksempelvis Nudansk Ordbog med Etymologi er af en lignende karakter, vil det vre et godt valg af materiale til bestemmelse af homonymers betydning. Implementeres metoder til bestemmelse af betydning, er det imperativt at de er prcise og fungerer med en hj oplselighed [Sanderson, 1994]. Sanderson beskriver hvordan bestemmelse af ords betydning i korte sgninger er direkte problematiske og i lngere sgninger ganske uden eekt [Sanderson, 1994]. Vi er af den opfattelse, at n ar mange sgeord optrder sammen i en foresprgsel ges sandsynligheden for, at de samme ord kun ndes sammen i dokumenter, hvis de benyttes i en tilsvarende betydningsdimension. Har vi eksempelvis en beskrivelse, der indeholder ordene \mus", \grsmark" og \rovfugl" bestemmes betydningen af homonymet \mus" af beskrivelsens resterende ord. Findes ordet \mus" i et dokument, der samtidigt indeholder ordet \grsmark" eller \rovfugl", ges sandsynligheden for at ordet anvendes i samme betydning. Vi mener at anvendelsen af Nudansk Ordbog til bestemmelse af ords betydning, kan styrkes med brugen af leksika og encyklopdier. Beskrivelserne af opslagsord i disse typer af vrker, er typisk mere fyldig end i sdvanlige ordbger. Der opn as en strre mngde af beskrivende ord for hvert opslagsord, men p a bekostning af faren for at introducere stj i beskrivelserne. 8 Rijsbergens
grupperingshypotese (eng.
cluster hypothesis)
[van Rijsbergen, 1979, s. 30]
2.6. DOKUMENTSGNING
33
Et eksempel p a anvendeligt materiale er Den Store Danske Encyklopdi [Lund, 2000], som vi har haft adgang til under vores arbejde. Materialet der var tilgngeligt var dog s a begrnset i omfang, at en praktisk anvendelse var udelukket. Vi mener alts a at kontekstvektorer og vores rige ordbogsmateriale, i kombination, vil vre et uvurderligt vrktj til identi kation og resolvering af termers ertydighed. Danner vi eksempelvis kontekstvektorer for termerne i s avel foresprgsler som dokumenter, kan disse danne udgangspunkt for sammenligning med tilsvarende kontekstvektorer for opslagsords beskrivende indgange i ordbger. Vi mener at en s adan fremgangsm ade vil kunne knytte konkrete forekomster af termer, til deres betydning.
2.6.4 Evaluering af foresprgsel Vi har nu beskrevet fremgangsm ader til identi kation af systemets enkeltord og deres betydninger og kan nu fortstte med betragtninger omkring sammenligning og rankering baseret p a mere komplekse beskrivende enheder.
Boolsk evaluering I et simpelt nglordsbaseret sgesystem, returneres dokumenter fra dokumentsamlingen, der indeholder mindst en af termerne fra foresprgslen. Hvis D(ti ) er mngden af dokumenter der indeholder ngleordet ti , opfyldes for alle ord i foresprgslen t1 ; : : : ; tn at D(t1 ) [ D(t2 ) [ [ D(tn )
(2.3)
Dette er kvivalent med logisk disjunktion af de enkelte termer. P a tilsvarende vis kan dokumenter, der indeholder alle ngleord, logisk konjunktion, udvlges ved D(t1 ) \ D(t2 ) \ \ D(tm )
(2.4)
Resultatsttet kan rankeres ved, at returnere alle dokumenter opfyldende (2.3) og tildele hvert dokument en vgt. Vgten mi beregnes for hvert dokument Di ved at dividere antallet af termer som dokument og foresprgsel har til flles jQ \ di j med antallet af termer i foresprgslen jQj, se (2.5). mi =
jQ \ Di j jQj
(2.5)
Boolsk rankering benyttes typisk p a dokumenter der behandles som st af termer. Evaluering er en simpel binr indeholder/indeholder ikke funktion. En af udfordringerne ved klassisk boolsk evaluering er, at der ikke tages hjde for hvor i dokumenterne ngleord ndes. Sges der efter eksempelvis ngleordene \olie salat" for at nde frokost anretninger med olie p a salat, vil dokumenter
34
KAPITEL 2. BAGGRUND OG BETRAGTNINGER
der indeholder de to termer i forskellige dele af teksten ogs a blive returneret. En tilgang til at afhjlpe dette er at tage hensyn til afstanden mellem sgeordene. St ar sgeordene tt vil det resultere i en hjere vgtning af det aktuelle dokument. Dette er analogt til at indsnvre evaluering fra et helt dokument til eksempelvis et afsnit eller en enkelt stning. P a samme m ade som vi mener, at det er ndvendigt at indsnvre omr adet hvori der evalueres, er vi af den opfattelse at det ogs a er ndvendigt at knytte termer der er gensidigt afhngige sammen. Termerne \bl a bil" giver kun den tiltnkte mening, n ar de behandles under et. Vi nsker ikke at brugeren skal h andtere eksplicit gruppering af termer, gennem et komplekst foresprgselssprog. Vi nsker derimod at kunne h andtere sammenhrende termer gennem analyse af natursprog, idet brugeren implicit danner de ndvendige konstellationer.
Sammenligning af meningsbrende enheder Udfordringen ved vgtberegningen er frst og fremmest at nde en vgtningsmetode, der understtter natursprogssgninger. Eksempelvis br foresprgslen \Manden krte den store rde bil" rent faktisk returnere de stninger, der ligner foresprgslen mest, som bedste svar. Hvis der eksisterer en stning, der er magen til foresprgslen, skal denne stning tildeles den hjeste vgt. Derudover ville det vre form alstjenligt, hvis synonymordbogen og ontologien, foranledigede at stninger af typen \brandmanden krte den store rde brandbil" blev vgtet tilsvarende hjt. Vi har indekseret stninger som henholdsvis mngder af verber og mngder af navnefraser, hvor en navnefrase atter er en mngde substantiver samt eventuelt disses foranstillede adjektiver. Med andre ord er der for verbernes vedkommende tale om mngder af termer, mens der p a navnefraseniveauet er tale om mngder af mngder af termer. Hvis vi srskilt betragter de enkelte navnefraser eller verber med sammenligning for je, kan vi sammenligne to navnefraser eller to mngder af verber, ved at sammenligne dem term for term. I begge tilflde vil det alts a vre relevant at bruge en af de klassiske associerings{koeÆcienter [van Rijsbergen, 1979, s. 2427] og [Salton, 1983, s. 201-204]. Det skal understreges at Rijsbergen primrt fokuserer p a koeÆcienterne under den simpli cerede antagelse, at termerne hjst forekommer en gang i reprsentationen og s aledes anskuer reprsentationer som mngder af unikke termer, mens Salton behandler hver reprsentation som en vektor, der er i stand til at resolvere ere forekomster af samme term, da vektoren indeholder en attribut, der angiver antal forekomster af hver term. Da termer kan forekomme ere gange i vores reprsentationsmodel, er Salton's de nition af koeÆcienterne, som udgangspunkt den mest relevante i vores tilflde. Idet vi eksempelvis betragter foresprgslen givet ved navnefrasen N PQ og en indekseret navnefrase, fra en stning, givet ved navnefrasen N PS . Begge navnefraser kan reprsenteres som vektorer, p a flgende form: N PQ = (T ermQ1 ; T ermQ2 ; : : : ; T ermQt )
(2.6)
N PS = (T ermS 1 ; T ermS 2 ; : : : ; T ermSt )
(2.7)
2.6. DOKUMENTSGNING
35
S a er de respektive koeÆcienter iflge Salton givet ved: Dice's koeÆcient
Ptk=1 T ermQk T ermSk Ptk=1 T ermQk + Ptk=1 T ermSk 2
(2.8)
Jaccard's koeÆcient
Pt ermQk Qk TP Ptk=1 T ermQk + Pktk=1=1 TTerm t T erm T erm ermSk Qk Sk k=1
(2.9)
Cosine koeÆcienten
Pt qPt k=1 T ermQk 2 T ermQk)
(T ermSk )2
k=1 (T ermQk )
(2.10)
Overlap koeÆcienten
Ptk=1 T ermQk T ermQk) P P min( tk=1 T ermQk ; tk=1 T ermSk )
(2.11)
I tabel 2.8 sammenligner vi de re koeÆcienter resultatmssigt, beregnet udfra sammenligningen af foresprgselen Q med stningen S , idet vi antager ~ og S ~ er forskellige varianter af en vektor, der reprsenterer en eller ere at Q forekomster af termerne: a,b,c,d,e,f . Q \ S er de termer som foresprgslen og stningen har til flles. jQ~ j er antallet af termer i foresprgslen og jS~ j er antallet af termer i stningen, eller de respektive vektorers lngde givet ved henholdsvis (2.12) og (2.13)
jQ~ j = jS~ j =
Xt T erm
Qk
(2.12)
Xt T erm
Sk
(2.13)
k=1
k=1
Produktet af de to vektorreprsentationer, er et m al for antallet af flles termer i de to reprsentationer givet ved: ~ S ~= Q
Xt T erm k=1
Qk T ermSk
(2.14)
KAPITEL 2. BAGGRUND OG BETRAGTNINGER
36
Antal termer i foreningsmngden af termer i de to reprsentationer er givet ved:
jQ~ [ S~ j =
Xt T erm
k=1
Qk +
Xt T erm
Sk
k=1
Xt T erm k=1
Qk T ermSk
(2.15)
Dette giver anledning til tabel 2.8. ~ Q
~ S
(1,0,0,0,0,0) (1,0,0,0,0,0) (1,0,0,0,0,0) (1,1,0,0,0,0) (1,1,0,0,0,0) (1,1,0,0,0,0) (1,1,1,0,0,0) (1,1,1,0,0,0) (1,1,1,0,0,0) (1,1,0,0,0,0) (1,1,0,0,0,0) (1,1,0,0,0,0) (1,1,0,0,0,0) (1,1,0,0,0,0) (1,1,0,0,0,0)
(1,0,0,0,0,0) (1,1,0,0,0,0) (1,1,1,0,0,0) (1,1,0,0,0,0) (1,0,1,0,0,0) (1,1,1,0,0,0) (1,1,1,0,0,0) (1,1,0,1,0,0) (1,0,0,1,1,0) (1,0,0,0,0,0) (2,0,0,0,0,0) (2,1,0,0,0,0) (2,2,0,0,0,0) (3,3,1,1,1,1) (1,1,1,1,1,1)
Q\S
a a a ab a ab abc ab a a a ab ab ab ab
~ jQj
~ jSj
~ S ~ Q
~ [ Sj ~ jQ
Dice
Over:
J acc:
Cos:
1 1 1 2 2 2 3 3 3 2 2 2 2 2 2
1 2 3 2 2 3 3 3 3 1 2 3 4 10 6
1 1 1 2 1 2 3 2 1 1 2 3 4 6 2
1 2 3 2 3 3 3 4 5 2 2 2 2 6 6
1,00 0,67 0,50 1,00 0,50 0,80 1,00 0,67 0,33 0,67 1,00 1,20 1,33 1,00 0,50
1,00 1,00 1,00 1,00 0,50 1,00 1,00 0,67 0,33 1,00 1,00 1,50 2,00 3,00 1,00
1,00 0,50 0,33 1,00 0,33 0,67 1,00 0,50 0,20 0,50 1,00 1,50 2,00 1,00 0,33
1,00 0,71 0,58 1,00 0,50 0,82 1,00 0,67 0,33 0,71 0,71 0,95 1,00 0,90 0,58
Tabel 2.8: Sammenligning af vgtkoeÆcienter Hvis vi betragter de situationer, hvor der ikke er ere forekomster af samme term i en stning, ses det umiddelbart at Overlap{koeÆcienten (2.11), med undtagelse af nogle specialtilflde, tildeler vgten 1. Dice (2.8) og Cosine (2.10) vgter stort set identisk, mens Jaccard (2.9) har en lidt strre spredning. Betragter vi de situationer, hvor der er ere instanser af samme term, er billedet i store trk det samme, med den vsentlige undtagelse at Cosine{ koeÆcienten (2.10) altid be nder sig i intervallet [0 : 1]. Med udgangspunkt i vre betragtninger, kan vi s aledes fravlge Overlap{ koeÆcienten, da denne vil give sig udslag i diskriminering af lange navnefraser. For eksempel vil en sgning p a \ny rd cykel" returnere alle stninger med vgten 1, hvis bare en af termerne indg ar i stningen. Jaccards koeÆcient fravlges alene med baggrund i denne koeÆcients store spredning, n ar der optrder ere instanser af samme term i en beskrivelse. Med hensyn til hvilken af de vrige to koeÆcienter synes Cosine{koeÆcienten at vre det bedste valg, da den er robust med hensyn til ere instanser af samme term i en reprsentation. Omvendt er Dice's koeÆcient relativt ukompliceret at implementere. Vi har s aledes valgt Dice's koeÆcient i denne prototype, men vil implementere Cosine{koeÆcienten i nste version.
2.6. DOKUMENTSGNING
37
Med hensyn til vgttildeling p a beskrivelsesniveau, hvor b ade foresprgsel og stning kan best a af ere navnefraser, er de ovennvnte associerings{koeÆcienter ikke anvendelige, da de af natur ikke opererer p a mngder af mngder. Til dette form al anvender vi den maksimale vgt imellem to navnefraser, velvidende at det i visse tilflde har nogle uheldige konsekvenser. Den maksimale vgt vil opfylde vores vsentligste kriterie, at en stning, der indeholder hele foresprgslen vil f a en relativt hj vgt. Men i visse tilflde dekomponeres en natursprogsforesprgsel til ere navnefraser, hvor mindst en af disse kun best ar af et substantiv. I disse tilflde vil vi alts a f a returneret stninger, der alene indeholder dette substantiv, relativt hj vgt. For eksempel vil foresprgslen9 \den store strke mand lftede skken" give hjere vgt til stninger, der alene indeholder substantivet \sk" end stninger, der indeholder \stor mand" eller \strk mand" med andre ord er stninger, der indeholder hele navnefrasen \sk" lige s a hjt vgtede som stninger, der indeholder hele navnefrasen \stor strk mand". Med gennemgangen af simpel sammenligning og sammenligning af komplekse beskrivelser, har vi et udgangspunkt for at lave en beskrivelsesevaluering. Sammenligningen kan dog p a nuvrende tidspunkt ikke h andtere begrebsmssig sammenligning, hvilket, i det flgende afsnit, leder os til betragtninger omkring inddragelsen af viden om synonymi og begrebsmssige relationer.
2.6.5 Ontologi For at foretage en sammenligning der ligger ud over den basale termbaserede sammenligning, m a vi ndvendigvis inddrage viden om begrebsmssige sammenhnge. Det skyldes at kendskabet til disse sammenhnge giver os mulighed for at foretage en semantisk sammenligning af beskrivelser. Vi har via OntoQuery{projektet f aet adgang til Den Danske SIMPLE{ Ordbog, som er en semantisk ontologibaseret ordbog. SIMPLE10 [Pedersen, 1999, Pedersen & Nimb, 2000, Pedersen & Nimb, 1999] er en udvidelse af det Europiske Le-Parole ordbogsprojekt [Ruimy et al., 1998, Navaretta, 1998].
Ontologiens indhold SIMPLE{Ordbogen indeholder p a nuvrende tidspunkt 10.000 semantiske beskrivelser. Ontologien i SIMPLE{Ordbogen best ar af 138 semantiske typer dkkende entiteter, egenskaber og hndelser, svarende til henholdsvis klasserne substantiver, adjektiver og verber [Pedersen, 1999]. Ordbetydninger beskrives ved hjlp af typer, der arves fra en eller ere semantiske typer, henholdsvis simple og sammensatte typer [Pedersen, 1999]. Pedersen beskriver hvordan hver betydningsdimension beskrives med en udvidet qualiateori baseret p a Pustejovsky [Pustejovsky, 1995, Pedersen, 1999]. De enkelte qualiaroller er eksempelvis formelle (eng. formal), konstitutive (eng. constitutive), teliske (eng. telic) og agentive (eng. agentive). I eksemplet \puslespil" vil den formelle rolle, som vist p a gur 2.4, vre en er-en-relation til \spil". Den konstitutive rolle udtrykker en vifte af semantiske relationer, i dette tilflde en 9 Hvis der ses bort fra vgte der skyldes synonymordbogen og ontologien. 10 Semantic Information for Multifunctional Plurilingual Lexica (SIMPLE)
KAPITEL 2. BAGGRUND OG BETRAGTNINGER
38 Formal
Constitutive
Spil
Telic
Pap- el. træbrikker
Samle
Agentive
Fremstille
Puslespil
Figur 2.4: Betydningskomponenter i Den Danske SIMPLE{Ordbog best ar-af-relation til \brikker". Den teliske rolle beskriver brugen af ordet gennem bruges-til-relationen, da puslespil samles vil der naturligt vre en relation til netop \samles". Semantic Unit De nition
Corpus example Semantic type Uni cation Path Domain Artifact Formal quale Agentive quale Telic quale Constitutive quale Systematic Polysemi Synonymy
puslespil ART (artifact reading) et spil med tr- el. papbrikker i forskellige faconer som skal lgges sammen s a de danner et hele (NDO) nu var hun nsten ved at vre frdig med det puslespil, hun var begyndt p a lige efter p aske Artifact Concrete Entity|Agentive|Telic General Semantic Class is a = spil created by = fremstille used for = samle has as parts=brikker ArtifactAbstract= puslespil ABS nil
Tabel 2.9: Eksempel p a indgang i SIMPLE{Ordbog [Pedersen, 1999, s. 3] I eksemplet i tabel 2.9 der viser en hel indgang for substantivet \puslespil", ses ud over de semantiske relationer en fritekstde nition og et eksempel p a brug. Udover de attributter der ses i indgangen nedarves der qua er-en relationen attributter fra den tilsvarende \spil" indgang.
Det generative leksikon Den Danske SIMPLE{Ordbog er baseret p a de lingvistisk principper Pustejovsky introducerede i [Pustejovsky, 1991] og [Pustejovsky, 1995]. Teorien om det generative leksikon tager udgangspunkt i et forsg p a at modellere semantisk ertydighed, polysemi, der g ar ud over homonymi. Forekomsten af ertydighed betyder, at Pustejovsky opfatter leksikale indgang som komplekse af natur.
2.6. DOKUMENTSGNING
39
I flge teorien er substantivet \frokost" semantisk ertydigt i den forstand, at frokost kan vre et fysisk objekt, hvis det optrder i en sammenhng, hvor der refereres til en bestemt frokostret, for eksempel en tallerken med \salade paysanne". Frokost kan alternativt vre en hndelse, som har en tidsmssig udstrkning, n ar der refereres til frokost i betydningen en frokostpause. Det generative leksikon modellerer, at der potentielt kan dannes uendeligt mange betydninger, udfra et endeligt antal termer. Kompleksiteten af et generativt leksikon er ikke en hindring for brugen, idet der er tale om en sprogteknologisk ordbog som primrt er tiltnkt maskinel anvendelse [Pedersen, 1999]. Iflge Pustejovsky [Pustejovsky, 1997, s. 6] koncentrerer teorien om det generative leksikon sig om flgende problemstillinger:
At forklare sprogs polymorfe natur. At karakterisere det semantiske indhold af natursproglige ytringer. At fange den kreative brug af ord i nye kontekster. At udvikle en mangfoldigere, ko-kompositionel11 semantisk reprsentation.
Et af de vsentligste aspekter ved teorien er at reprsentationen og behandlingen af ertydighed er central for vores forst aelse af mening. Qualia-strukturen er kernen i den generative formalisme og bygger p a den meget vsentlige forudstning, at termers semantik bedre beskrives via et antal relationer til andre begreber, end via et fast antal prde nerede attributter [Pustejovsky, 1997, s.7]. Ideen bag qualia-roller er at muliggre ere forskellige forklaringstyper til et givet objekt. For eksempel forst as en kuglepen i flge [Ta, 1997] i virkeligheden ud fra dens funktion. En dybere forst aelse for kuglepennen har man hvis man forst ar at den kan kategoriseres som et artefakt og ikke en ting af naturlig oprindelse. Hvis man bruger en kuglepen i andet regi, for eksempel til at kaste med, s a udnytter man en anden kapacitet ved den, og dens skrivefunktionalitet er i den forbindelse irrelevant. Derimod er det relevant at en kuglepen ogs a mere generelt kan karakteriseres som medlem af gruppen af objekter, der kan kastes og det kunne for s a vidt liges a godt vre en gren. P a denne facon har man skiftet beskrivelsesperspektiv eller qualia-rolle i den generative mekanisme. Denne tankegang, kalder Pustejovsky qualia-baseret inferens [Pustejovsky, 1997].
Kritik af det generative leksikon Fodor og Lepore har kritiseret teorien om det generative leksikon i artiklen \The Emtiness of the Lexicon" hvor der re ekteres med kritiske eksempler over teorien [Fodor & Lepore, 1997]. Deres primre anke mod leksikonet er, dets generative natur. Deres udgangspunkt er et atomistisk leksikon (eng. Sense Enumerating Lexicon), hvor
ertydighed resolveres med oprettelse af liges a mange indgange for en term, som 11 Hvordan
ord p avirker hinanden n ar de st ar sammen.
40
KAPITEL 2. BAGGRUND OG BETRAGTNINGER
der ndes semantiske varianter. Med andre ord er de tilhngere af et helt traditionelt leksikon og stiller sig kritiske overfor opfattelsen af leksikalske indganges kompleksitet [Fodor & Lepore, 1997, s. 1{2,6{7]. Udgangspunktet for deres kritik er at de ikke anerkender semantisk polysemi, der g ar ud over homonymi. For eksempel anfgter Fodor og Lepore et af Pustejovsky's eksempler med at bage henholdsvis en kage og en kartoel. Pustejovsky nder at bage er polysemisk i den forstand at bagning af en kage er en kreativ proces, der refererer til hele tilberedelsen af kagen, mens der ved bagning af kartoel alene refereres til selve opvarmningen. Dette forklarer Pustejovsky i sin model med, at kager er artefakter mens karto er er af naturlig oprindelse. Dette generaliserer Pustejovsky til at bagning af artefakter er en kreativ proces, mens bagning af ting af naturlig oprindelse alene er opvarmning. Fodor og Lepore modeksempli cerer med at, der kan vre tale om en forbagt kage, der alene skal opvarmes. I dette tilflde vil man alts a referere til opvarmning af et artefakt, p a samme vis som karto en. Fodor og Lepore anfgter ikke at verbet bage er ertydigt, de anfgter derimod at ertydigheden er systematisk og kan generaliseres til en teori [Fodor & Lepore, 1997, s. 6-7]. Krumeich [Krumeich, 1997, s. 11-12], der diskuterer to forskellige indgangsvinkler til polysemisk resolvering, kritiserer ligeledes Pustejovsky's teoriapparat. Men her er udgangspunktet en positiv interesse for det videre arbejde med teorien samt en p apegning af nogle detaljer, der virker uforst aelige med hensyn til qualia-strukturen. For eksempel p apeges det problematiske i h andtering af farver som foranstillede adjektiver. En rd grapefrugt er nemlig gul, fordi det foranstillede adjektiv refererer til grapefrugtens frugtkdsfarve, hvor det i de
este andre tilflde vil referere til frugtens ydre farve.
Vurdering af kritikken Fodor og Lepore overser at hvis man vil modellere en kompleks struktur som et sprog, s a er det ndvendigt at hnge det op p a en datastruktur og nogle regelbaserede formalismer. At der er undtagelser, der ikke kan tilpasses enten datastrukturen eller formalismerne, er vel en en bekrftelse af formalismer, som regel er imperfekte, men sagtens kan vre srdeles anvendelige af den grund. Muligvis har de eftervist at formalismerne bag teorien \The Generative Lexicon" p a sit nuvrende stadie er imperfekte, hvilket er mindre interessant, al den stund Pustejovsky ikke hvder det modsatte. Vi er ikke enige i deres afvisning af polysemi, der rkker udover homonymi. Sprog er for os at se rigt med polysemi for eksempel i forbindelse med metaforer. Pustejovsky giver et glimrende eksempel p a ikke-homonym polysemisk semantik med \Palstina", der nok er et geogra sk omr ade, men et omr ade man vanskeligt kan de nere strrelsen eller placeringen af. Derudover er \Palstina" i mange henseender et begreb s avel i politisk samt i religis forstand. Et atomistisk opbygget opslagsvrk er ikke srligt anvendelig til at analysere stningers semantik. Derudover er en atomistisk struktur ikke srligt forenelig med en maskinel tilgang til natursprog.
2.6. DOKUMENTSGNING
41
Ontologiens begrebsmssige relationer Vi mener at ontologien indeholder en mngde interessante begrebsmssige relationer, hvoraf de este kan bruges i s avel indeksering af og sgning i beskrivelser samt i prsentation af svar. Vi vlger at fokusere p a er-en-relationen, der dermed danner grundlag for en kvalitativ diskussion af anvendelsesmulighederne for den viden der er indeholdt i ontologien. Diskussionen foretages med henblik p a at opstille et similaritetsm al, baseret p a afstand mellem begreber i ontologien.
Afstandsm al til ontologisk foresprgselsudvidelse Hvis der eksisterer en er-en-relation mellem begreberne bi og bj , angiver relationen, at begrebet bj er en generalisering af begrebet bi . Relationen kan s aledes anvendes til begrebsmssig ekspansion og indsnvring. Dette krver dog udvikling af et similaritetsm al, for begrebers indbyrdes relevans. I forbindelse med udvikling af similaritetsm alet, mener vi at det vil vre hensigtsmssigt at skelne mellem en stringent begrebsmssig og en anvendelsesorienteret fortolkning af ontologiens er-en-relationer. I den stringente fortolkning af er-en-relationen, diskriminerer vi ikke for forskellige begrebers afstand til et flles overordnet begreb. S aledes er \skoletaske" og \taske" begge en \beholder", selvom \skoletaske" er underordnet \taske" og derfor, intuitivt, be nder sig lngere vk fra det flles overordnede begreb \beholder". Man kan dog hurtigt overbevise sig om, at b ade skoletasker og tasker, rent konceptuelt, er beholdere. Den anvendelsesorienterede tilgang har en mindre stringent fortolkning af er-en-relationen. S aledes mener vi at brugere, der angiver en foresprgsel ved sgeordet \skoletaske", i mindre grad er interesseret i stninger der indeholder begrebet \beholder" end stninger der indeholder begrebet \taske". Dette leder os frem til at introducere et similaritetsm al baseret p a afstanden mellem begreber. Da den del af ontologien vi anvender kan betragtes som en orienteret graf, giver det anledning til betragtninger omkring konsekvenserne ved at udvide imod orienteringen. Vi mener dog at der er en gevinst, rent anvendelsesorienteret, ved at tillade udvidelse imod orienteringen. Dette giver mulighed for at foresprgsler, der er formuleret bredt ved overordnede begreber, kan udvides med begrebernes specialiseringer.
Navigation i ontologien Der kan under traversering af ontologien opst a situationer, hvor der er ere mulige veje mellem to knuder i grafen. P a gur 2.5 ses et eksempel p a multibel nedarvning, et fnomen der blandt andet giver anledning til frnvnte problemstilling. Vi foresl ar at man altid anvender korteste vej mellem to begreber i beregningen af similaritet. En anden problemstilling, i forbindelse med traversering af ontologien, er muligheden for at g a fra et begreb til dets generalisering, for derefter at vlge en anden specialisering af det overordnede begrebet. De begrebsmssige konsekvenser synes at have en nje sammenhng med begrebernes placering i on-
42
KAPITEL 2. BAGGRUND OG BETRAGTNINGER
person
kunstner
grafiker
Figur 2.5: Multibel nedarvning i ontologien
Frugt
Banan
Æble
Appelsin
Figur 2.6: Begrebet frugt med tre specialiseringer
tologien. Vi mener at de forst aelsesmssige komplikationer er strre jo lngere vi be nder os fra randknuderne. Hvis vi tager udgangspunkt i eksempelvis begrebet \banan" kan vi p a gur 2.6 se at \banan" har begrebet \frugt" som specialisering. Begrebet \frugt" har yderligere to specialiseringer, nemlig \ble" og \appelsin". Hvis vi udvider en foresprgsel der indeholder begrebet \banan" med begrebet \ble", kan det resultere i forst aelsesmssige komplikationer. \Banan" og \ble" er begge frugter og vi kan i dette tilflde delvis forsvare deres indbyrdes sammenhng. Men som nste eksempel viser, afhnger det af hvilket niveau man be nder sig p a i ontologien, alts a hvor generelle begreberne er. P a gur 2.7 kan man for eksempel se, at der fra begrebet \kop" kan udvides op i ontologien til \beholder" og derefter ned igen til begrebet \sarkofag". Vi kan forestille os sgesituationer, hvor en udvidelse ville hjlpe brugeren. Men der eksisterer situationer, hvor en s adan udvidelse ikke bidrager med relevante dokumenter. En bruger der stiller en foresprgsel om kopper nsker som oftest ikke dokumenter om sarkofager eller skoletasker.
2.6. DOKUMENTSGNING
43
beholder
kop
tekop
sarkofag
taske
skoletaske
Figur 2.7: Begrebet beholder og specialiseringer
Valg af similaritetsmal Med udgangspunkt i ovenst aende, opdeler vi similaritetsm alet i to overordnede grupper: (1) de symmetriske og (2) asymmetriske similaritetsm al. I et symmetrisk similaritetsm al, tildeler vi den samme vrdi for udvidelse af begreber uanset om vi udvider med et generelt begreb, eller med en eller ere specialiseringer af begrebet. I det asymmetriske similaritetsm al dierentierer vi mellem generaliseringer og specialiseringer af begreber. Similaritetsm alet er s aledes forskelligt alt efter om vi generaliserer eller specialiserer begreber. Blandt disse similaritetsm al, sondrer vi yderligere mellem m al, der er konstante eller en funktion af afstanden mellem begreberne. Ved udvidelse med det konstante similaritetsm al, nder vi de relevante begreber i ontologien og tildeler dem samme vgt. Et konstant similaritetsm al har den ulempe, at hvis vi b ade udvider med begreber i \bunden" af ontologien og med begreber i \toppen" tildeles de samme vgt. Vi mener at det er uhensigtsmssigt at begreber der ligger tttere p a udgangspunktet, f ar samme vgt som de begreber, der ligger langt vk. P a gur 2.8 illustreres det hvordan begrebet \vinklder", kan udvides med begrebet \klder", og derefter via en traversering af to generaliseringsniveauer, udvides med \bygning". Stringent forholder det sig s adan at en \vinklder" er en \bygning", men vi har bevget os s a langt vk fra udgangspunktet, at der, i anvendelsesorienteret forstand, er tale om en overgeneralisering. I gennemgangen af de similaritetsm al, der er en funktion af afstanden mellem begreber, vlger vi kun at beskrive et linert aftagende similaritetsm al. Vi har dog kort beskftiget os med et eksponentielt aftagende similaritetsm al, men forkastede det, da vi konstaterede at vores argumentation for konsekvenserne af m alet blev spekulative. I linert faldende similaritetsm al, vil begrebernes vgt aftage linert efterh anden som afstanden til udgangspunktet ges. Vi mener at der, i et anvendelsesorienteret perspektiv, vil vre hensigtsmssigt, at de begreber der er
44
KAPITEL 2. BAGGRUND OG BETRAGTNINGER
bygning
afdeling
kælder
vinkælder
Figur 2.8: Udsnit af ontologien nrmest udgangspunktet, f ar hjere vgt, end de begreber som er lngere vk. Liner vgtildeling kan beskrives med flgende formel: SIM (bi ; bj ) = a DIST (bi ; bj ) + k
(2.16)
Hvor a er en negativ hldningskoeÆcient, k en konstant og DIST (bi ; bj ) er afstanden mellem begreberne bi og bj . Afstanden mellem to begreber er 0, hvis begreberne er ens, alts a bi = bj . Eksisterer der en begrebsmssig specialisering eller en generalisering mellem begreberne bi og bj , er afstanden 1. Er der en mulig vej mellem to begreber, der ligger i afstanden DIST (bi ; bj ) > 1 fra hinanden, udtrykkes afstanden som korteste vej mellem begreberne. Afstanden mellem begreberne \vinklder" og \bygning" i gur 2.8 er s aledes 3. Vi kan nu justere p a koeÆcienten a og konstanten k , alt efter hvordan vi nsker at diskriminere for afstanden. Vlges a, eksempelvis til 41 og k til 1, kan vi med formel 2.16 diskriminere for begrebsudvidelse, med begreber i en afstand af 4. Vi tillader ikke similariteten mellem begreber at blive mindre end 0. I disse tilflde tildeles similariteten mellem to begreber vrdien 0.
Opsummering Vi har i dette afsnit redegjort for, hvordan vi kan anvende ontologiens begrebsmssige relationer til at foretage en semantisk sammenligning af beskrivelser. Vi har endvidere opstillet to modeller for begrebsmssig afstand i ontologien. Vi skelner mellem en stringent korrekt og anvendelsesorienteret fortolkning af ontologiens relationer. Vores endelige udvlgelse af similaritetsm alets udformning, skal baseres p a empiriske undersgelser.
Kapitel 3
Design af prototype I dette afsnit beskriver vi de designbeslutninger vi har truet i forbindelse med udviklingen af prototypesgesystemet. I forrige afsnit gjorte vi rede for det teorimssige fundament, som prototypen bygger p a. Inden vi gennemg ar prototypeudviklingen gr vi rede for hvordan vi vil operationalisere vores teoretiske overvejelser. Viden om sprogets syntaktiske opbygning skal anvendes til at parse vores dokumenter og foresprgsler. Vi henter den ndvendige information om, eksempelvis ords grammatiske klasser, fra vores ordbogsmateriale. Parsing danner baggrund for hvordan vi dekomponerer dokumenter og foresprgsler. Dekomponeringen af stninger til navnefraser og verber danner grundlag for vores indekseringsprocess. Navnefraser best ar af et substantiv med et eller ere foranstillede adjektiver og udgr, sammen med verberne, vores mindste beskrivende enheder. Dokumenter og foresprgsler deler mindste beskrivende enhed og er dermed p a en sammenlignelig form. I sammenligningen af foresprgsler med vores dokumentsamling, udvider vi foresprgslen ved hjlp af ontologien og synonymordbogen. Udvidelse med ontologien foretages med et symmetrisk similaritetsm al med konstant vgttildeling. Vi udvider kun foresprgslens begreber i afstanden en i ontologien. I synonymordbogen udvider vi kun med de synonymer, der er re eksive. Similariteten mellem to beskrivelser beregnes p a baggrund af bidrag fra en term-term sammenligning, ontologisk sammenligning og sammenligning ved hjlp af synonymordbogen. I de enkelte sammenligninger anvender vi Dice's koeÆcient til beregning af similaritet. Afslutningsvis returneres alle de relevante stninger sorteret efter deres samlede vgt.
3.1 Eksperimentel systemudvikling Vores udgangspunkt for konstruktion af prototypesystemet er som tidligere nvnt et nske om funktionalitet, der rkker udover klassisk termbaseret sgning. Ved projektets start var det ikke klart hvordan teori og metoder bedst kunne kombineres for at n a vores m al. Vi vlger derfor at arbejde eksperimentelt med vores systemudvikling, ved p a et tidligt tidspunkt at arbejde praktisk med iso45
46
KAPITEL 3. DESIGN AF PROTOTYPE
lerede dele af prototypen. Arbejdet med isolerede dele af prototypen, vil tidligt i processen kunne afdkke delenes udfordringer og omfang, og dermed give os et bedre grundlag for senere at tage kvali cerede designbeslutninger. Der ndes forskellige m ader at udfre eksperimenterne p a. De eksperimenter vi vil udfre udforsker komponenter i de nederste lag af systemet. Alternativt kunne vi eksperimentere med komponenter p a systemets verste lag. Disse eksperimenter vil dog vre in ueret af at der ikke ndes \virkelige" data kompononterne kan afvikles p a. Eftersom komponenter i de verste lag af systemet afhnger af data, produceret af komponenter fra de nedre lag, bliver data produceret af stubfunktioner, der udelukkende kan give en fornemmelse af den endelige funktionalitet. Derfor mener vi at eksperimenter p a systemets nederste niveau er at foretrkke. At eksperimentere med systemets nederste lag betyder, at vi isolerer en delkomponent i sgesystemet, som vi er interesseret i at f a erfaringer med. Dernst formulerer og implementerer vi en case der har til form al at undersge et udvalgt problemfelt. Slutteligt evalueres det speci kke forlb, med hensyn til forventet udbytte ved implementation i strre m alestok. De delkomponenter vi har eksperimenteret med er maskingenkendelse af ord fra en artikel ved hjlp af opslag i en ordbog, automatisk bestemmelse af et ords mulige grammatiske klasser ved ordbogsopslag og en simpel syntaktisk parsing af stninger, der baserer sig p a resultaterne af de to frste eksperimenter. Vores arbejde p a de nederste lag i sgesystemet fordrer bottom-up komposition til resten af designet. Det giver mulighed for at vi kan trkke p a data under hele udviklingen. En ulempe ved bottom-up komposition er at det er mere naturligt at tage et koncept og nedbryde det i mindre dele, end at tage en rkke sm a koncepter og stte dem sammen til et stort [McConnell, 1993, s. 146{147]. Vi gr dog opmrksom p a at top-down og bottom-up ikke er gensidigt udelukkende designstrategier. Man kan med fordel skifte mellem de forskellige perspektiver i en iterativ proces. Da det endelige prototype{sgesystem, fortrinsvis skal anvendes til afprvning af forskellige sgestrategier, kan det med fordel designes modulrt og eksibelt. Dette vil, i enkelte tilflde, betyde at programmeringen til systemet, vil blive marginalt mere omstndig. Det ekstra arbejde opvejes dog til fulde af systemets versatilitet.
3.2 Realisering af den valgte dokumentmodel Den valgte dokumentmodel arbejder, som tidligere beskrevet, med navnefraser og verber som mindste meningsbrende enheder. Forbindelsen mellem enhederne styrkes af en gruppering p a stningsniveau. Et dokument er s aledes en mngde at stninger, hvor hver stning har en beskrivelse, som indeholder en mngde af navnefraser og en mngde af verber.
3.2. REALISERING AF DEN VALGTE DOKUMENTMODEL
47
3.2.1 E/R diagrammet Et dokument best ar alts a af en mngde stninger, beskrevet ved en en-tilmange relation fra Document til DocumentSentence. Hver stning indeholder en beskrivelse, der dannes ud fra stningerne i dokumentet. Der vil s aledes vre lige s a mange beskrivelser som der er stninger i dokumentet. De enkelte beskrivelser indeholder en mngde navnefraser og en mngde verber { igen udtrykt ved relationer mellem de involverede entiteter. Navnefraser er reprsenteret ved relationen TermSet, mens verber reprsenteres som en mange-til-mange relation, mellem Description og Term. Dette gres for at modellere, at det samme verbum kan optrde ere gange og i forskellige beskrivelser. Entiteten Term indeholder alle de termer, der er tilgngelige via vores forskellige ordbger. Til hver term er tilknyttet en grammatisk kategori gennem en relation til entiteten GramCat, en mngde synonymer, angivet ved relationen synonyms, samt information om termen er en del af ontologien. Sidstnvnte er reprsenteret ved relationen isa.
KAPITEL 3. DESIGN AF PROTOTYPE
48
URI
docId
Document
content
hasSentences
sentenceId
DocumentSentence
sentence
position
hasDescriptions sentenceId
descriptionId
nounPhraseSet
Description
isa
weight
verbSet termId
nounPhraseId
NounPhrase
termSet
Term
hasGramCats
gramCatId
GramCat
category
Figur 3.1: E/R diagram over databasen
lemma
synonyms
3.3. BESKRIVELSE AF INDEKSERINGSPROCESSEN
49
Oversttelse af E/R diagram til relationelle skemaer I oversttelsen skelner man mellem svage og ikke-svage entiteter og relationer. Entiteter, som ikke er svage entiteter, oversttes til relationelle skemaer, ved at lave et skema med samme navn og attributter, som entiteten fra E/R diagrammet. Det resulterende skema indeholder ikke ndvendigvis en indikation af hvilke relationer der forbandt entiteten med sig selv eller andre entiteter [Ullmann & Widom, 1997, s. 104]. Relationer mellem ikke-svage entiteter oversttes, ved at tage ngleattributterne fra de entiteter relationen forbinder og tilfje de eventuelle attributter som relationen selv m atte have. Svage entiteter oversttes ved at lave et skema der indeholder alle nglerne fra de entiteter som er forbundet via mange-til-en relationer, fra den svage entitet, samt eventuelle attributter den svage entitet selv m atte have. Der laves ikke skemaer for mange-til-en relationer fra svage entiteter til ikkesvage entiteter. En oversttelse af E/R diagrammet (se gur 3.1) giver anledning til flgende relationelle skemaer: Document(docId, URI, content) DocumentSentence(sentenceId, docId, sentence, position) Description(descriptionId, sentenceId, weight) NounPhrase(nounPhraseId) NounPhraseSet(nounPhraseId,descriptionId) VerbSet(descriptionId, termId) Term(termId, lemma) TermSet(nounPhraseId, termId) HasGramCats(termId1, gramCatId) Synonyms(termId1, termId2) Isa(termId1, termId2) GramCat(gramCatId, category)
En-til-mange relationen mellem Description og NounPhrase bliver oversat til et seperat skema, mens resten af relationerne bliver ophvet ved, at inkludere nglen fra en-siden i mange-sidens skema. Der laves ikke skemaer for de to relationer, der forbinder den svage entitet Verb med entiteterne Term og Description. N ar modellen for dokumentreprsenation er blevet modelleret i databasen, kan vi begynde designet af den prototype, der skal anvende modellen.
3.3 Beskrivelse af indekseringsprocessen Med et overblik over databasens opbygning, kan vi nu give en kort beskrivelse af selve prototypens indekseringsproces. Som vi tidligere har nvnt, best ar indeksering af dokumenter i, at omstte sin dokumentsamling til en struktur, der er mere eektiv at sge i. N ar artiklerne er overfrt til lsbar form, registrerer vi hvert dokument med
KAPITEL 3. DESIGN AF PROTOTYPE
50
et unikt identi kationsnummer, s aledes at det er muligt at referere til dokumentet igen. Efterflgende begynder den egentlige dekomponering af dokumentet efter vores dokumentreprsentationsmodel. Hvert dokument bliver indledningsvis opdelt i stninger, som bliver underkastet en grammatisk analyse. Den grammatiske analyse anvender opslag i vores ordbger, med det form al at klassi cere termernes ordklasser. Denne klassi kation ligger til grund for den efterflgende identi kation af de meningsbrende enheder, vores model indeholder p a stningsniveau, det vil sige navnefraser og verber. N ar en stning er dekomponeret og dermed beskrevet, bliver den gemt i databasen. Processen gentages indtil alle stningerne i dokumentet er beskrevet og indekseringen af nste dokument kan begynde. Processerne kan nu indkapsles i enheder og forbindes i henhold til funktionalitet. Navngivningen og grupperingen i klasser, munder ud i gur 3.2 der er et aktivitetsdiagram formaliseret i UML [Booch et al., 1999, s. 97-98]: IndexEngine
Description Generator
Dictionary
Tagger
generateDescription (docId) isAbbreviation(token) abbreviation tagSentence (sentenceId) getGramCats(word) gramCatCursor taggedTermArray Returnerer en descriptionIdCursor
Figur 3.2: Aktivitetsdiagram for indekseringsprocessen Indekseringsprocessen udgr den ene halvdel af prototypen. Vi har anvendt vores erfaringer fra forrige projekt [Andersen et al., 1998], hvor systemet ligeledes havde en modulr opbygning. Modulariteten giver os eksempelvis mulighed for at udskifte Tagger-modulet med et andet. Hvis prototypen skulle sttes i produktion, burde indekseringsprocessens grnse ade pakkes ind i en klasse, der overordnet kontrollerer indekseringen. Klassen kunne for eksempel kaldes IndexShell og h andtere opgaver som at kontrollere og logge processen samt justering af forskellige parametre.
3.4 Beskrivelse af sgeprocessen Eftersom dette er et prototypesgesystem, bortabstraherer vi strstedelen af detaljerne i brugergrnse aden. Der kan gres mange overvejelser omkring udformningen og interaktionen med brugergrnse aden, hvilket er et spndende
3.4. BESKRIVELSE AF SGEPROCESSEN
51
omr ade vi efterflgende kan arbejde med. Vi bortabstraherer endvidere al kontrol med hvad foresprgslen indeholder. I et kommercielt sgesystem ville man typisk bearbejde brugerens foresprgsel inden den kan evalueres. Der kan vre forskellige ulovlige tegn eller for mange tegn i strengen. Inden vi kan nde de relevante beskrivelser og dermed stninger, skal foresprgslen bringes p a en sammenlignelig form. Foresprgslen omformes p a samme vis som dokumenter. Derefter udvides foresprgslen med opslag i ontologien og synonymordbogen. Resultatet er en liste af termer, vi kan anvende til at nde de relevante beskrivelser. Bemrk at vi har besluttet at arbejde p a stningsniveau. De fundne beskrivelser sammenlignes med den eller de beskrivelser, som foresprgslen best ar af. Beskrivelserne sammenlignes en af gangen og tildeles en vgt afhngigt af deres similaritet. Vi giver processerne navne og grupperer dem i klasser, hvilket udmunder i flgende aktivitetsdiagram p a gur 3.3: QueryEvaluator
Description Generator
Dictionary
Tagger
generateDescription (queryDocId) isAbbreviation(token) abbreviation tagSentence (sentenceId) getGramCats(word) gramCatCursor taggedTermArray Returnerer en descriptionIdCursor
Figur 3.3: Aktivitetsdiagram for sgeprocessen Sgeprocessen omfatter den anden halvdel af sgesystemet, men anvender dog dele af indekseringsprocessen, idet der genereres beskrivelser af foresprgslerne. Vi burde have designet en mere modulr udgave af sgeprocessen. I prototypen har det ikke nogen afgrende betydning, men i et frdigt system ville det eksempelvis vre relevant, at kunne vlge forskellige moduler, der implementerer forskellige metoder til at beregne et svar.
Det endelige design Vi har beskrevet de to dele, som vores prototype udgr og er nu i stand til at prsentere klassediagramet for vores prototype p a gur 3.4: Klassen OntoTypes er en pakke for alle de fastde nerede datatyper i prototypen. Alle klasserne anvender OntoTypes, men har ikke nogen direkte relation, i form af eksempelvis en klasse{afhngighed.
KAPITEL 3. DESIGN AF PROTOTYPE
52 QueryEvaluator
OntoTypes
+evaluate()
DescriptionGenerator
Tagger
Dictionary
+generateDescription()
+tagSentence()
+findWordClass()
IndexEngine +indexAllDocuments()
Figur 3.4: Klassediagram af prototypen Med vores beskrivelse af prototypen, kan den egentlige implementation begynde. Vi har et betydeligt datagrundlag, som hele prototypen trkker p a. Derfor afstter vi frst ressourcer p a at f a implementeret databasen, jvnfr bottom-up komposition.
3.4.1 Implementation af databasen Det overordnede m al med implementationen af databasen er, udover at realisere det design vi har beskrevet i E/R diagrammet, at lave en database der p a optimal vis udnytter den information vi har f aet stillet til r adighed gennem diverse ordbger. De tabeller, vi skal oprette kan indledningsvis opdeles i to grupper: (1) de statiske tabeller, der er tilstede fr og anvendes under indekseringen samt beskrivelsesgenereringen af dokumenterne og (2) de tabeller som opdateres dynamisk ved indeksering og sgning i dokumentsamlingen. Til den frste gruppe af tabeller hrer1 : Document(docId, URI, content) Term(termId, lemma) HasGramCats(termId1, gramCatId) Synonyms(termId1, termId2) Isa(termId1, termId2) GramCat(gramCatId, category)
Mens den anden gruppe udgres af: DocumentSentence(sentenceId, docId, sentence, position) Description(descriptionId, sentenceId, 1 Vi gr opmrksom p a at tabellen Document kun delvist tilhrer de statiske tabeller idet foresprgsler efterflgende indsttes p a lige fod med dokumenter
3.4. BESKRIVELSE AF SGEPROCESSEN
53
weight) NounPhrase(nounPhraseId) NounPhraseSet(nounPhraseId, descriptionId) VerbSet(descriptionId, termId) TermSet(nounPhraseId, termId)
Nedenst aende er en gennemgang af realiseringen af de to grupper af tabeller.
De statiske tabeller Dannelsen af de statiske tabeller tager udgangspunkt i flgende relationelle skemaer: ord(oid, ord, kid, bfid, kildeid) bojning(oid, ord, bfid) klasse(kid, navn) id_term(id, term) id_synonym(synonymid, synonymet) onto_ord(id, ord) onto_isa(id, target)
De tre frste tabeller indeholder et udtrk af Nudansk Ordbog. Tabellerne indeholder information om ord, deres ordklasse, bjningsformer og hvilket ordbogmateriale, de stammer fra. Tabellerne id term og id synonym indeholder viden om termer og deres synonymer. Tabellerne er dannet ved at parse en RTF2 reprsentation af en udvalgt synonymordbog. De sidste to tabeller er dannet ved at parse en SGML3 reprsentation af Den Danske SIMPLE{Ordbog [Pedersen, 1999]. Tabellerne indeholder information om ord (onto ord) og deres relation til andre ord i ontologien (onto isa) gennem qualia-rollen er-en. Der glder s aledes en er-en relation mellem id og target, alts a id er-en target Der er direkte korrelation mellem attributter med samme navn. Tabel 3.1 er et udtrk der viser tuplerne med de ti laveste oid'er fra ord og tabel 3.2 viser det tilsvarende for de ti laveste oid'er fra bojning. Tabel 3.3 beskriver de mulige kategorier, indeholdt i tabellen klasse.
Hjlpetabeller Vi anvender to hjlpetabeller til at danne tabellerne Term og HasGramCats. Den frste hjlpetabel dannes ved at ette ord og bojning, s aledes at tabellen ord bojning indeholder ord, deres grammatiske klasse, bjningsform og den kilde hvorfra data stammer. Den anden hjlpetabel indeholder de ord, vi frasorterer p a grund af deres status som homonymer. CREATE TABLE ORD_BOJNING AS ( SELECT O.oid, B.ord, O.kid, B.bfid, O.kildeid FROM ORD, BOJNING WHERE O.oid = B.oid ) 2 Rich Text Format (RTF) 3 Standard Generalized Markup Language
(SGML)
KAPITEL 3. DESIGN AF PROTOTYPE
54
oid ord 1 2 3 4 5 6 7 8 9
a a A aA-38 A3-format A4-format A5-format Aabenraa
kid b d kildeid 1 2 0 3 1 1 1 1 4
0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1
Tabel 3.1: Tupler fra tabellen ord
oid ord 1 1 1 1 2 3 4 5 6 6
a a'et a'er a'erne a a aa-38 a3-format a3-formatet
b d 0 1 2 3 0 0 0 0 0 1
Tabel 3.2: Tupler fra tabellen bojning CREATE TABLE HOMONYMER AS ( SELECT DISTINCT T2.* FROM ORD_BOJNING T1, ORD_BOJNING T2 WHERE T1.ord = T2.ord AND T1.oid < T2.oid )
Flertydige ord Som det fremg ar af tabel 3.1 eksisterer der ord i ordbogen, der staves ens, men som har forskellige oid'er { de frnvnte homonymer. Vi har valgt ikke at sondre mellem semantiske varianter, da det ikke er projektets primre fokus. Nedenst aende udtrk fra databasen viser at der i vores tilgngelige ordbogsmateriale ndes 1464 homonymer, hvilket er 3,7 % af ordene i ordbogen. I vores lsning har vi valg at sammenlgge homonymer. SELECT SUM(antal) - COUNT(*) FROM ( SELECT LOWER(ord) ord, COUNT(oid) antal FROM ORDBOG GROUP BY LOWER(ord) HAVING COUNT(oid) > 1 )
3.4. BESKRIVELSE AF SGEPROCESSEN
55
gramcatid category 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Forkortelse Substantiv Artikel Pronomen Talord Adjektiv Verbum Adverbiumt Prposition Konjunktion Udr absord Lydord Proprium In nitivmrke Orddeling Formelt subjek
Tabel 3.3: Tabellen Klasse Eftersom homonymer er ortogra sk ens, kan de tupler, vi nsker at fjerne ndes ved flgende SQL-udtryk: SELECT O2.oid, LOWER(O2.ord) FROM ORD_BOJNING O1, ORD_BOJNING O2 WHERE LOWER(O1.ord) = LOWER(O2.ord) AND O1.oid < O2.oid
Homonymer i databasen er de ord, der staves ens, men som har forskellige oid'er. En delmngde af de ord vi fjerner fremg ar af tabel 3.4. Bemrk at vi anvender operatoren < istedet for <>, da denne ville have introduceret problemstillingen omkring spejling af tupler, alts a (i,j) versus (j,i).
O1.oid O1.ord 1 1 2 22 66 79 558 649 690 760
a a a abe abstrakt accent afsky aftale afveje agrar
O2.oid O2.ord 2 3 3 23 67 80 559 650 691 761
a A A abe abstrakt accent afsky aftale afveje agrar
Tabel 3.4: Udvlgelse af tupler til sletning Vi krydser ord bojning med sig selv da sammen etningen mellem ord og bojning introducerer nye homonymer (se tabel 3.5), som ikke gurerede i den
KAPITEL 3. DESIGN AF PROTOTYPE
56
oprindelige ordbog (ord). Fnomenet opst ar eksempelvis, n ar bjningsformen af en term (108, adaptere), substantivet (108, adapter) er sammenfaldende med verbet (109, adaptere).
termId lemma 108 108 108 108 109 109 109 109 110
adapter adapteren adaptere adapterne adaptere adapterer adapterede adapteret adaption
Tabel 3.5: Homonymer i tabellen Term Det er nu muligt, med udgangspunkt i tabellerne fra ordbgerne, hjlpetabellerne samt forbehold for tabellen Document's specielle status, at danne alle statiske tabeller.
Tabellen Document Tabellen Document er dannet ved at parse en ASCII4 l og indeholder omkring 2500 artikler fra aviser og blade fra DK87/90-korpuset. Mest interessant er attributten URI der indeholder information om dokuments oprindelige kilde. Er tuplen en foresprgsel indeholder feltet tekststrengen \Query".
Tabellen Term Tabellen Term dannes som en dierens mellem de to hjlpetabeller og kan s aledes realiseres ved nedenst aende SQL-udtryk: SELECT oid, ord FROM ORD_BOJNING MINUS SELECT oid, ord FROM HOMONYMER
Tabel 3.6 viser de frste tupler fra tabellen Term sorteret stigende efter termId.
Tabellen HasGramCats Tabellen HasGramCats dannes ved en dierens mellem ord og homonymer forenet med kid'erne p a alle de homonymer vi fjerner. 4 American Standard Code for Information Interchange
3.4. BESKRIVELSE AF SGEPROCESSEN
57
termId lemma 1 1 1 1 4 5 6 6 7 7
a a'et a'er a'erne aa-38 a3-format a3-formatet a4-format a4-formatet
Tabel 3.6: Tabellen Term 1 2 3 4 5 6 7 8 9 10 11
SELECT R.oid, R.kid FROM (((SELECT oid, LOWER(ord), kid FROM ORD) MINUS (SELECT oid, LOWER(ord), kid FROM HOMONYMER)) UNION (SELECT T1.oid, T1.ord, T2.kid FROM ORD_BOJNING T1, ORD_BOJNING T2 WHERE T1.ord = T2.ord AND T1.oid < T2.oid AND T1.kid <> T2.kid AND T1.oid NOT IN (SELECT oid FROM HOMONYMER))) R
Dette gres for at bibeholde den information vi har om homonymernes grammatiske kategori. Eksempelvis de to betydninger af ordet \sl a":
oid ord kid b d kildeid
31399 31400
sl a sl a
1 5
0 0
1 1
Tabel 3.7: Eksempel p a et homonym Det betyder at vi m a gendanne informationen om at \sl a" b ade er et substantiv og et verbum, da sidstnvnte, ikke kan gendannes ud fra Term. Det er dog vigtigt at vi stiller som kvalitativt krav, at oid'erne p a de tupler vi tilfjer allerede fore ndes i Term, illustreret ved nedenst aende eksempel. Ser vi isoleret p a linie 9{11 i SQL-udtrykket, omskrevet s a det udvlger oid, ord og kid for b ade T1 og T2, giver det anledning til flgende uddrag at den samlede mngde af tupler: Som det fremg ar af tabel 3.8 bliver tuplen (2,a,0) tilfjet den mngde af tupler vi forener med dierencen mellem ord og homonymer. Dette skyldes, naturligvis, at tuplen (2,a,2)'s oid er mindre end (3,a,0)'s oid og den side vi udvlger O1.oid og O2.kid opst ar tuplen (2,a,0). Tuplen kan imidlertid slettes da tuplen (3,a,0), grundet egenskaben ved det kartesiske produkt, kombineres med en tupel med et lavere oid.
KAPITEL 3. DESIGN AF PROTOTYPE
58
T1.oid T1.ord T1.kid T2.oid T2.ord T2.kid 1 1 2
a a a
1 1 2
2 3 3
a a a
2 0 0
Tabel 3.8: Tupler fra deludtryk
Tabellen Synonyms Synonym tabellen dannes ved at ette tabellerne term, id term og id synonym. Dette gres for at afbilde synonymordbogens ord til termid'er i vores database. SELECT DISTINCT T1.termid AS termid1, T2.termid AS termid2 FROM TERM T1, TERM T2, ID_TERM, ID_SYNONYM WHERE T1.lemma = LOWER(ID_TERM.term) AND ID_TERM.id = ID_SYNONYM.synonymid AND LOWER(ID_SYNONYM.synonymet) = T2.lemma
Tabellen Isa Som med tabellen synonyms skal vi have afbildet ontologiens ord til deres tilsvarende termid'er. SELECT DISTINCT T1.termid AS termid1, T2.termid AS termid2 FROM ONTO_ORD O1, ONTO_ORD O2, TERM T1, TERM T2, ONTO_ISA WHERE T1.lemma = LOWER(O1.ord) AND O1.id = ONTO_ISA.id AND ONTO_ISA.target = O2.id AND O2.ord = T2.lemma
Tabellen GramCat Denne tabel er blot en omdbning af klasse.
De dynamiske tabeller Indholdet af de dynamiske tabeller er resultatet af sgesystemets indekseringsproces, der i overensstemmelse med de retningslinier dokumentmodellen udstikker, opdeler hvert dokument i stninger, beskrivelser og meningsbrende enheder. De enkelte stninger nummereres fortlbende og tilknyttes en beskrivelse, ved at tilfje DocumentSentenceId'et til beskrivelsens relationelle skema. Hver beskrivelse indeholder, udover en samlet vgt, en mngde af navnefraser, realiseret ved tabellerne NounPhraseSet, NounPhrase og TermSet samt en mngde af verber, angivet ved tabellen VerbSet. Vores generiske dokumentmodel rummer, som tidligere nvnt, muligheden for at dokumenter kan beskrives med andre meningsbrende enheder, end dem vi har identi ceret p a nuvrende tidspunkt. Derfor kan vi i det omfang vi nsker at tilfje yderligere beskrivende enheder, blot relatere disse til hver stningsbeskrivelse.
3.4. BESKRIVELSE AF SGEPROCESSEN
59
Vi har af optimeringshensyn valgt at oprette endnu en hjlpetabel. DescriptionIdTermIdList abner mulighed for, at man ved opslag med et termId kan nde de relevante descriptionId'er. Omvendt kan man, under opslag med et descriptionId, nde dets tilhrende TermId'er. Tabellen bruges til foresprgselsevaluering for eektivt at kunne nde de relevante descriptionId'er givet et termId. Foresprgslen anvender Document, DocumentSentence, Description, Nounphrase, NounPhraseSet og VerbSet. Vi har valgt at bryde foresprgslen op i tre dele, fordi den samlede foresprgsel var for krvende for vores databaseserver. I selve SQL foresprgslen er det ikke ndvendigt at medtage tabellen NounPhrase, fordi vi kan ette udenom NounPhrase ved direkte at ette NounPhraseSet og TermSet. De har begge to et nounPhraseId. De tre SQL-stningerne bliver s aledes: CREATE TABLE TEMP_DESCID_TERMSET AS( SELECT DESCRIPTION.descriptionId, TERMSET.termId FROM DESCRIPTION, NOUNPHRASESET, TERMSET WHERE DESCRIPTION.descriptionId = NOUNPHRASESET.descriptionId AND NOUNPHRASESET.nounPhraseId = TERMSET.nounPhraseId AND DESCRIPTION.descriptionId IN( SELECT DESCRIPTION.descriptionId FROM DOCUMENT, DOCUMENTSENTENCE, DESCRIPTION WHERE DOCUMENT.docid = DOCUMENTSENTENCE.docid AND DOCUMENTSENTENCE.sentenceId = DESCRIPTION.sentenceId AND NOT DOCUMENT.Uri = 'Query' ) ); CREATE TABLE TEMP_DESCID_VERBSET AS ( SELECT DESCRIPTION.descriptionId, VERBSET.termid FROM DESCRIPTION, VERBSET WHERE DESCRIPTION.descriptionId = VERBSET.descriptionId AND DESCRIPTION.descriptionId IN( SELECT DESCRIPTION.descriptionId FROM DOCUMENT, DOCUMENTSENTENCE, DESCRIPTION WHERE DOCUMENT.docid = DOCUMENTSENTENCE.docid AND DOCUMENTSENTENCE.sentenceId = DESCRIPTION.sentenceId AND NOT DOCUMENT.Uri = 'Query' ) ); CREATE TABLE DESCRIPTIONIDTERMIDLIST AS ( Select descriptionid, termid FROM TEMP_DESCID_TERMSET UNION SELECT descriptionid, termid FROM TEMP_DESCID_VERBSET );
N ar selve programmeringen af prototypen er frdig, overg ar udviklingen til en anden fase: Afprvning.
60
KAPITEL 3. DESIGN AF PROTOTYPE
3.4.2 Afprvning af prototypen Afprvning er en vigtig del af udviklingen af et system og har det form al at nde fejl. Der ndes mange forskellige m ader at afprve et system p a, der har forskellige tidshorisonter. For eksempel er komplet afprvning, som oftest, umulig p a grund af det enorme antal test-iterationer. Derfor er det hensigtsmssigt at vlge de eksempler, der har strst sandsynlighed for at afslre fejl [McConnell, 1993, s. 594]. Stroustrup [Stroustrup, 2000, s. 712] anbefaler at afprvning er en del af at designe systemet og at man br fokusere p a problemer, der har katastrofale flger eller problemer der kan forekomme ofte. For os har afprvningen det form al at afslre fejl, der er s a graverende at de vil kunne forhindre prototypesystemet i at fungerer korrekt. Fejlfrie systemer hrer som oftest til i teorien [McConnell, 1993]. Vi foretager lbende afprvning under selve udviklingen og udfrer derefter en simpel enhedstest af vores frdige sgesystem. Det gr vi ved dels at teste, om enhederne gr som forventet ved almindelig brug, dels ved at teste i det man kan kalde yderpunkter. Et yderpunkt er eksempelvis, at sende data som parameter, der ikke er forventet. Eksempelvis at give en tom streng som parameter til en foresprgsel eller sende et ikke-eksisterende ord, som f.eks "zxcv", til funktionen getGramcats, for at f a returneret ordklassen og observere om enheden h andterer ikke-eksisterende ord. Afprvning vil forlbe s aledes at vi tester de nederste lag i hver enhed, s aledes at efterh anden som de nederste funktioners korrekthed bliver valideret, kan vi validere de overliggende funktioner. Vi opstiller et skema for hver enhed, med udvalgte testeksempler, uddata samt om det svarer til vores forventning. Testen af en enhed afsluttes med hvordan en eventuel fejl rettes. Koden med uddata fra afprvningen ndes i bilag B.
Kapitel 4
Indsamling af empiri Vi har i prototypens udviklingsfase valgt at returnere en vgtberegning for henholdsvis ontologiens bidrag til navnefraser, synonymordbogens bidrag til navnefraser samt en ren beregning for navnefraser. Det samme princip anvendes for verber, s aledes at der i alt returneres seks enkeltvgte samt en totalvgt, beregnet som gennemsnittet af vgten for verber og navnefraser. Nedenst aende er et eksempel p a dette: DescriptionId: 81314 SentenceId: 59072 DocId: 1392 *************************************************************** Det var m aske det man ville spare velafrettede danske statsborgere for ved denne lejlighed. *************************************************************** NounPhrase Term Weight: 1 NounPhrase Synonym Weight: 0 NounPhrase Ontological Weight: 0 Verb Term Weight: 0 Verb Synonym Weight: 0 Verb Ontological Weight: 0 Total Weight: .5 ------------------------------------------------------------
P a termniveau giver identiske termer anledning til vgten 1. Identiske navnefraser og identisk indhold af verber giver ligeledes anledning til vgten 1. Vgtning af synonymer og ontologi tildeles efter samme principper, bortset fra at ontologivgten multipliceres med 0,5 og synonymvgten med 0,25. At synonymerne diskrimineres dobbelt s a meget som ontologien, skyldes at vi hurtigt oplevede, den anvendte synonymordbog bidragede med meget stj. Grunden til denne stj, skyldes at synonymordbogen dels er atomistisk opbygget og dels er lavet med manuelt opslag for je. Det er s aledes op til brugeren selv at resolvere for kontekst, og vlge det meste korrekte synonym. Eksempelvis har ordet \srdeles" 63 unikke synonymer i databasen. 657 ord har 10 eller ere synonymer. For ontologiens vedkommende var der ligeledes tale om at prve os frem. Indledningsvis valgte vi en simpel udvidelse, for at kunne iagttage ndringer efterh anden som vi forsgte os frem. En anden fordel var, at et simpelt m al er 61
KAPITEL 4. INDSAMLING AF EMPIRI
62
hurtigt at implementere. Som udgangspunkt udvider vi kun begreber med deres generalisering eller specialisering i afstanden en. Med andre ord anvender vi et konstant afstandsm al, hvor vi kun tillader, at et begreb bliver udvidet med dets specialiseringer og generaliseringer. I bilag A vises et eksempel, hvor vgtberegningen kan ses i detaljer.
Eksempler p a sgning med prototypen For at nde et godt eksempel, der kan vise prototypens funktionalitet, har vi eksperimenteret med forskellige foresprgsler og stninger. Kriteriet for stningen var, at der primrt skulle kunne udvides med et begreb fra ontologien og sekundrt var mulighed for at udvide med synonymer. Vi valgte foresprgslen: \Mange senile bor (i) lejligheder (med) mange trapper". Vi udelader ordene i parantes i den endelige foresprgsel, da vi ikke har implementeret en stopordsliste. Foresprgslen burde optimalt returnere stningen: \Hver tredie over 70 ar bor d arligt Alt for mange gamle bor i boliger med mange trapper og uden wc". Og helst tildele denne stning den hjeste vgt. Stningen stammer fra en avisartikel om ldres boligforhold. Der mangler et punktum i mellem ordet \d arligt" og \alt", hvilket kan have to arsager: 1. At overskrifter fra artikler ikke har noget afsluttende punktum, samt at vores tagger er implementeret, s a den fortolker en stning som teksten i mellem to punktummer. 2. Ordet kan vre et egennavn og indekseres ikke, da vi alene indekserer substantiver og deres foranstillede adjektiver samt verber Foresprgslen returner 487 stninger, ved en minimumsvgt p a 0,45. De frste ti svar fra sgningen kan ses i bilag C. Den udvalgte stning bliver, som fem andre stninger, returneret med vgten 0,87. Stningen er et godt svar af ere grunde. Der er to ens ord, i foresprgslen og stningen, henholdsvis \mange" og \trapper". Begrebet \lejlighed" er b ade en begrebsmssig specialisering af begrebet \bolig", ligesom de er hinandens synonymer. Der er endvidere en synonym-relation mellem ordene \gamle" og \senile". Stningen stammer fra et dokument, hvor der yderligere er tre andre stninger i svarsttet: 1.
\De boliger, der evt. har wc i lejligheden, har til gengld ikke kkken eller radiatorvarme."
2.
\Men de har s a til gengld trapper til eller inden i boligen."
3.
\Af EVA-MARIE MLLER En trediedel af alle danskere over 70 ar bor i boliger, der p a en eller anden m ade er mangelfulde."
63 Stningerne f ar henholdsvis vgten 0; 87, 0; 70 og 0; 62. Hvis vi summerede stningsbidragene op p a dokumentniveau, ville dette dokument samlet have den hjest vgt. De fem hjest vgtede stninger indeholder b ade ordene \bolig" og \lejlighed". I dette tilflde er det ikke hensigtsmssigt at ordene \lejlighed" og \bolig" er synonymer, da denne synonymrelation, bidrager til deres samlede vgt. Hvis vi slettede de synonymrelationer, som allerede er reprsenteret i ontologien, ved er-en-relationen, ville vores udvalgte stning have den hjeste vgt. Derudover ville kvaliteten af den samlede ordbog blive bedre, fordi datakvaliteten i ontologien er hjere end synonymordbogens, jvnfr afgrelse af termkontekst i kapitel 2. Hvis vi betragter alle de returnerede stninger, og vurderer dem kvalitativt med udgangspunkt i Grice maksimerne, kan vi kvalitativt vurdere prototypens funktionalitet. Det er vores subjektive vurdering af svarene, men som vi p apegede under afsnittet om Grice maksimerne i kapitel 2, konkretiseres der ikke hvordan man kvantitativt, kan vurdere de enkelte maksimer. Kvalitativt returneres der et godt svar, vores udvalgte stning. Resten brer prg af at vre stninger, der indeholder ordene \bolig" og \lejlighed" i forskellige betydninger. Der er 11 stninger, hvor ontologien vgtmssigt har et bidrag. Men af disse er kun en stning relevant, i den forstand at inkorporering af ontologien i implementationen, kan karakteriseres som bidragende med vsentlig funktionalitet. De resterende stninger minder i hjere grad om produktet af et termbaseret sgesystem, men et svar kan i mange tilflde vre nok for brugeren. I forhold til kvantitetsmaksimet udgr svarsttet 487 stninger ved en minimumsvgt p a 0,45. Hvis vi k returneret alle stninger, der havde relevans i forhold til foresprgslen ville vi potentielt f a returneret over 3000 stninger, svarende til, at der er 2175 stninger med ordet \mange", 0 med \senile", 439 med \bor", \lejlighed" 567 og trapper 83. Hvilket svarer til 1711 dokumenter. Blandt de 3000 stninger er der kun 487 af dem, med en vgt over 0,45. Taget i betragtning at foresprgslen er ret speci k, er over 3000 stninger et stort svarst. Foresprgslen udgr en meget speci k sgning og vi konkluderer at der ikke ndes stninger, der ligger i umiddelbar nrhed. Relationsmaksimet brydes hvis foresprgslen indeholder begrebet \lejlighed" i en anden betydning end bolig. Eksempelvis hvis der returneres stninger, hvor begrebet \lejlighed" optrder i betydningen \mulighed", som for eksempel \han k lejlighed til at lbe et rinde". M ademaksimet bliver umiddelbart ikke brudt. Vi opererer p a stningsniveau, og ingen af de returnerede stninger forekommer at vre tvetydige. Arbejdede vi derimod p a dokumentniveau og for eksempel havde valgt at returnere resumeer af dokumenterne, ville man i en s adan situation, godt kunne forestille sig, at d arligt genererede resumeer brd med m ademaksimet. Afslutningsvis skal det nvnes at eksemplet ikke er optimalt til at illustrere den udvidede funktionalitet. Ontologien har kun begrebet \lejlighed" til flles med foresprgslen. Enkelte foresprgsler, der indeholder en navnefrase af typen: et adjektiv efterfulgt af et substantiv, hvor begge begreber er reprsenteret i ontologien, ville vre interessante i sgeperspektiv. Hvis det var tilfldet, kunne vi konstruere
64
KAPITEL 4. INDSAMLING AF EMPIRI
foresprgsler, i forventning om at f a returneret ere stninger, der lignede foresprgslen, hvilket ville styrke vores muligheder for at bedmme, om der er forskel p a, at ekspandere foresprgsler med specialiseringer eller generaliseringer.
Det videre arbejde med vgtning Vores vgtningsprincip er s aledes relativt simpelt. Derfor er der ere forbedringer, der skal tages h and om i det videre arbejde. For det frste skal vi have lst problemet med normalisering vores vgte, s aledes at de altid ligger i intervallet [0 : 1]. Det krver primrt at funktionerne calcNPWeight og calcVerbWeight implementeres med Cosine{koeÆcienten, der som det ses i tabel 2.8 altid overholder denne forudstning. Derudover br de nvnte funktioner, tage hjde for at ontologiske og synonyme bidrag til vgtningen ikke er enkeltst aende termer, men derimod kun termer, der substitureres ind i lngere sammenhngende navnefraser samt navnefraser der binder til et verbum, der er relevant i forhold til foresprgslen. Sidstnvnte leder os hen til et interessant, men yderst komplekst problem i forbindelse med genkendelse af natursprog, nemlig ordbinding. Et verbum eller subsidirt verbets synonyme og ontologiske relationer er, for os at se, frst rigtigt interessant, hvis verbet binder til en navnefrase. Med andre ord br verber, der ikke binder til nogle af foresprgslens navnefraser vgtes relativt lavt. Et andet interessant aspekt i det videre arbejde er, hvordan vi f ar inddraget ontologiens vrige semantiske relationer og hvordan disse br vgtes. I afsnit 2.3.4 er det eksempli ceret hvordan to af ontologiens semantiske relationer kan anvendes i forbindelse med foresprgselsmodi kation.
Kapitel 5
Konklusion Igennem dette speciale har vi tilfjet et lag til vores forst aelse for Information Retrieval. Vores tidligere projekt anskueliggjorde forskningsfeltets bredde og kompleksitet, men her var perspektivet det termbaserede sgesystem. Den forst aelse vi har erhvervet, har givet os indsigt i den del af Information Retrieval der trkker p a Natural Language Processing. Vores m al var overordnet, at undersge om begrebsmssig ekspansion af foresprgsler med ontologien giver anledning til forbedring af tekstsgning. Vi har derfor opstillet en model for dokumentreprsentation, der understtter foresprgsler i natursprog. Med udgangspunkt i vores empiriske erfaringer med prototypen, har vi endvidere opstillet et st normative retningslinier for anvendelse af ontologier til begrebsmssig ekspandering af foresprgsler. Gennem arbejdet med prototypesgesystemet, er vi blevet overbevist om, at vores model for reprsentation af dokumenter og retningslinier for ekspandering af begreber, via ontologien, fungerer. Prototypen har som forventet eksponeret
ere nye udfordringer ved at operere p a et begrebsmssigt niveau med text retrieval. Vi er blevet bekrftet i at operationaliseringen af teoretiske overvejelser er overordentlig vigtig, idet vi gennem projektet har tilegnet os praktisk erfaring, som har gjort os til bedre h andvrkere. Den pragmatiske tilgang har for os fungeret som en katalysator for erkendelsesprocessen.
Ordbogsmateriale Grundlaget for vores arbejde med sgning p a et begrebsmssigt niveau, har syntetiseret viden om sprog og begreber. Kendskab til grammatik, s a som ords grammatiske klasse og bjningsformer har vret hjrnestenen i vores natursprogsanalyse. Kendskab til begrebers semantiske sammenhng har vret essentiel for, at vi kunne operere med begreber p a en meningsfyldt m ade. Strstedelen af de ndvendige relationer og det ndvendigt tekstmateriale har vi fundet i Nudansk Ordbog og Den Danske SIMPLE{Ordbog. Vi fandt Nudansk Ordbog hensigtsmssig da den gav os de fundamentale opslagsord, deres grundliggende bjningsformer samt opslagsordenes grammati65
66
KAPITEL 5. KONKLUSION
ske kategorier. Disse informationer dannede grundlag for natursprogsanalysen, indekseringsprocessen og dermed identi kation af dokumenternes meningsbrende enheder. Da vi havde identi ceret de meningsbrende enheder kunne, vi med relationer i Den Danske SIMPLE{Ordbog, begynde at operere med dem p a et begrebsmssigt niveau. Adgangen til er-en-relationerne, gav os mulighed for umiddelbart at arbejde med begrebsmssig generalisering og specialisering. Vi valgte at give er-en-relationerne en central rolle i forbindelse med sammenligning af systemets meningsbrende enheder, da disse tillader os at foretage en egentlig begrebsmssig sammenligning. I kraft af analysen af SIMPLE{ Ordbogens vrige relationer, som eksempelvis holonymi og meronymi, mener vi at der er overordentligt rige muligheder for, at drage nytte af relationerne i forbindelse med foresprgselsmodi kation. Er-en-relationen gav i prototypen ikke ubetinget de forventede gode resultater. Vi mener dog udelukkende dette er et resultat af SIMPLE{Ordbogens manglende dkning, som flge af at den p a nuvrende tidspunkt ikke er fuldt udbygget. Vi havde sikret os at der er stort overlap mellem vores tekstkorpus og grammatiske ordbog, men ikke i samme omfang sikret os, at der var et tilsvarende overlap mellem tekstkorpus og SIMPLE{Ordbog. Vi kunne have sikret bedre resultater ved at vlge et snvert domne og udvide SIMPLE{Ordbogen manuelt med begreber fra det aktuelle domne. Vi har dog i hj grad vret interesseret i at opn a erfaringer med et bredt tekstkorpus, da vi mener det i hjere grad er en indiaktor for teknologiens anvendelighed i brugssammenhng. Vi mener fortsat at SIMPLE{Ordbogen har et overordentligt stort potentiale i forbindelse med begrebsmssig ekspandering og indsnvring via semantiske og leksikale relationer.
Dokumentbeskrivelse Udgangspunktet for at opstille en dokumentmodel var nsket om, at kunne indfange og behandle dokumenters semantik p a en struktureret m ade. For at kunne opstille vores dokumentmodel identi cerede vi sprogetes meningsbrende enheder, som objekter og deres interaktion. P a det konkrete plan gav dette anledning til uddragelse af navnefraser og verber fra teksten. For at styrke sammenhngen mellem navnefraser og verber, s a meget som muligt, blev disse struktureret p a stningsniveau. Modellen vi har opstillet abner mulighed for tilfjelse at ere typer af forskelligartede beskrivelser p a lige fod med navnefraser og verber. Dette har vi fundet hensigtsmssigt, da stninger kan nskes beskrevet i andre dimensioner, end de der kan beskrives med de aktuelt valgte attributter. Vi mener at have formuleret en beskrivelsesmodel, der honorerer vores overordnede m al, om et generisk, modulrt og eksibelt design.
Begrebsmssig ekspandering Vi har redegjort for, hvordan vi kan anvende ontologiens begrebsmssige relationer til at foretage en semantisk sammenligning af beskrivelser. Vi har i forlngelse heraf opstillet to modeller for begrebsmssig afstand i ontologien.
5.1. OPSUMMERING
67
I vores prototypesystem har vi valgt at lade foresprgsler ontologisk udvide med et konstant similaritetsm al. Det er vsentligt at bemrke, at vi yderligere har valgt kun at udvide i afstanden en fra et identi ceret begreb. I forbindelse med udarbejdelsen af modellerne for begrebsmssig afstand i ontologien, har vi erkendt at der nje skal skelnes mellem en stringent korrekt og anvendelsesorienteret fortolkning af ontologiens relationer.
Begrebsmssig evaluering Vgttildelingen p a beskrivelsesniveau var udfordrende at formulere, idet b ade foresprgsel og stning kan best a af ere navnefraser. Da de klassiske associerings{ koeÆcienter, som eksempelvis Cosine og Jaccard, af natur ikke opererer p a mngder af mngder, var det ndvendigt at udarbejde et alternativt m al. Vi har valgt at anvende den maksimale vgt mellem alle navnefraser i de to beskrivelse, og er bevidste om at det i visse tilflde resulterer i en favorisering af bestemte typer af beskrivelser. Favoriseringen sker n ar en natursprogsforesprgsel dekomponeres til ere navnefraser, hvor mindst en af disse kun best ar af et substantiv. Beskrivelser der alene indeholder dette substantiv, tildeles en forholdsmssig hj vgt. Den maksimale vgt opfylder dog vores vsentligste kriterie, at en stning, der indeholder hele foresprgslen skal tildeles en relativ hj vgt.
5.1 Opsummering I dette speciale har vi udviklet metoder til at forbedre sgesystemers funktionalitet, udover de muligheder der er givet ved klassiske termbaserede sgesystemer. Metoderne fokuserer p a identi kation, reprsentation og behandling af begreber i natursprog samt brug af semantiske og leksikalske relationer til foresprgselsmodi kation. I forbindelse med identi kation og reprsentation af begreber har vi opstillet en model for dekomposition af dokumenter i beskrivende enheder. Vi har i forbindelse med behandling af de beskrivende enheder opstillet normative retningslinier for begrebsmssig ekspandering via ontologiens semantiske relationer. P a baggrund af den opn aede indsigt og de udviklede metoder har vi konstrueret et prototypesgesystem, baseret p a PL/SQL i en Oracle database. Med udgangspunkt i analysen af den implementerede prototype kan vi konkludere at sgesystemer der baserer sig p a natursprogsanalyse og foresprgselsmodi kation i hj grad kan drage nytte af semantiske og leksikalske relationer i maskinlsbare ordbger.
5.2 Perspektivering I vores arbejde, med s avel dette som tidligere projekter, er vi stdt p a udfordringer som krver en dybere afdkning. Vi har s aledes identi ceret tre primre indsatsomr ader for fremtidigt arbejde.
68
KAPITEL 5. KONKLUSION
Ordbinding Ordbinding er et interessant, men yderst komplekst problem i forbindelse med genkendelse af natursprog. Et verbum eller subsidirt verbets synonyme og ontologiske relationer er, for os at se, frst virkelig interessant, hvis verbet bindes til en navnefrase. I vores nuvrende prototypesystem er det ikke muligt af afgre navnefraser og verbers relation, udover deres forekomst i samme stning. S afremt vi kunne afgre den prcise binding mellem verber og navnefraser, vil det vre muligt at identi cere ikke alene hvilke objekter der er reprsenteret, men ogs a hvilken interaktion de har med deres omgivelser. Dette vil kunne anvendes til en mere detaljeret sammenligning og vgtning af beskrivelser.
Andre relationer fra ontologien S afremt vi havde haft mere tid til r adighed kunne vi have inddraget ere af Den Danske SIMPLE{Ordbogs semantiske og leksikale relationer. Vi mener at de resterende relationer har et stort potentiale i forbindelse med foresprgselsmodi kation. Det vil vre yderst interessant at foretage praktiske eksperimenter med de resterende relationer, idet de indeholder vsentlig og maskinelt tilgngelig semantisk information.
Ndvendigheden af et dansk testkorpus Sgesystemer kan forholdsvis nemt evalueres kvalitativt ud fra eksempelvis Grice maksimer. nskes en kvantitativ evaluering af et tekstsgesystem ligger der et omfattende arbejde i forberedelse af tekstkorpus, foresprgsler og manuel identi kation af korrekte svar. Det er derfor typisk at vlge et eksisterende testsamling, som eksempelvis TREC [Voorhees & Tice, 2000] til afprvning af sit sgesystem. nsker man i sgesystemet at gre brug af sprogspeci kke elementer, er det ndvendigt at benytte en testsamling p a samme sprog. For et mindre sprogomr ade, som eksempelvis dansk, eksisterer der ikke en anerkendt testsamling. Vi mener at udarbejdelsen af en dansk testsamling, er en ndvendig investering for at understtte udviklingen af dansksprogede sgesystemer.
Litteratur [Andersen et al., 1998] Niels Castle Andersen, Per Drge, Thomas Hald Frandsen, and Rasmus Knappe (1998). Kooperative sgesystemer. Project, Roskilde Universitetscenter. [Andreasen & Christiansen, 1996] Troels Andreasen and Henning Christiansen (1996). Om matematisk logik. Roskilde Universitetsscenter, Datalogiafdelingen, Datalogiske Noter nr. 15. [Andreasen et al., 1999] Troels Andreasen, Jrgen Fischer Nilsson, Bolette Sandford Pedersen, and Hanne Erdman Thomsen (1999). OntoQuery Project Description. http://www.ontoquery.dk/description.html. [Anick & Vaithyanathan, 1997] Peter G. Anick and Ahivakumar Vaithyanathan (1997). Exploiting Clustering and Phrases for Context-Based Information Retrieval. In Proceeding of SIGIR, pages 314{323, Philadelphia, PA., USA. The OX Association for Computing Machinery. [Atwell & Pocock, 1994] E. S. Atwell and R. J. Pocock (1994). AI5 Natural Language Processing. Technical report, School of Computing, University of Leeds. [Booch et al., 1999] Grady Booch, James Rumbaugh, and Ivar Jacobsen (1999). The Uni ed Modelling Language User Guide. Addison-Wesley, Reading, MA., USA. [Cutting et al., 1992] D. Cutting, J. Pederson, D. Karger, and J. Tukey (1992). Gather: A clusterbased approach to browsing large document collections. [Fodor & Lepore, 1997] Jerry Fodor and Ernie Lepore (1997). The Emptiness of the Lexicon: Re ections on James Pustejovsky's \The Generative Lexicon". Linguistic Inquiry, 29(2):269{288. [Gaasterland et al., 1992] Terry Gaasterland, Park Godfrey, and Jack Minker (1992). An Overview of Cooperative Answering. Journal of Intelligent Informations Systems, 1:123{157. [Gadd, 1988] T. N. Gadd (1988). 'Fisching fore Werds'. Phonetic Retrieval of written text in Information Retrieval Systems. Program, 22(3):222{237. [Ginsberg, 1991] M. L. Ginsberg (1991). Knowledge Interchange Format: The KIF of Death. Technical report, Computer Science at Stanford University. 69
70
LITTERATUR
[Grice, 1975] H. P. Grice (1975). Logic and Conversation. pages 41{58. [Guarino, 1998] Nicola Guarino (1998). Some Ontological Principles for Designing Upper Level Lexical Resources. pages 1{8. [Hearst, 1991] Marti A. Hearst (1991). Noun Homograph Disambiguation using Local Context in Large Text Corpora. In Proceedings of the 7th Annual Conference of the UW Centre for the New OED and Text Research: Using Corpora, pages 1{22, Oxford, UK. [Hearst et al., 1995] Marti A. Hearst, David R. Krager, and Jan O. Pedersen (1995). Scatter/Gather as a Tool for the Navigation of Retrieval Results. [Hearst & Pedersen, 1996] Marti A. Hearst and Jan O. Pedersen (1996). Reexamining the Cluster Hypothesis: Scatter/Gather on Retrieval Results. In Proceeding of 19th Annual International ACM SIGIR Conference on Research and Development in Information Retrieval, Zurich, Switzerland. The OX Association for Computing Machinery. [Jing & Tzoukermann, 1999] Hongyan Jing and Evelyne Tzoukermann (1999). Information retrieval based on context distance and morphology. In Proceedings on the 22nd annual international ACM SIGIR conference on Research and development in information retrieval, pages 90{96, Berkeley, CA., USA. The OX Association for Computing Machinery. [Kamp, 1988] H. Kamp (1988). Discourse Representation Theory: What It Is and Where It Ought to Go. In A. Blaser, editor, Natural Language at the Computer. Springer, Berlin. [Karger & Pedersen, 1993] David Karger and Jan Pedersen (1993). Constant interaction-time Scatter/Gather browsing of very large document collections. [Kelly & Stone, 1975] E. Kelly and P. Stone (1975). Computer Recognition of English Word Senses. [Kilgarri, 1997] Adam Kilgarri (1997). What is Word Sense Disambiguation Good For? In Proceeding of NLP Paci c Rim Symposium, Phuket, Thailand. The OX Association for Computing Machinery. [Korpimies & Ukkonen, 1988] Kai Korpimies and Esko Ukkonen (1988). Searching for General Documents. In Troels Andreasen, Henning Christiansen, and Henrik Legind Larsen, editors, Flexible Query-Answering Systems, Proceedings of the 1998 workshop (FQAS'98), Roskilde, Denmark. Roskilde University, Datalogiske Skrifter. [Krovetz & Croft, 1989] R. Krovetz and W. B. Croft (1989). Word Sense Disambiguation Using Machine-Readable Dictionaries. In N. J. Belkin and C. J. van Rijsbergen, editors, Proceeding of 12th Annual International ACM SIGIR Conference on Research and Development in Information Retrieval, pages 127{136, Cambridge, MA, USA. The OX Association for Computing Machinery. [Krovetz & Croft, 1992] R. Krovetz and W. B. Croft (1992). Lexical Ambiguity and Information Retrieval. ACM Transactions on Information Retrieval, 10.
LITTERATUR
71
[Krumeich, 1997] Alexander Krumeich (1997). Qualia vs. WORMs: Approaching Logical Polysemy. Technical report, Uni Osnabrueck. [Lawrence & Giles, 1998] Steve Lawrence and Lee C. Giles (1998). Context and page analysis for improved web search. Internet Search Technologies, 2(4). [Lesk, 1986] M. Lesk (1986). Automatic sense disambiguation: How to tell a pine cone from a ice cream cone. In Proceeding of the SIGDOC Conference, pages 24{26. The OX Association for Computing Machinery Digital Library. [Luger & Stubble eld, 1998] G. F. Luger and W. A. Stubble eld (1998). Arti cial Intelligence: Structures and Stratergies for Complex Problem Solving. Addison-Wesley, London, third edition. [Lund, 2000] Jrn Lund (2000). Den Store Danske Encyklopdi. Gyldendal, Kbenhavn. [McConnell, 1993] Steve McConnell (1993). Code Complete, A Practical Handbook of Software Construction. Microsoft Press, Seattle, WA. [Merzbacher & Chu, 1992] M. A. Merzbacher and W. W. Chu (1992). QueryBased Semantic Nearness for Cooperative Query Answering. Computer Science Department University of California, Los Angeles. [Miller et al., 1990] George A. Miller, Richard Beckwith, Christiane Fellbaum, Derek Gross, and Katherine J. Miller (1990). Introduction to WordNet: an on-line lexical database. 3(4):235{244. [Motro, 1994] Amihai Motro (1994). Cooperative Databases. In Troels Andreasen, Henning Christiansen, and Henrik Legind Larsen, editors, Flexible QueryAnswering Systems, Proceedings of the 1997 workshop (FQAS'97), Roskilde, Denmark. Roskilde University, Datalogiske Skrifter. [Navaretta, 1998] C. Navaretta (1998). Encoding of Danish verbs in the PAROLE-model. In Mitkov, Nicolov, and Nokolov, editors, Recent Advances in Natural Language Processing, Proceedings, Tzigov Chark, Bulgaria. [Nudansk Ordbog, 1999] Nudansk Ordbog (1999). Politikens Nudansk med Etymologi. Politikens Forlag, Kbenhavn. [Pedersen, 1999] Bolette Sandford Pedersen (1999). Den Danske SIMPLE-ordbog; en semantisk, ontologibaseret ordbog. In Proceedings fra Datalingvistisk Arsmde. [Pedersen & Nimb, 1999] Bolette Sandford Pedersen and Sanni Nimb (1999). Treating Metaphoric Senses in a Danish Computational Lexicon { dierent cases of regular polysemy. Technical report, Center for Sprogteknologi ved Kbenhavns Universitet. [Pedersen & Nimb, 2000] Bolette Sandford Pedersen and Sanni Nimb (2000). Language-Speci c Adaption to a Multilingual Lexicon Model { some aspects of the Danish SIMPLE-lexicon. In Proceedings of LREC2000. [Politikens Synonymordbog, 2000] Politikens Synonymordbog (2000). Politikens Synonymordbog. Politikens Forlag, Kbenhavn.
72
LITTERATUR
[Porter, 1980] M. Porter (1980). An algorithm for suÆx stemming. 14(3):130{ 137. [Pustejovsky, 1991] James Pustejovsky (1991). The generative lexicon. Computational Linguistics, 17(4):409{441. [Pustejovsky, 1995] James Pustejovsky (1995). The Generative Lexicon. MIT Press, Cambridge, MA. [Pustejovsky, 1997] James Pustejovsky (1997). Knowlegde is Elsewhere: Natural Language Semantics meets the X-Files. pages 1{29. [Retskrivningsordbogen, 1996] Retskrivningsordbogen (1996). Retskrivningsordbogen. Dansk Sprognvn, Kbenhavn, second edition. [Ruimy et al., 1998] N. O. Corazzari Ruimy, A. Spanu E. Gola, and A. Zampolli N. Calzolari (1998). The European LE-PAROLE Project: The Itallian Syntactic Lexicon. In First International Conference on Language Resources and Evaluation, Grenada, Spain. [Salton, 1983] Gerard Salton (1983). Introduction to Modern Information Retrieval. McGraw-Hill. [Sanderson, 1994] Mark Sanderson (1994). Word Sense Disambiguation and Information Retrieval. In Proceeding of Annual International ACM SIGIR Conference on Research and Development in Information Retrieval, pages 142{151, Dublin Ireland. The OX Association for Computing Machinery. [Schutze & Pedersen, 1995] Hinrich Schutze and Jan O. Pedersen (1995). Information retrieval based on word senses. pages 161{175. [Semantics, 1996] Semantics (1996). Semantics, course AVS209. Lecture notes, Det historisk- loso ske fakultet, NTNU, 7491 Trondheim. [Shannon, 1951] C. E. Shannon (1951). Prediction and Entropy of Printed English. Bell Systems Technical Journal, 30:50{64. [Sowa, 1984] John F. Sowa (1984). Conceptual Structures: Information Processing in Mind and Machine. The System Programming Series. Addison-Wesley Publishing Company. [Sowa, 1995] John F. Sowa (1995). Top-level ontological categories. International Journal of Human and Computer Studies, 43:669{685. [Sowa, 1999] John F. Sowa (1999). Knowledge Representation: Logical, Philosophical, and Computational Foundations. Brooks Cole Publishing Co., Paci c Grove, CA. Preview. [Sowa, 2000] John F. Sowa (2000). Concepts in the Lexicon: Introduction. http://www.bestweb.net/sowa/ontology/lexicon.htm. [Stroustrup, 2000] Bjarne Stroustrup (2000). The C++ Programming Language Special Edition. Addison-Wesley, USA.
LITTERATUR
73
[Ta, 1997] Ta (1997). Interview with James Pustejovsky. Ta! Student magazine for computional linguistics. http://coli.uni-sb.de/ mineur/Itv/Pustejovsky.html. [Ullmann & Widom, 1997] Jerey D. Ullmann and Jennifer Widom (1997). A First Course in Database Systems. Prentice-Hall International, Inc., USA. [van Rijsbergen, 1979] C. van Rijsbergen (1979). Information Retrieval. Butterworths, London. [Voorhees, 1993] Ellen M. Voorhees (1993). Using WordNet to Disambiguate Word Sense for Text Retrieval. In Proceeding of 16th Annual International ACM SIGIR Conference on Research and Development in Information Retrieval, pages 171{180, Pittsburgh, PA, USA. The OX Association for Computing Machinery. [Voorhees & Tice, 2000] Ellen M. Voorhees and Dawn M. Tice (2000). Building a Question Answering Test Collection. In Proceeding of the 23rd Annual International ACM SIGIR Conference on Research and Development in Information Retrieval, pages 200{207, Athens, Greece. The OX Association for Computing Machinery. [Wallis, 1993] P. Wallis (1993). Information Retrieval Based on Paraphrase. In Proceeding of the PACLING Conference. [Weiss, 1973] S. F. Weiss (1973). Learning to disambiguate. Information Storage and Retrieval, 9:33{41. [Wolfram, 2000] Dietmar Wolfram (2000). A Query-Level Examination of End User Searching Behaviour on the Excite Search Engine. In H. Olson, editor, Proceedings of the 26th Annual Conference of the Canadian Association for Information Science, Edmonton, Alberta, Canada. Canadian Association for Information Science. http://www.slis.ualberta.ca/cais2000/wolfram.htm. [Yarowsky, 1992] D. Yarowsky (1992). Word sense disambiguation using statistical models of Roget's categories trained on large corpa. In Proceeding of the COOLING Conference, pages 454{460.
Bilag A
Beregning af vgte I dette afsnit illustreres vores vgtningsprincip ved gennemregning af en sammenligning af beskrivelse 793 med sig selv. Beregningerne kontrolleres til nederste niveau i funktionerne. Beregninger er foretaget, med de forudstninger at ens termer giver vgten 1, ontologisk relaterede termer giver vgten 0,5 og synonymer giver vgten 0,25.
Foresprgsel - Hvilken stning indg ar i beskrivelsen 1 2 3 4
SELECT documentsentence.sentence FROM documentsentence, description WHERE documentsentence.sentenceid = description.sentenceid AND description.descriptionid = 793
Figur A.1: Foresprgsel: stninger relateret til beskrivelse 793. Foresprgselen A.1 returnerer flgende stning: \Bruno Labbadia reducerede fem minutter efter Nurnbergs andet m al, og Thomas von Hessen bragte balance i regnskabet otte minutter senere."
Foresprgsel - Hvilke navnefraser indeholder beskrivelsen 1 2 3 4 5
SELECT nounphraseset.descriptionid, nounphraseset.nounphraseid, termset.termid, term.lemma FROM nounphraseset, termset, term WHERE nounphraseset.nounphraseid = termset.nounphraseid AND termset.termid = term.termid AND nounphraseset.descriptionid = 793
Figur A.2: Foresprgsel: Navnefraser der indg ar i beskrivelse 793. Det ses i tabel A.1 at vores prototype ikke har genkendt substantivet \m al", da denne term ikke er at nde i ordbogen. Dette bekrftes af et opslag i tabellen 74
75
DESCRIPTIONID NOUNPHRASEID TERMID LEMMA 793 793 793 793
4258 4259 4260 4261
22559 2488 28218 22559
minut balance regnskab minut
Tabel A.1: Navnefraser der indg ar i beskrivelse 793. term, der ikke indeholder termen. Det er ligeledes vrd at notere sig at b ade
de to fodboldspillere samt fodboldholdet, der nvnes i stningen, heller ikke genkendes, da vores prototype ikke genkender egennavne.
Foresprgsel - Hvilke verber indeholder beskrivelsen 1 2 3 4
SELECT verbset.descriptionid, verbset.termid, term.lemma FROM verbset, term WHERE verbset.termid = term.termid AND verbset.descriptionid = 793
Figur A.3: Foresprgsel: Verber der indg ar i beskrivelse 793.
DESCRIPTIONID TERMID LEMMA 793 793
28126 4431
reducere bragte
Tabel A.2: Navnefraser der indg ar i Description 793. I dette tilflde genkendes begge verber i stningen, som det ses i tabel A.2.
data-input CalcVerbWeight(793,793)
CalcNPWeight(793,793)
Output VerbTWeight: 1 VerbSWeight: 0 VerbOWeight: 0 NPTWeight: 1 NPSWeight: 0,25 NPOWeight: 0
Forventet Ja Ja
Tabel A.3: Beregning af de enkelte vgte p a termniveau.
Kontrol af vgtberegningerne p a termniveau Kontrol af vgtberegningerne p a termniveau giver anledning til krydset af navnefraser i gur A.4.
BILAG A. BEREGNING AF VGTE
76
Data-input
Output
CalcTermWeight(28126,4431); CalcTermSynoWeight(28126,4431); CalcTermOntoWeight(28126,4431); CalcTermWeight(28126,28126); CalcTermSynoWeight(28126,28126); CalcTermOntoWeight(28126,28126); CalcTermWeight(4431,4431); CalcTermSynoWeight(4431,4431); CalcTermOntoWeight(4431,4431);
Forventet Ja Ja Ja Ja Ja Ja Ja Ja Ja
TermWeight : 0 TermSynoWeight : 0 TermOntoWeight : 0 TermWeight : 1 TermSynoWeight : 0 TermOntoWeight : 0 TermWeight : 1 TermSynoWeight : 0 TermOntoWeight : 0
Tabel A.4: Kontrolberegning af CalcTermWeight(), CalcSynoWeight() og CalcOntoWeight() for verberne i Description 793.
Foresprgsel - Kryds af navnefraser Foresprgslen giver anledning til det uddata, der ses i tabel A.5. Desc1
Desc2
NP1
NP2
Term1
Term2
W
SW
OW
j
NP1j
j
NP2j
793 793 793 793 793 793 793 793 793 793 793 793 793 793 793 793
793 793 793 793 793 793 793 793 793 793 793 793 793 793 793 793
4258 4259 4260 4261 4258 4259 4260 4261 4258 4259 4260 4261 4258 4259 4260 4261
4258 4258 4258 4258 4259 4259 4259 4259 4260 4260 4260 4260 4261 4261 4261 4261
22559 2488 28218 22559 22559 2488 28218 22559 22559 2488 28218 22559 22559 2488 28218 22559
22559 22559 22559 22559 2488 2488 2488 2488 28218 28218 28218 28218 22559 22559 22559 22559
1 0 0 1 0 1 0 0 0 0 1 0 1 0 0 1
0 0 0 0 0 0 0,5 0 0 0,5 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Tabel A.5: Navnefraser, og relaterede termer, der indg ar i Description 793. De enkelte vgte er givet ved tabel A.4 og tabel A.6
77
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
SELECT Total_Desc1.Desc1, Total_Desc2.Desc2, Total_Desc1.NP1, Total_Desc2.NP2, Total_Desc1.Termid_Desc1, Total_Desc2.Termid_Desc2, queryEvaluator.calcTermWeight( Total_Desc1.Termid_Desc1, Total_Desc2.Termid_Desc2) AS TermWeight, queryEvaluator.calcTermSynoWeight( Total_Desc1.Termid_Desc1, Total_Desc2.Termid_Desc2) AS TermSynoWeight, queryEvaluator.calcTermOntoWeight( Total_Desc1.Termid_Desc1, Total_Desc2.Termid_Desc2) AS TermOntoWeight, Total_Desc1.Antal_Desc1 AS No_in_NP1, Total_Desc2.Antal_Desc2 AS No_in_NP2 FROM ( SELECT DISTINCT Desc1.nounphraseid AS NP1, Desc1.descriptionid AS Desc1, Desc1.termid AS Termid_Desc1, count_Desc1.Antal_Desc1 FROM ( SELECT nounphraseset.descriptionid, nounphraseset.nounphraseid, termset.termid FROM nounphraseset, termset WHERE nounphraseset.nounphraseid = termset.nounphraseid AND nounphraseset.descriptionid = 793 ) Desc1, ( SELECT nounphraseset.nounphraseid, count(termset.termid) AS Antal_Desc1 FROM nounphraseset, termset WHERE nounphraseset.nounphraseid = termset.nounphraseid AND nounphraseset.descriptionid = 793 GROUP BY nounphraseset.nounphraseid ) Count_Desc1 WHERE Desc1.nounphraseid = Count_Desc1.nounphraseid ) Total_Desc1, ( SELECT DISTINCT Desc2.nounphraseid AS NP2, Desc2.descriptionid AS Desc2, Desc2.termid AS Termid_Desc2, count_Desc2.Antal_Desc2 FROM ( SELECT nounphraseset.descriptionid, nounphraseset.nounphraseid, termset.termid FROM nounphraseset, termset WHERE nounphraseset.nounphraseid = termset.nounphraseid AND nounphraseset.descriptionid = 793 ) Desc2, ( SELECT nounphraseset.nounphraseid, COUNT(termset.termid) AS Antal_Desc2 FROM nounphraseset, termset WHERE nounphraseset.nounphraseid = termset.nounphraseid AND nounphraseset.descriptionid = 793 GROUP BY nounphraseset.nounphraseid ) Count_Desc2 WHERE Desc2.nounphraseid = Count_Desc2.nounphraseid ) Total_Desc2
Figur A.4: Foresprgsel - Navnefraser der indg ar i Description 793.
BILAG A. BEREGNING AF VGTE
78
data-input CalcTermWeight(22559,2488); CalcTermSynoWeight(22559,2488); CalcTermOntoWeight(22559,2488); CalcTermWeight(22559,28218); CalcTermSynoWeight(22559,28218); CalcTermOntoWeight(22559,28218); CalcTermWeight(22559,22559); CalcTermSynoWeight(22559,22559); CalcTermOntoWeight(22559,22559); CalcTermWeight(2488,28218); CalcTermSynoWeight(2488,28218); CalcTermOntoWeight(2488,28218);
Output TermWeight : 0 TermSynoWeight : 0 TermOntoWeight : 0 TermWeight : 0 TermSynoWeight : 0 TermOntoWeight : 0 TermWeight : 1 TermSynoWeight : 0 TermOntoWeight : 0 TermWeight : 0 TermSynoWeight : 0,5 TermOntoWeight : 0
Forventet Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja
Tabel A.6: Kontrolberegning af vgte for de navnefraser og relaterede termer, der indg ar i Description 793.
Bilag B
Afprvning Vi afvikler testen af pakkerne i flgende rkkeflge: Dictionary, IndexEngine, Tagger og QueryEvaluator. Pakken Ontotypes indeholder kun type{erklringer, hvilket ikke giver mening at afprve som en selvstndig enhed. Typerne bliver i stedet afprvet under de relevante pakker. Pakken Dictionary indeholder getGramCats() og isAbbreviation().
Afprvning af getGramcats() Data{input Output 'banan' " '123' 'xyz' '?'
Substantiv null null null null
Forventet ja ja ja ja ja
Tabel B.1: Afprvning af getGramcats()
Afprvning af isAbbreviation() Data{input Data{output 'f.eks.' 'regent' null
" '123' 'xyz' '?'
aBoolean = True aBoolean = False aBoolean = False aBoolean = False aBoolean = False aBoolean = False aBoolean = False
Forventet ja ja ja ja ja ja ja
Tabel B.2: Afprvning af isAbbreviation() 79
BILAG B. AFPRVNING
80
Pakken Dictionary indeholder funktionerne tagSentence(), removeCharsFromString2() og tokenize().
Afprvning af tokenize() Data{input
Data{output
null
null null null
' Dette er en test. ' " '' '?'
'Dette' 'er' 'en' 'test.'
'?'
Forventet ja ja ja ja ja
Tabel B.3: Afprvning af tokenize()
Afprvning af removeCharsFromString2() Data{input
'Dette er en test.', '.' 'Dette er en test.', 'te' 'Dette er en test.', '?' 'Dette er en test.', null null , '.' 'Dette er en test.', " ", '.' ", " null, null
Data{output
'Dette er en test' 'D r n s.' 'Dette er en test.' ORA-06512 null
ORA-06512 null
ORA-06512 ORA-06512
Forventet ja ja ja nej ja nej ja nej nej
Tabel B.4: Afprvning af removeCharsFromString2()
Afprvning af tagSentence() Fejl i tabel B.5 skyldes at termen "stor" ikke ndes i databasen. Pakken DescriptionGenerator indeholder flgende metoder: generateDescription(), doSentence(), insertDocumentSentence(), tokenize(), createDescription(), insertVerb(), findAndStoreNP(), insertNP()
Afprvning af createDescription() I anden rkke i tabel B.6, burde det ikke vre muligt at indstte tupler med null{vrdier i tabellen Description. Problemet kan lses ved at tilfje en constraint p a tabellen, der krver at vrdien ikke m a vre null. Funktionen createDescription(), burde ogs a have vrdicheck.
81
data{input
Output
Forventet
null
ORA-06512 Atom: Tag: Id: Finished Atom: kasse Tag: 1 Id: 17487 Atom: rd Tag: 5 Id: 29123 Finished Atom: Tag: Id: Finished Atom: ? Tag: Id: Finished Atom: - Tag: Id: Finished Atom: Tag: Id: Finished Atom: Tag: Id: Finished Atom: Tag: Id: Finished Atom: Tag: Id: Finished Atom: Tag: Id: Finished ORA-01403
nej ja ja
'stor svedig rd rund underlig kasse.' '.' 'kasse rd..' '.' '?.' '-.' '!.' ';.' ':.' ',.' '.' Ikke eksisterende id
'Atom: stor Tag: Id: ...'
nej
ja ja ja ja ja ja ja ja ja
Tabel B.5: Afprvning af tagSentence()
data{input 153515 null
Ikke eksisterende id
Output
Finished 157596 Finished ORA-02291
Forventet ja ja ja
Tabel B.6: Afprvning af createDescription()
Afprvning af insertVerb() data{input
157594, 21405 157594, 327 null, null null, 21405 157594, null Ikke eksisterende descriptionId, 21405 157594, Ikke eksisterende termId
Output
Finished Finished ORA-01400 ORA-01400 ORA-01400 ORA-02291 Finished
Forventet ja ja ja ja ja ja nej
Tabel B.7: Afprvning af insertVerb() I anden rkke i tabel B.7 bliver termen \afghansk" indsat i tabellen verbSet. \afghansk" er ikke et verbum, derfor er dette en sideeekt. Det krver at den kaldende metode har kontrol med hvad der indsttes. Defensiv programmering ville have kontrolleret dette. Derudover fungere metoden. I nederst rkke i tabel B.7 indsttes tuplen med det ikke{eksisterende
BILAG B. AFPRVNING
82
termid. Ved at krve referentiel integritet, ville vi kunne forhindre at der bliver indsat ulovlige termid'er.
Afprvning af insertNP() data{input
157594, 327, 15063 157594, 327, 21405 null, 327, 15063 157594, null 157594, 327, null Ikke eksisterende descriptionId, 327, 15063 157594, Ikke eksisterende termId
Output
Finished Finished ORA-01400 ORA-01400 ORA-01400 ORA-02291 Finished
Forventet ja ja ja ja ja ja nej
Tabel B.8: Afprvning af insertNP() I anden rkke i tabel B.8, er fejlen den samme som i insertVerb() og kan forhindres med referentiel integritet. I nederste rkke i B.8 bliver der indsat termId'er, der ikke ndes i tabellen term. P a samme m ade som i insertVerb(), kan vi forhindre indsttelse ved at krve referentiel integritet.
Afprvning af findAndStoreNP() data{input
135513, taggedTermArray 135513, null{vrdi i array null, taggedTermArray ikke eksisterende sentenceId, taggedTermArray 135513, en ugyldig vrdi i array'et
Output Forventet Finished Finished Finished Finished Finished
ja ja nej ja ja
Tabel B.9: Afprvning af findAndStoreNP() I anden rkke i tabel B.9, er det muligt at indstte en null{vrdi i variablen taggedTermArray uden at det giver fejl. Dette kan rettes ved at opretholde en 'not null'{constraint i tabellerne. Vi kan ogs a kontrollere hvad der bliver gemt
i databasen. I tredie rkke i tabel B.9, er det muligt at afvikle findAndStoreNP(), selvom sentenceId'et er null. Inde i findAndStoreNP() kaldes createDescription(), som ogs a tillader at man som parameter giver variable, der er tildelt null. Dette er et eksempel p a hvordan en fejl i en komponent i de verste lag, bevger sig ned til de nederste lag og giver problemer.
83
data{input
Output
' Dette er en test af tokenize. '
Finished ORA-06512 ORA-06512
null
''
Forventet ja ja nej
Tabel B.10: Afprvning af tokenize()
Afprvning af tokenize() I sidste rkke i tabel B.10 fejler tokenize(), fordi den indkomne tekst bliver trimmet til lngden 0 og derefter bliver der foretaget operationer p a den tomme streng. Hvis vi blandt andet indfres kontrol af lngden undervejs, kan fejlen h andteres.
Afprvning af insertDocumentSentence() data{input
4674, null, 'Dette er en test af insertDocumentSentence' null, null, 'Dette er en test af insertDocumentSentence' null, null, null
Output Forventet Finished
ja
Finished
ja
Finished
ja
Tabel B.11: Afprvning af insertDocumentSentence() I b ade anden, tredie og fjerde rkke i tabel B.11 bliver der indsat tupler, der indeholder null{vrdier i kolonnerne docId og sentence, uden at der kommer en fejlmeddelelse. Vi kan forhindre indsttelse ved, at krve at kolonnerne ikke m a indeholde null{vrdier og vi kan kontrollere vrdierne, inden de bliver sat ind i tabellen.
Afprvning af doSentence() I anden rkke i tabel B.12 fejler doSentence(), fordi den sidste stning ikke indeholder et punktum. Det er grammatisk ukorrekt, at afslutte en helstning uden et punktum. En simpel kontrol kunne forhindre denne fejl.
Afprvning af generateDescription() Afprvning Evaluate() Evaluate() afprves her med henholdsvis den tomme streng, en ikke{eksisterende
term, en navnefrase med mange adjektiver, et punktum samt et sprgsm alstegn.
BILAG B. AFPRVNING
84
data{input
docId der indeholder ('Dette er en test. At teste er meget svrt.') docId der indeholder ('Dette er en test. At teste er meget svrt') docId der indeholder (null) null
Output
Forventet
Finished
nej
ORA-06512
ja
ORA-06512
ja
Finished
ja
Tabel B.12: Afprvning af doSentence()
data{input
docId der indeholder ('Dette er en test. At teste er meget svrt.') docId der indeholder ('Dette er en test. At teste er meget svrt') null
Output
Forventet?
Finished
nej
ORA-06512
ja
Finished
ja
Tabel B.13: Afprvning af generateDescription()
Data{input
Output
Evaluate(") Evaluate('md sdf') Evaluate(' stor svedig rd rund underlig kasse ') Evaluate('.') Evaluate('?')
The following error has occurred: ORA-06502: PL/SQL: numerisk fejl eller vrdifejl ORA-06512: ved "ONTO.QUERYEVALUATOR", linje 40 Result of Query: mdflsdf. With minimum Weight 0 End of results Result of Query: stor svedig rd rund underlig kasse. With minimum Weight 0 DescriptionId: 342 SentenceId: 411 DocId: 103
. .
Total Weight: ,03 Result of Query: . With minimum Weight 0,9 End of results Result of Query: ?. With minimum Weight 0 End of results
Forventet Nej Ja
Ja
Ja Ja
Tabel B.14: Afprvning af Evaluate().
Det ses i tabel B.14 at evaluate ikke er robust overfor den tomme streng, men ellers ikke fejler. Det er trivielt, at indbygge en test for den tomme streng i funktionen.
85
Afprving CalcVerbWeight og CalcNPWeight, samt deres wrapper compareDescription. Strategien er her at teste p a null{vrdier samt Descriptionid'er, der ikke eksisterer i databasen.
Data{input
Output
CalcNPWeight(null,null)
CalcNPWeight(1000000,1000000)
CalcVerbWeight(null,null)
CalcVerbWeight(10000000,10000000)
CompareDescription(null,null)
CompareDescription(1000000,1000000)
Tabel
B.15: Afprvning af
CompareDescription().
Forventet
NPTWeight: 0 NPSWeight: 0 NPOWeight: 0 VerbTWeight: 0 VerbSWeight: 0 VerbOWeight: 0 NPTWeight: 0 NPSWeight: 0 NPOWeight: 0 VerbTWeight: 0 VerbSWeight: 0 VerbOWeight: 0 NPTWeight: 0 NPSWeight: 0 NPOWeight: 0 VerbTWeight: 0 VerbSWeight: 0 VerbOWeight: 0 NPTWeight: 0 NPSWeight: 0 NPOWeight: 0 VerbTWeight: 0 VerbSWeight: 0 VerbOWeight: 0 NPTWeight: 0 NPSWeight: 0 NPOWeight: 0 VerbTWeight: 0 VerbSWeight: 0 VerbOWeight: 0 NPTWeight: 0 NPSWeight: 0 NPOWeight: 0 VerbTWeight: 0 VerbSWeight: 0 VerbOWeight: 0
CalcNPWeight(),
Ja
Ja
Ja
Ja
Ja
Ja
CalcVerbWeight()
og
Herefter testes de tre termvgtsfunktioner for null{vrdier samt ikke eksisterende termid'er.
BILAG B. AFPRVNING
86
Afprvning af CalcTermWeight og CalcSynoWeight, CalcOntoWeight. Data{input CalcTermWeight(null,null); CalcTermSynoWeight(null,null); CalcTermOntoWeight(null,null); CalcTermWeight(1000000,1000000); CalcTermSynoWeight(1000000,1000000); CalcTermOntoWeight(1000000,1000000); CalcTermWeight(1000000,10000000); CalcTermSynoWeight(1000000,10000000); CalcTermOntoWeight(1000000,10000000);
Output TermWeight = 0 SynoWeight = 0 OntoWeight = 0 TermWeight = 1 SynoWeight = 0 OntoWeight = 0 TermWeight = 0 SynoWeight = 0 OntoWeight = 0
Forventet Ja Nej Ja
Tabel B.16: Afprvning af CalcTermWeight(), CalcTermSynoWeight() og CalcTermOntoWeight(). Det ses tabel B.16, at der er en fejl i implementationen af CalcTermWeight(), idet ikke{eksisterende termer med samme id giver termvgten 1. Det ville relativt nemt kunne rettes, da det kun krver at termid'erne testet med hensyn til, om de eksisterer i databasen, inden vgtberegningen foretages. Omvendt kan CalcTermWeight() kun blive kaldt med eksisterende termid'ere, da de kaldende funktioner i pakken (QueryEvaluator) alle baserer sig p a foresprgsler i databasen, der m a forventes at returnere eksisterende termid'er.
Afprvning af expand{funktionerne Og as her testes for null{vrdier, og ikke{eksisterende termid'er. Eneste forskel er, at vrdierne tilskrives frste indeks i det array, som expand{funktionerne kaldes med. Som det ses i tabel B.17 fejler funktionen expandTerms(), hvis den kaldes med et array, der kun indeholder elementet null, der mangler med andre ord en test for null {vrdier i det ing aende arrray. Funktionen expandTerms() fejler ligeledes hvis den kaldes med array indholdende et termid, der ikke eksisterer i databasen, der mangler s aledes ogs a test for om termid'erne i det indg aende array eksisterer i databasen. Omvendt er alle elementer i det indg aende array baseret p a foresprgsler i databasen, s a ikke{eksisterende termid'er er usandsynlige og vores databaseskema tillader ikke null {vrdier for s a vidt ang ar termid.
Afprvning af getQueryTermid
87
Data{input
Output
termIdArray(0) := null; expandTermArrayWithSynonyms(termIdArray); expandTermArrayWithOntology(termIdArray); termIdArray(0) := 1000000; expandTermArrayWithSynonyms(termIdArray); expandTermArrayWithOntology(termIdArray);
Forventet
No SynoArray to print No OntoArray to print
Ja
No SynoArray to print No OntoArray to print
Ja
termIdArray(0) := null; expandTerms(termIdArray);
The following error has occurred: ORA-01403: ingen data er fundet
Nej
termIdArray(0) := 1000000; expandTerms(termIdArray);
The following error has occurred: ORA-01403: ingen data er fundet
Nej
Tabel
B.17: Afprvning af expandTermArrayWithSynonyms(), expandTermArrayWithOntology() og expandTerms().
Data{input open theCursor for SELECT * FROM description WHERE descriptionid = null; theArray := GETQUERYTERMID(theCursor); open theCursor for SELECT * FROM description WHERE descriptionid = 1000000; theArray := GETQUERYTERMID(theCursor);
Output
Forventet
Nothing to print
Ja
Nothing to print
Ja
Tabel B.18: Afprvning af getQueryTermId().
Bilag C
Uddata fra eksempelforesprgsel Flgende de ti frste svar fra en sgning p a stningen \Mange senile bor i lejligheder med mange trapper". Finished evaluating: mange senile bor lejligheder mange trapper. Result of Query: {mange senile bor lejligheder mange trapper.} With minimum Weight .45 -----------------------------------------------------------DescriptionId: 1786 SentenceId: 1834 DocId: 166 ************************************************************* venter p a ny bolig Folk m a vente mellem tre og ni ar p a en lejlighed 330.000 ************************************************************* NounPhrase Term Weight: 1 NounPhrase Synonym Weight: .25 NounPhrase Ontological Weight: .5 Verb Term Weight: 0 Verb Synonym Weight: 0 Verb Ontological Weight: 0 Total Weight: .87 -----------------------------------------------------------DescriptionId: 1790 SentenceId: 1838 DocId: 166 ************************************************************* sger bolig dvs. de ville flytte, hvis de kunne f a den lejlighed, de sger. ************************************************************* NounPhrase Term Weight: 1 NounPhrase Synonym Weight: .25 NounPhrase Ontological Weight: .5 Verb Term Weight: 0
88
89 Verb Synonym Weight: 0 Verb Ontological Weight: 0 Total Weight: .87 -----------------------------------------------------------DescriptionId: 83280 SentenceId: 61038 DocId: 1565 ************************************************************* Plan for 58 boliger tt ved bycentrum Sakskbing - Sakskbing Boligselskab fik i g ar kommunens "bl a stempel" for en plan, der skal sikre Sakskbing 58 nye lejligheder samt 4-6 ungdomsboliger tt ved bycentrum. ************************************************************* NounPhrase Term Weight: 1 NounPhrase Synonym Weight: .25 NounPhrase Ontological Weight: .5 Verb Term Weight: 0 Verb Synonym Weight: 0 Verb Ontological Weight: 0 Total Weight: .87 -----------------------------------------------------------DescriptionId: 76392 SentenceId: 54150 DocId: 1242 ************************************************************* SVENDBORG: Det er lidt af et under, at b ade Lenor Wilsted, 84, og Thomas Jensen, 18, i dag kan sta neden for den bygning, hvor de begge to en marts-nat var ved at miste livet: Et kmpe-gasbrag havde raseret tre lejligheder, og Lenor Wilsted l a begravet under en stendynge i resterne af sin bolig. ************************************************************* NounPhrase Term Weight: 1 NounPhrase Synonym Weight: .25 NounPhrase Ontological Weight: .5 Verb Term Weight: 0 Verb Synonym Weight: 0 Verb Ontological Weight: 0 Total Weight: .87 -----------------------------------------------------------DescriptionId: 90904 SentenceId: 68662 DocId: 1867 ************************************************************* Hver tredie over 70 ar bor darligt Alt for mange gamle bor i boliger med mange trapper og uden wc. ************************************************************* NounPhrase Term Weight: 1 NounPhrase Synonym Weight: .25 NounPhrase Ontological Weight: .5 Verb Term Weight: 0 Verb Synonym Weight: 0 Verb Ontological Weight: 0 Total Weight: .87 ------------------------------------------------------------
90
BILAG C. UDDATA FRA EKSEMPELFORESPRGSEL DescriptionId: 90917 SentenceId: 68675 DocId: 1867 ************************************************************* De boliger, der evt. har wc i lejligheden, har til gengld ikke kkken eller radiatorvarme. ************************************************************* NounPhrase Term Weight: 1 NounPhrase Synonym Weight: .25 NounPhrase Ontological Weight: .5 Verb Term Weight: 0 Verb Synonym Weight: 0 Verb Ontological Weight: 0 Total Weight: .87 -----------------------------------------------------------DescriptionId: 90921 SentenceId: 68679 DocId: 1867 ************************************************************* Men de har s a til gengld trapper til eller inden i boligen. ************************************************************* NounPhrase Term Weight: .66 NounPhrase Synonym Weight: .25 NounPhrase Ontological Weight: .5 Verb Term Weight: 0 Verb Synonym Weight: 0 Verb Ontological Weight: 0 Total Weight: .7 -----------------------------------------------------------DescriptionId: 102219 SentenceId: 79977 DocId: 2173 ************************************************************* - Nu bor Sussie i en beskyttet bolig p a Amager, men hun bliver med mellemrum indlagt for at gennemg a nye operationer. ************************************************************* NounPhrase Term Weight: .5 NounPhrase Synonym Weight: .25 NounPhrase Ontological Weight: .5 Verb Term Weight: 0 Verb Synonym Weight: 0 Verb Ontological Weight: 0 Total Weight: .62 -----------------------------------------------------------DescriptionId: 125151 SentenceId: 102909 DocId: 2436 ************************************************************* Bor man i egen bolig, har budgetkontoen den fordel ekstra, at man kan lave aftale om ret til overtrk ved terminsbetalingen. ************************************************************* NounPhrase Term Weight: .5 NounPhrase Synonym Weight: .25 NounPhrase Ontological Weight: .5
91 Verb Term Weight: 0 Verb Synonym Weight: 0 Verb Ontological Weight: 0 Total Weight: .62 -----------------------------------------------------------DescriptionId: 104144 SentenceId: 81902 DocId: 2219 ************************************************************* P a et tidspunkt havde Herreys en lejlighed p a Frederiksberg. ************************************************************* NounPhrase Term Weight: 1 NounPhrase Synonym Weight: .25 NounPhrase Ontological Weight: 0 Verb Term Weight: 0 Verb Synonym Weight: 0 Verb Ontological Weight: 0 Total Weight: .62 -----------------------------------------------------------DescriptionId: 127584 SentenceId: 105342 DocId: 2469 ************************************************************* Endnu er det ikke afgjort, hvor mange kvadratmeter kontor og bolig, der kommer ud af det. ************************************************************* NounPhrase Term Weight: .5 NounPhrase Synonym Weight: .25 NounPhrase Ontological Weight: .5 Verb Term Weight: 0 Verb Synonym Weight: 0 Verb Ontological Weight: 0 Total Weight: .62 ...
Bilag D
Erklring af tabeller CREATE TABLE DOCUMENT ( docId INTEGER NOT NULL, URI VARCHAR2 (512), content CLOB, PRIMARY KEY (docId) ) CREATE TABLE TERM ( termId INTEGER NOT NULL, lemma VARCHAR2 (100) NOT NULL, PRIMARY KEY (termId, lemma) ) CREATE TABLE HASGRAMCATS ( termId INTEGER NOT NULL, gramCatId INTEGER NOT NULL, PRIMARY KEY (gramCatId, termId), FOREIGN KEY (gramCatId) REFERENCES GRAMCAT (gramCatId) ) CREATE TABLE SYNONYMS ( termId1 INTEGER NOT NULL, termId2 INTEGER NOT NULL, PRIMARY KEY (termId1, termId2) ) CREATE TABLE ISA ( termId1 INTEGER NOT NULL, termId2 INTEGER NOT NULL, PRIMARY KEY (termId1, termId2) ) CREATE TABLE GRAMCAT ( gramCatId NUMBER ( 38 ) NOT NULL, category VARCHAR2 (64), PRIMARY KEY (gramCatId)
92
93 ) CREATE TABLE DOCUMENTSENTENCE ( sentenceId INTEGER NOT NULL, docId INTEGER, sentence VARCHAR2 (1024), position INTEGER, PRIMARY KEY (sentenceId), FOREIGN KEY (docId) REFERENCES DOCUMENT(docId) ) CREATE TABLE DESCRIPTION ( descriptionId INTEGER NOT NULL, sentenceId INTEGER, weight NUMBER, PRIMARY KEY (descriptionId), FOREIGN KEY (sentenceId) REFERENCES DOCUMENTSENTENCE (sentenceId) ) CREATE TABLE NOUNPHRASE ( nounphraseId INTEGER NOT NULL, PRIMARY KEY (nounphraseId) ) CREATE TABLE NOUNPHRASESET ( nounphraseID INTEGER NOT NULL, descriptionID INTEGER NOT NULL, PRIMARY KEY (nounphraseId, descriptionId), FOREIGN KEY (nounphraseId) REFERENCES NOUNPHRASE (nounphraseId), FOREIGN KEY (descriptionId) REFERENCES DESCRIPTION (descriptionId) ) CREATE TABLE VERBSET ( descriptionId INTEGER NOT NULL, termId INTEGER NOT NULL, PRIMARY KEY (termId, descriptionId), FOREIGN KEY (descriptionId) REFERENCES DESCRIPTION (descriptionId) ) CREATE TABLE TERMSET ( nounphraseId INTEGER NOT NULL, termId INTEGER NOT NULL, PRIMARY KEY (termId, nounphraseId), FOREIGN KEY (nounphraseId) REFERENCES NOUNPHRASE (nounphraseId) )
Bilag E
Kildetekst E.1 Eksempelforesprgsel Kildetekst len indeholder den funktion der er anvendes til sgning i systemet. Funktionen returnerer matchende stninger fra databasen, med en detaljeret beskrivelse af hvordan den opn aede vgt er opn aet. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
runquery.sql CREATE OR REPLACE PROCEDURE RunQuery( Query in OUT VARCHAR2, MinWeight IN NUMBER DEFAULT 0.5 ) AS BEGIN DECLARE theAnswerCur OntoTypes.AnswerCursor; theAnswerRow OntoTypes.AnswerRow; linestart PLS_Integer; offset PLS_Integer; theSentence VARCHAR2(1000); BEGIN queryevaluator.evaluate(Query); OPEN theAnswerCur for SELECT description.descriptionid AS descriptionid, documentsentence.sentenceid AS sentenceid, documentsentence.docid AS docid, documentsentence.sentence AS sentence, x.NPTWeight AS NPTWeight, x.NPSWeight AS NPSWeight, x.NPOWeight AS NPOWeight, x.VerbTWeight AS VerbTWeight, x.VerbSWeight AS VerbSWeight, x.VerbOWeight AS VerbOWeight, x.TotalWeight AS TotalWeight FROM description, documentsentence, ( SELECT y.DocDescId, y.NPTWeight, y.NPSWeight, y.NPOWeight, y.VerbTWeight,
94
E.1. EKSEMPELFORESPRGSEL 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
95
y.VerbSWeight, y.VerbOWeight, y.TotalWeight FROM ( SELECT * FROM ( SELECT DocDescId, NPTWeight, NPSWeight, NPOWeight, VerbTWeight, VerbSWeight, VerbOWeight, (NPTWeight + NPSWeight + NPOWeight + VerbTWeight + VerbSWeight + VerbOWeight ) / 2 AS TotalWeight FROM test_empiri ) WHERE TotalWeight >= MinWeight ) y
) x WHERE description.SENTENCEID = documentsentence.SENTENCEID AND description.DESCRIPTIONID = x.docdescid ORDER BY x.totalweight DESC; DBMS_OUTPUT.PUT_LINE('Result of Query: {' || Query || '} With minimum Weight ' || MinWeight ); DBMS_OUTPUT.PUT_LINE(''); LOOP FETCH theAnswerCur INTO theAnswerRow; EXIT WHEN theAnswerCur%NOTFOUND; DBMS_OUTPUT.PUT_LINE( '------------------------------------------------------------' ); DBMS_OUTPUT.PUT_LINE('DescriptionId: ' || theAnswerRow.descriptionid ); DBMS_OUTPUT.PUT_LINE('SentenceId: ' || theAnswerRow.sentenceid ); DBMS_OUTPUT.PUT_LINE('DocId: ' || theAnswerRow.docid ); DBMS_OUTPUT.PUT_LINE( '*************************************************************' ); linestart := 1; offset := 70; LOOP
BILAG E. KILDETEKST
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
DBMS_OUTPUT.PUT_LINE( SUBSTR(theAnswerRow.sentence, linestart, offset) ); linestart := linestart + offset; EXIT WHEN linestart > LENGTH(theAnswerRow.sentence); END LOOP; DBMS_OUTPUT.PUT_LINE( '*************************************************************' ); DBMS_OUTPUT.PUT_LINE('NounPhrase Term Weight: ' || TRUNC(theAnswerRow.NPTWeight,2) ); DBMS_OUTPUT.PUT_LINE('NounPhrase Synonym Weight: ' || trunc(theAnswerRow.NPSWeight,2) ); DBMS_OUTPUT.PUT_LINE('NounPhrase Ontological Weight: ' || TRUNC(theAnswerRow.NPOWeight,2) ); DBMS_OUTPUT.PUT_LINE('Verb Term Weight: ' || TRUNC(theAnswerRow.VerbTWeight,2) ); DBMS_OUTPUT.PUT_LINE('Verb Synonym Weight: ' || TRUNC(theAnswerRow.VerbSWeight,2) ); DBMS_OUTPUT.PUT_LINE('Verb Ontological Weight: ' || TRUNC(theAnswerRow.VerbOWeight,2) ); DBMS_OUTPUT.PUT_LINE('Total Weight: ' || TRUNC(theAnswerRow.TotalWeight,2 ); END LOOP; DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE('End of results'); CLOSE theAnswerCur; END; /
END;
E.2 Typer, erklring Kildetekst len indeholder en samlet erklring af de mest benyttede typer og subtyper. 1 2 3 4 5
ontotypes.pks CREATE OR REPLACE PACKAGE OntoTypes AS -- The different basic types used throughout the system SUBTYPE docId IS Document.docId%TYPE;
E.2. TYPER, ERKLRING 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
SUBTYPE SUBTYPE SUBTYPE SUBTYPE SUBTYPE SUBTYPE SUBTYPE SUBTYPE SUBTYPE SUBTYPE SUBTYPE
sentenceId IS DocumentSentence.sentenceId%TYPE; sentence IS DocumentSentence.sentence%TYPE; sentencePosition IS DocumentSentence.position%TYPE; content IS Document.content%TYPE; gramCatId IS GramCat.gramCatId%TYPE; category IS GramCat.category%TYPE; termId IS Term.termId%TYPE; lemma IS Term.lemma%TYPE; nounPhraseSetId IS NounPhraseSet.nounPhraseId%TYPE; descriptionId IS Description.descriptionId%TYPE; termWeight IS NUMBER;
-- Complex types TYPE taggedTerm IS RECORD (atom lemma, tag GramCatId, id termId); TYPE taggedTermArray IS TABLE OF taggedTerm INDEX BY BINARY_INTEGER; TYPE gramCatArray IS TABLE OF gramCatId INDEX BY BINARY_INTEGER; TYPE termIdArray IS TABLE OF termId INDEX BY BINARY_INTEGER; TYPE lemmaArray IS TABLE OF lemma INDEX BY BINARY_INTEGER; TYPE descriptionIdArray IS TABLE OF descriptionId INDEX BY BINARY_INTEGER; TYPE WeightRec IS RECORD ( NPTWeight NUMBER, NPSWeight NUMBER, NPOWeight NUMBER, VerbTWeight NUMBER, VerbSWeight NUMBER, VerbOWeight NUMBER ); TYPE AnswerRow is RECORD ( descriptionid description.descriptionid%TYPE, sentenceid documentsentence.sentenceid%TYPE, docid documentsentence.docid%TYPE, sentence documentsentence.sentence%TYPE, NPTWeight NUMBER, NPSWeight NUMBER, NPOWeight NUMBER, VerbTWeight NUMBER, VerbSWeight NUMBER, VerbOWeight NUMBER, totalweight NUMBER ); -- The cursor- and row-types used throughout the system SUBTYPE DescriptionRow IS Description%ROWTYPE; SUBTYPE DocumentSentenceRow IS DocumentSentence%ROWTYPE; SUBTYPE DocumentRow IS Document%ROWTYPE; SUBTYPE TermRow IS Term%ROWTYPE; SUBTYPE GramCatRow IS GramCat%ROWTYPE; TYPE TYPE TYPE TYPE TYPE TYPE TYPE
DescriptionCursor IS REF CURSOR RETURN DescriptionRow; DescriptionIdCursor IS REF CURSOR; DocumentCursor IS REF CURSOR RETURN DocumentRow; DocumentSentenceCursor IS REF CURSOR RETURN DocumentSentenceRow; TermCursor IS REF CURSOR RETURN TermRow; GramCatCursor IS REF CURSOR RETURN GramCatRow; AnswerCursor IS REF CURSOR RETURN AnswerRow;
END OntoTypes; /
97
BILAG E. KILDETEKST
98
E.3 Ordbog, erklring Kildetekst len indeholder de nitionen af metoder til opslag i den samlede ordbog. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
dictionary.pks CREATE OR REPLACE PACKAGE Dictionary AS -- Checks if a term is a abbreviation FUNCTION isAbbreviation( word IN OntoTypes.lemma ) RETURN BOOLEAN; -- Check grammatical classes of term (Cursor version) FUNCTION getGramCats( theWord IN OntoTypes.lemma ) RETURN OntoTypes.GramCatCursor; END Dictionary; /
E.4 Ordbog, implementation Kildetekst len indeholder implementationen af metoder til opslag i den samlede ordbog. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
dictionary.pkb CREATE OR REPLACE PACKAGE BODY Dictionary AS -- Checks if a term is a abbreviation FUNCTION isAbbreviation( word IN OntoTypes.lemma ) RETURN BOOLEAN AS BEGIN DECLARE isAbbre BOOLEAN; gramcatIdCount NUMBER; BEGIN --If word is an abreviation, it has gramcatId 16 SELECT COUNT(gramcat.gramcatId) INTO gramcatIdCount FROM term, hasGramCats, gramcat WHERE term.lemma = word AND term.TermId = hasGramCats.termId AND hasGramCats.gramCatId = gramcat.gramcatId AND gramcat.gramcatid = 16; IF gramcatIdCount = 1 THEN isAbbre := TRUE; RETURN isAbbre; ELSE isAbbre := FALSE; RETURN isAbbre; END IF; END; END;
E.5. TAGGER, ERKLRING 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
99
-- Check grammatical classes of term FUNCTION getGramCats( theWord IN OntoTypes.lemma ) RETURN OntoTypes.GramCatCursor AS BEGIN DECLARE theCursor OntoTypes.GramCatCursor; BEGIN -- Open cursor to all relevant grammatical categories OPEN theCursor FOR SELECT gramcat.* FROM term, hasGramCats, gramcat WHERE gramcat.gramCatId = hasGramCats.gramCatId AND hasGramCats.termId = term.termId AND term.lemma = theWord; -- Return the resultset RETURN theCursor; END; END; END Dictionary; /
E.5 Tagger, erklring Kildetekst len indeholder de nition af metoder til tagging af stninger. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
tagger.pks CREATE OR REPLACE PACKAGE Tagger AS -- Takes an sentence and tags it with appropriate word classes -- returns an array of words and class if identified FUNCTION tagSentence( senId IN OntoTypes.sentenceId ) RETURN OntoTypes.taggedTermArray; -- Tokenizes a clob into array of term, splits on space -- 11/07 separator is changed from varchar2 to char FUNCTION tokenize( string IN OntoTypes.sentence, separator IN char := ' ' ) RETURN OntoTypes.lemmaArray; -- Takes two strings and remove all chars that appears in string2 from string1 FUNCTION removeCharsFromString( string IN varchar2, removeTheseChars IN varchar2 ) RETURN Varchar2; -- Takes two strings and remove all chars that appears in string2 from string1 -- Castle, 17.07.2000, uses built-in substring function FUNCTION removeCharsFromString2( string IN varchar2, removeTheseChars IN varchar2 ) RETURN Varchar2; END Tagger;
BILAG E. KILDETEKST
100 29 30
/
E.6 Tagger, implementation Kildetekst len indeholder implementationen af metoder til tagging af stninger. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
tagger.pkb CREATE OR REPLACE PACKAGE BODY Tagger AS -- Takes an sentence and tags it with appropriate word classes -- returns an array of words and grammatical category if identified FUNCTION tagSentence( senId IN OntoTypes.sentenceId ) RETURN OntoTypes.taggedTermArray AS BEGIN DECLARE nounGramCatId OntoTypes.gramCatId; resolvedGramCatId OntoTypes.gramCatId; i PLS_INTEGER; isCandidate BOOLEAN; foundNoun BOOLEAN; untaggedSentence OntoTypes.sentence; taggedWord OntoTypes.taggedTerm; unTaggedWordArray OntoTypes.lemmaArray; taggedWordArray OntoTypes.taggedTermArray; gramCatCur OntoTypes.GramCatCursor; gramCatRow OntoTypes.GramCatRow; BEGIN -- Retrieve sentence from table SELECT sentence INTO untaggedSentence FROM documentSentence WHERE sentenceId = senId; -- Strip specials and tokenize sentence untaggedSentence := removeCharsFromString2(untaggedSentence, '()",<>!:;'); unTaggedWordArray := Tagger.tokenize(LOWER(untaggedSentence)); -- Save the noun grammatical id for future reference, -- will throw exception if not found SELECT gramCat.gramCatId INTO nounGramCatId FROM gramCat WHERE gramCat.CATEGORY = 'Substantiv'; -- Strip period from last word of sentence IF unTaggedWordArray.COUNT > 0 THEN unTaggedWordArray(unTaggedWordArray.LAST) := removeCharsFromString2( unTaggedWordArray(unTaggedWordArray.LAST), '.' ); END IF; -- PASS ONE: For all words in sentence FOR i IN unTaggedWordArray.FIRST..unTaggedWordArray.LAST LOOP
E.6. TAGGER, IMPLEMENTATION 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
-- Get current word taggedWord.atom := unTaggedWordArray(i); -- Check applicable grammatical categories gramCatCur := Dictionary.getGramCats(taggedWord.atom); -- Fetch the available categories FETCH gramCatCur INTO gramCatRow; -- If there is only one applicable category... IF gramCatCur%ROWCOUNT = 1 THEN -- ...assign it to the word... taggedWord.tag := gramCatRow.gramCatId; -- ...and fetch the term id... -- TODO: Remove min() when data contains no duplicates SELECT MIN(termId) INTO taggedWord.id FROM Term WHERE lemma = taggedWord.atom; -- Global lowercase of sentence ELSE -- ...else mark as unknown taggedWord.tag := NULL; END IF; -- Insert the current word into the tagged word array taggedWordArray(taggedWordArray.COUNT+1) := taggedWord; -- Close the gramCat cursor CLOSE gramCatCur; END LOOP; -- Pass one -- PASS TWO: For all words in sentence FOR i IN taggedWordArray.FIRST..taggedWordArray.LAST LOOP -- Assign current tagged word taggedWord := taggedWordArray(i); -- If the grammatical category is unknown then try resolve it IF taggedWord.tag IS NULL THEN -- The word is a candidate for resolvation, if -- one of the neighbouring words is a noun isCandidate := FALSE; -- Check that trailing word is a noun IF i < taggedWordArray.LAST THEN IF taggedWordArray(i+1).tag = nounGramCatId THEN isCandidate := TRUE; END IF; END IF; -- Check that prefixing word is a noun IF i > taggedWordArray.FIRST THEN IF taggedWordArray(i-1).tag = nounGramCatId THEN isCandidate := TRUE; END IF;
101
BILAG E. KILDETEKST
102 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
END IF; -- If the word is a candidate look up grammatical -- categories excluding noun IF isCandidate THEN -- Check applicable grammatical categories gramCatCur := Dictionary.getGramCats(taggedWord.atom); -- Initialize used variables foundNoun := FALSE; resolvedGramCatId := NULL; -- There must be only two choices... IF gramCatCur%ROWCOUNT = 2 THEN LOOP -- Exit loop wehen there are no more available -- grammatical categories EXIT WHEN gramCatCur%NOTFOUND; -- Get current row FETCH gramCatCur INTO gramCatRow; -- ...and one has to be noun... IF gramCatRow.gramCatId = nounGramCatId THEN foundNoun := TRUE; END IF; -- ...the other a non-noun IF gramCatRow.gramCatId <> nounGramCatId THEN resolvedGramCatId := gramCatRow.gramCatId; END IF; END LOOP; -- If the grammatical category was succesfully resolved -- update the entry in the tagged word array IF foundNoun AND resolvedGramCatId IS NOT NULL THEN -- Fetch the term id -- TODO: Remove min() when data contains no duplicates SELECT MIN(termId) INTO taggedWord.id FROM Term WHERE lemma = taggedWord.atom; -- Global lower taggedWord.tag := resolvedGramCatId; taggedWordArray(i) := taggedWord; END IF; END IF; -- Close the cursor CLOSE gramCatCur; END IF; END IF; END LOOP; -- Pass two -- Return tagged sentence RETURN taggedWordArray; END; END; -- Tokenizes a clob into array of term, splits default on space. FUNCTION tokenize( string IN OntoTypes.sentence, separator IN char := ' '
E.6. TAGGER, IMPLEMENTATION 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236
) RETURN OntoTypes.lemmaArray AS BEGIN DECLARE pointer NUMBER; position NUMBER; token OntoTypes.lemma; trimmedString VARCHAR2(4000); tokenArray Ontotypes.lemmaArray; i PLS_INTEGER; BEGIN pointer := 1; i := 1; trimmedString := LTRIM(string, separator); trimmedString := RTRIM(trimmedString, separator); --If the length is 0 we can return a emty tokenArray IF LENGTH(string) = 0 THEN RETURN tokenArray; END IF; LOOP position := INSTR(trimmedString, separator, pointer, 1); if position != 0 THEN token := SUBSTR(trimmedString, pointer, (position - pointer)); pointer := position + 1; --Makes sure that extra whitespaces are skipped WHILE SUBSTR(trimmedString, pointer, 1) = separator LOOP pointer := pointer + 1; END LOOP; tokenArray(i) := token; ELSE IF pointer <= LENGTH(trimmedString) then token := SUBSTR(trimmedString, pointer, LENGTH(trimmedString) - pointer + 1 ); tokenArray(i) := token; END IF; EXIT; END IF; i := i + 1; END LOOP; RETURN tokenArray; END; END; FUNCTION removeCharsFromString( string IN VARCHAR2, removeTheseChars IN varchar2 ) RETURN VARCHAR2 AS BEGIN DECLARE lengthString NUMBER; lengthRTC NUMBER; --RTC is abbr. for removeTheseChars cleanedString VARCHAR2(4000); stringPointer NUMBER;
103
BILAG E. KILDETEKST
104 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298
rtcPointer NUMBER; isFound BOOLEAN; BEGIN --Get the length's og the two inputstrings lengthString := LENGTH(string); lengthRTC := LENGTH(removeTheseChars); --Loop through string and check FOR stringPointer in 1..lengthString LOOP isFound := FALSE; --Loop through rtc-string FOR rtcPointer in 1..lengthRTC LOOP --If we found it set isFound to true if SUBSTR(string, stringPointer, 1) = SUBSTR(removeTheseChars, rtcPointer, 1) Then isFound := TRUE; END IF; END LOOP; --If we didnt find the char i RTC then its ok IF NOT isFound Then cleanedString := CONCAT( cleanedString, SUBSTR(string, stringPointer, 1) ); END IF; END LOOP; --Return the cleandeString RETURN cleanedString; END; END; FUNCTION removeCharsFromString2( string IN VARCHAR2, removeTheseChars IN VARCHAR2 )RETURN VARCHAR2 AS BEGIN DECLARE lengthString NUMBER; lengthRTC NUMBER; --RTC is abbr. for removeTheseChars cleanedString VARCHAR2(4000); stringPointer NUMBER; rtcPointer NUMBER; isFound BOOLEAN; BEGIN -- Copy the in-string cleanedString := string; --Get the length of RTC string lengthRTC := LENGTH(removeTheseChars); --Loop through rtc-string FOR rtcPointer IN 1..lengthRTC LOOP cleanedString := REPLACE(cleanedString, SUBSTR(removeTheseChars, rtcPointer, 1) ); END LOOP;
E.7. BESKRIVELSESGENERATOR, ERKLRING 299 300 301 302 303 304 305 306 307 308
105
--Return the cleandeString RETURN cleanedString; END; END; END Tagger; /
E.7 Beskrivelsesgenerator, erklring Kildetekst len indeholder de nitionen af metoder til beskrivelsesgenerering. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
descriptiongenerator.pks CREATE OR REPLACE PACKAGE DescriptionGenerator AS -- Generates a description of a document, returning -- a cursor to the resulting descriptions FUNCTION generateDescription( documentId IN OntoTypes.docId ) RETURN OntoTypes.DescriptionCursor; -- Splits a document into sentences and -- returns a cursor to the resulting sentences FUNCTION doSentence( thisDocId IN OntoTypes.docId ) RETURN OntoTypes.DocumentSentenceCursor; PROCEDURE InsertDocumentSentence ( docId IN OntoTypes.docId, sentencePosition IN OntoTypes.sentencePosition, sentence IN OntoTypes.sentence ); -- Tokenizes a clob into array of term, splits default on space -- 11/07 separator is changed from varchar2 to char FUNCTION tokenize( string IN OUT CLOB, separator IN CHAR := ' ' ) RETURN OntoTypes.lemmaArray; -- Takes an sentenceId and returns a description -- id for the given sentence Id FUNCTION createDescription( currentSentenceId IN OntoTypes.SentenceId ) RETURN OntoTypes.DescriptionID; -- Takes a description id, a term id and aposition and inserts -- them as a tuple into table verbset PROCEDURE insertVerb( currentDescId IN OntoTypes.DescriptionId, currentTermId IN OntoTypes.termId ); -- Find and stores noun phrases, returns the id of the -- created description FUNCTION findAndStoreNP(
BILAG E. KILDETEKST
106 45 46 47 48 49 50 51 52 53 54 55 56 57 58
theSentence IN OntoTypes.sentenceId, theTerms IN OntoTypes.taggedTermArray ) RETURN OntoTypes.descriptionId; -- Takes an descriptionId and an array with termId's and -- Inserts them into the relevant tables PROCEDURE insertNP( currentDescId IN OntoTypes.DescriptionId, arrayOfTermId IN OntoTypes.TermIdArray ); END DescriptionGenerator; /
E.8 Beskrivelsesgenerator, implementation Kildetekst len indeholder implementationen af metoder til beskrivelsesgenerering. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
descriptiongenerator.pkb CREATE OR REPLACE PACKAGE BODY DescriptionGenerator AS -- Generates a description of a document, returning -- a cursor to the resulting descriptions FUNCTION generateDescription(documentId IN OntoTypes.docId) RETURN OntoTypes.DescriptionCursor AS BEGIN declare countDescriptions PLS_INTEGER; i PLS_INTEGER; test BINARY_INTEGER; taggedTermArray OntoTypes.taggedTermArray; descId OntoTypes.descriptionId; senCur OntoTypes.DocumentSentenceCursor; descCur OntoTypes.DescriptionCursor; senRow OntoTypes.documentSentenceRow; BEGIN -- Initialize countDescriptions := 0; -- Select the sentences related to the document id senCur := doSentence(documentId); -- Loop through all retrieved document sentence id's LOOP -- Make a local copy of the current document sentence id FETCH senCur INTO senRow; -- Exit if there are no more document sentence id's EXIT WHEN senCur%NOTFOUND; -- Tag sentence taggedTermArray := Tagger.tagSentence(senRow.sentenceId); -- Find and store noun phrases and verbs, then store them descId :=
E.8. BESKRIVELSESGENERATOR, IMPLEMENTATION 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
107
DescriptionGenerator.findAndStoreNP(senRow.sentenceId, taggedTermArray); END LOOP; CLOSE senCur; OPEN descCur FOR SELECT Description.* from Description, DocumentSentence WHERE Description.sentenceId = DocumentSentence.sentenceId AND DocumentSentence.docId = documentId; RETURN descCur; end; END; -- End generateDescription -- Splits a document into sentences and -- returns a cursor to the resulting sentences FUNCTION doSentence(thisDocId IN OntoTypes.docId) RETURN OntoTypes.DocumentSentenceCursor AS BEGIN DECLARE textClob Ontotypes.content; periodPosition NUMBER; i PLS_INTEGER; sentencePosition OntoTypes.sentencePosition; currentToken OntoTypes.lemma; currentSentence OntoTypes.sentence; lemmaArray OntoTypes.lemmaArray; sentenceCursor OntoTypes.DocumentSentenceCursor; abreviation BOOLEAN; BEGIN currentSentence := ''; i := 1; sentencePosition := 1; SELECT Document.content INTO textClob FROM Document WHERE Document.docId = thisDocId FOR UPDATE; lemmaArray := tokenize(textClob); FOR i IN 1..lemmaArray.count LOOP -- Mapping lemmaArray to local value. currentToken := lemmaArray(i); --Looks for periods('.') periodPosition := INSTR(currentToken, '.', 1, 1); --Its a regular word IF periodPosition = 0 THEN --Add to the currentSentence currentSentence := currentSentence||' '||currentToken; ELSE --Is it an abbreviation? abreviation := Dictionary.ISABBREVIATION(currentToken);
BILAG E. KILDETEKST
108 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
--currentToken is an abbreviation, add it to currentSentence. IF abreviation = TRUE THEN currentSentence := currentSentence||' '||currentToken; ELSE --Its an period, add it to sentence and insert the sentence. --Add to the currentSentence currentSentence := currentSentence||' '||currentToken; insertDocumentSentence( thisDocId, SentencePosition, currentSentence ); currentSentence := ''; sentencePosition := sentencePosition + 1; END IF; END IF; END LOOP; --sentenceCursor that returns a row from documentSentence OPEN sentenceCursor FOR SELECT DocumentSentence.* FROM Document, DocumentSentence WHERE document.docId = thisDocId AND Document.docId = DocumentSentence.docId; RETURN sentenceCursor; END; END; PROCEDURE insertDocumentSentence (docId IN OntoTypes.docId, sentencePosition IN OntoTypes.sentencePosition, sentence IN OntoTypes.sentence) AS BEGIN DECLARE sentenceId OntoTypes.SentenceId; Begin SELECT DocumentSentence_sequence.NEXTVAL INTO sentenceId FROM DUAL; INSERT INTO documentSentence(sentenceId, docId, sentence) VALUES(sentenceId, docId, sentence); END; END; -- Takes a sentence and returns a cursor to the resulting descriptions -- Tokenizes a clob into array of term, splits default on space FUNCTION tokenize( string IN OUT CLOB, separator IN char:= ' ' ) RETURN Ontotypes.lemmaArray AS BEGIN DECLARE pointer NUMBER; position NUMBER; length NUMBER; beginning NUMBER; token OntoTypes.lemma; tokenArray Ontotypes.lemmaArray; i PLS_INTEGER; BEGIN LENGTH := DBMS_LOB.getlength(string); beginning := 1;
E.8. BESKRIVELSESGENERATOR, IMPLEMENTATION 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224
109
--Doing a virtual Ltrim and normal Rtrim of whitespaces --by increasing beginning or shortening length WHILE DBMS_LOB.SUBSTR(string, 1, LENGTH) = separator LOOP length := length - 1; END LOOP; DBMS_lob.trim(string, LENGTH); -- Return if string has zero length IF DBMS_LOB.getLength(string) = 0 THEN RETURN tokenArray; END IF; -- Strip prefixed spaces While DBMS_LOB.SUBSTR(string, 1, beginning) = separator LOOP beginning := beginning + 1; END LOOP; pointer := beginning; i := 1; loop position := DBMS_LOB.INSTR(string, separator, pointer, 1); if position != 0 then token := DBMS_LOB.substr(string, (position - pointer), pointer); tokenArray(i) := token; pointer := position + 1; --Makes sure that extra whitespaces are skipped While DBMS_LOB.substr(string, 1, pointer) = separator Loop pointer := pointer + 1; End Loop; else if pointer <= length then token := DBMS_LOB.substr(string, length - pointer + 1, pointer); tokenArray(i) := token; exit; end if; end if; i := i + 1; --Increase counter i. End loop; Return tokenArray; end; END; FUNCTION createDescription (currentSentenceId IN OntoTypes.SentenceId) RETURN OntoTypes.DescriptionID AS BEGIN DECLARE currentDescId OntoTypes.DescriptionID; BEGIN --Select the next description id Select description_id_sequence.NextVal into currentDescId From Dual; -- Insert a tuple into table description -- with sentenceId and currentdescId Insert Into Description(sentenceId, descriptionId) Values(currentSentenceId, currentDescId); --Return the decription id Return currentDescId; END;
BILAG E. KILDETEKST
110 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286
END; PROCEDURE insertVerb (currentDescId IN OntoTypes.DescriptionId, currentTermId IN OntoTypes.termId) AS BEGIN DECLARE --Nothing to declare i PLS_INTEGER; BEGIN --Insert a tuple into verbset -- TODO: remove position when table is changed BEGIN Insert Into verbset(descriptionId, termId) Values(currentDescId, currentTermId); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN i := -1; -- NOOP END; END; END; FUNCTION findAndStoreNP( theSentence IN OntoTypes.sentenceId, theTerms IN OntoTypes.taggedTermArray ) RETURN OntoTypes.descriptionId AS BEGIN DECLARE insertedUnits PLS_INTEGER; i PLS_INTEGER; curTerm PLS_INTEGER; firstAdj PLS_INTEGER; npIdList OntoTypes.termIdArray; adjGramCat OntoTypes.gramCatId; nounGramCat OntoTypes.gramCatId; verbGramCat OntoTypes.gramCatId; curDescriptionId OntoTypes.descriptionId; BEGIN -- Initialize insertedUnits := 0; -- No data has been inserted firstAdj := -1; -- There are no prefixed adjectives -- Get adjective id SELECT gramCatId INTO adjGramCat from gramCat WHERE category = 'Adjektiv'; -- Get verb id SELECT gramCatId INTO verbGramCat from gramCat WHERE category = 'Verbum'; -- Get noun id SELECT gramCatId INTO nounGramCat from gramCat WHERE category = 'Substantiv'; -- Prepare rollback
E.8. BESKRIVELSESGENERATOR, IMPLEMENTATION 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348
SAVEPOINT findAndStoreNP_SAVEPOINT; -- Create a new description curDescriptionId := createDescription(theSentence); -- Loop through words finding noun phrases and verbs FOR curTerm in theTerms.FIRST..theTerms.LAST LOOP -- Depending on the grammatical category IF theTerms(curTerm).tag = adjGramCat THEN -- ADJECTIVE -- Update reference to adjective if it is the first IF firstAdj = -1 THEN firstAdj := curTerm; END IF; ELSIF theTerms(curTerm).tag = verbGramCat THEN -- VERB -- Update unit count insertedUnits := insertedUnits+1; -- Add verb to description insertVerb(curDescriptionId, theTerms(curTerm).id); -- Reset reference to prefixed adjective firstAdj := -1; ELSIF theTerms(curTerm).tag = nounGramCat THEN -- NOUN -- Update unit count insertedUnits := insertedUnits+1; -- Add verb to description by collection all -- prefixed adjectives IF firstAdj = -1 THEN -- There are no prefixed adjectives the noun -- phrase consists only of a single noun npIdList(1) := theTerms(curTerm).id; ELSE -- There are prefixed adjectives, collec them FOR i IN firstAdj..curTerm LOOP npIdList(1+i-firstAdj) := theTerms(i).id; END LOOP; END IF; insertNP(curDescriptionId, npIdList); -- Reset noun phrase list npIdList.DELETE; -- Reset reference to prefixed adjective firstAdj := -1; ELSE -- OTHER GRAMCAT -- Reset reference to prefixed adjective firstAdj := -1; END IF; END LOOP; -- Ends word loop
111
BILAG E. KILDETEKST
112 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400
-- If nothing was inserted into description, rollback IF insertedUnits = 0 THEN ROLLBACK TO findAndStoreNP_SAVEPOINT; RETURN NULL; END IF; RETURN curDescriptionId; END; END; procedure insertNP (currentDescId IN OntoTypes.DescriptionId, arrayOfTermId IN OntoTypes.TermIdArray) AS BEGIN DECLARE i PLS_INTEGER; currentNounPhraseId number; BEGIN --Select the next nounphraseid from nounPhrase_id_sequence select nounPhrase_id_sequence.NEXTVAL into currentNounPhraseId From Dual; --Insert into nounPhrase Insert into NounPhrase(nounPhraseId) Values(currentNounPhraseId); --Insert into nounPhraseSet Insert into NounPhraseSet(descriptionId, nounPhraseId) Values(currentDescId, currentNounPhraseId); --Loop through the termid's and insert them into the relevan tables For i in 1..arrayOfTermId.COUNT Loop BEGIN --Insert into termset Insert Into termset(nounPhraseId, termId) Values(currentNounPhraseId, arrayOfTermId(i)); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN currentNounPhraseId := currentNounPhraseId; -- NOOP END; End Loop; END; END; END DescriptionGenerator; /
E.9 Dokumentindeksering, erklring Kildetekst len indeholder de nitionen af metoder til dokumentindeksering. 1 2
indexengine.pks CREATE OR REPLACE PACKAGE IndexEngine AS
E.10. DOKUMENTINDEKSERING, IMPLEMENTATION 3 4 5 6 7 8 9 10 11 12 13 14
113
-- Wrapper for whole package. Loops through all descriptions PROCEDURE indexDocument( docId IN OntoTypes.docId ); -- Index all available documents PROCEDURE indexAllDocuments; END IndexEngine; /
E.10 Dokumentindeksering, implementation Kildetekst len indeholder implementationen af metoder til dokumentindeksering. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
indexengine.pkb CREATE OR REPLACE PACKAGE BODY IndexEngine AS PROCEDURE indexDocument( docID IN Ontotypes.docId ) AS BEGIN DECLARE getDescriptionCursor Ontotypes.descriptionCursor; descRow Ontotypes.DescriptionRow; BEGIN --Get the descriptions from getDescription; getDescriptionCursor := DescriptionGenerator.generateDescription(docId); CLOSE getDescriptionCursor; END; END; PROCEDURE indexAllDocuments AS Begin Declare docCount NUMBER; docCursor Ontotypes.DocumentCursor; docRow Ontotypes.documentRow; BEGIN -- Initaialize vars docCount := 0; -- Debug: Display progress DBMS_OUTPUT.Put_Line('Processing documents... '); -- Find all documents OPEN docCursor FOR SELECT * FROM Document; -- DEBUG where docId > 1500 AND docId < 2000; LOOP
BILAG E. KILDETEKST
114 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
FETCH docCursor into docRow; EXIT WHEN docCursor%NOTFOUND; -- Update counter docCount := docCount + 1; -- Index the document indexEngine.indexDocument(docRow.docId); -- Commit COMMIT; SET TRANSACTION USE ROLLBACK SEGMENT RB_ONTO; END LOOP; CLOSE docCursor; -- Debug: Display progress DBMS_OUTPUT.Put_Line('Done indexing '||docCount||' documents.'); END; END; END IndexEngine; /
E.11 Dokumentsammenligning, erklring Kildetekst len indeholder de nitionen af metoder til beskrivelsesevaluering. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
queryevaluator.pks CREATE OR REPLACE PACKAGE QueryEvaluator AS -- This function takes a query as an argument evaluates it PROCEDURE evaluate( query IN OUT Varchar2 ); -- Gets all terms in the descriptionCursors FUNCTION getQueryTermId( descCursor IN OntoTypes.DescriptionCursor ) RETURN OntoTypes.TermIdArray; -- Function-wrapper that deals with expanding terms with -- ontology and synonyms. This function makes it possible -- to switch the different expanding functions on/off FUNCTION expandTerms( aTermIdArray IN OntoTypes.termIdArray ) RETURN OntoTypes.termIdArray; -- Expands one termId to its relevant synonyms FUNCTION expandOneTerm( aTermId IN OntoTypes.termId ) RETURN OntoTypes.termIdArray; -- Expands a termId to its relevant koncepts in the ontology FUNCTION expandTermArrayWithOntology( aTermIdArray IN OntoTypes.termIdArray
E.12. DOKUMENTSAMMENLIGNING, IMPLEMENTATION 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
115
) RETURN OntoTypes.termIdArray; -- Expands a termId to its relevant synonyms FUNCTION expandTermArrayWithSynonyms( aTermIdArray IN OntoTypes.termIdArray ) RETURN OntoTypes.termIdArray; -- Gets all relevant descriptionId given a docId. -- Returns a cursor to the docId's FUNCTION getDescriptionIds( aDocId IN OntoTypes.docId ) RETURN Ontotypes.descriptionIdCursor; -- Compares two descriptions(one is usually a query) -- and returns a similarity-weight FUNCTION compareDescription( descId1 IN OntoTypes.descriptionID, descId2 IN OntoTypes.descriptionID ) RETURN OntoTypes.WeightRec; -- Calculates set of nounphrases similarity FUNCTION calcNPweight( descId1 IN OntoTypes.descriptionID, descId2 IN OntoTypes.descriptionID ) RETURN OntoTypes.WeightRec; --Calculates set of verbs similariti. FUNCTION calcVerbWeight( descId1 IN OntoTypes.descriptionID, descId2 IN OntoTypes.descriptionID ) RETURN OntoTypes.WeightRec; -- Calculates term similarities. FUNCTION calcTermWeight( term1 IN OntoTypes.TermId, term2 IN OntoTypes.TermId ) RETURN Ontotypes.TermWeight; -- Calculates term synonymbased similarities. FUNCTION calcTermSynoWeight( term1 IN OntoTypes.TermId, term2 IN OntoTypes.TermId ) RETURN Ontotypes.TermWeight; -- Calculates term ontological similarities. FUNCTION calcTermOntoWeight( term1 IN OntoTypes.TermId, term2 IN OntoTypes.TermId ) RETURN Ontotypes.TermWeight; END QueryEvaluator; /
E.12 Dokumentsammenligning, implementation Kildetekst len indeholder implementaionen af metoder til beskrivelsesevaluering. queryevaluator.pkb
BILAG E. KILDETEKST
116 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
CREATE OR REPLACE PACKAGE BODY QueryEvaluator AS PROCEDURE evaluate ( query IN OUT Varchar2 ) AS BEGIN DECLARE currentDocId Number; descCursor OntoTypes.descriptionCursor; currentDescRow OntoTypes.DescriptionRow; currentDescId OntoTypes.DescriptionId; -- CursorType declaration Type termIdCursorType IS REF CURSOR; termIdCursor termIdCursorType; --The Cursor currentTermId OntoTypes.TermId; currentWeightRec Ontotypes.WeightRec; termIdTable OntoTypes.termIdArray; --table for the query terms i PLS_INTEGER; --pointer for termIdTable -- Table for the expanded query terms expandedTermIdtable OntoTypes.termIdArray; -- Pointer for expandedTermIdTable j PLS_INTEGER; -- Table for the relevant descriptions descriptionIdTable OntoTypes.descriptionIdArray; c PLS_INTEGER; --pointer for descriptionIdTable -- A cursor that selects descriptionId's Desc_Id_Cursor OntoTypes.descriptionIdCursor; --An array that contains no duplicates of descriptionId dupFreeDescriptionIdTable Ontotypes.descriptionIdArray; BEGIN -- Cleaning table test_empiri. delete test_empiri; commit; -- Checking for period(.) at the end. Its a must! If (Instr(query, '.', length(query), 1) = 0) Then query := Concat(query, '.'); End if; -- Insert the query into document and return its docId Insert Into Document(URI, Content) Values('Query',query) Returning docId into currentDocId; commit; -- Call descriptionGenerator with sentenceId descCursor := DescriptionGenerator.generateDescription(currentDocId); -- Get all terms from the description cursor termIdTable := queryEvaluator.getQueryTermId(descCursor); If termIdTable.count <> 0 Then
E.12. DOKUMENTSAMMENLIGNING, IMPLEMENTATION 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
-- Expand the termIdtable accordingly to the function expandTerm expandedTermIdtable := queryEvaluator.expandTerms(termIdTable); -- Get all the relevant Descriptions from descriptionIdTermIdList -- and insert them into the descriptionIdArray c := 1; --Initialize c For i in expandedTermIdtable.first..expandedTermIdtable.last Loop currentTermId := expandedTermIdtable(i); --Get a termId -- Open a cursor that selects descriptionId's for current termId -- From descriptionIdTermIdList Open Desc_Id_Cursor For Select descriptionId From descriptionIdTermIdList Where termId = currentTermId; Loop Fetch Desc_Id_Cursor Into currentDescId; Exit When Desc_Id_Cursor%NOTFOUND; descriptionIdTable(c) := currentDescId; c := c + 1; End Loop; End Loop; Close Desc_Id_Cursor;--Close the cursor for each run -- Remove duplicates from the descriptionIdTable. -- The two following loop uses a sentinel - the number 1 - to mark -- that this descriptionId is present. Same descriptionId's -- just overwrite each other and hence you -- have eliminated all duplicates. For i In descriptionIdTable.first..descriptionIdTable.last Loop dupFreeDescriptionIdTable(descriptionIdTable(i)) := 1; End Loop; -- Loop through all the Query-descriptions and relevan -- descriptions to calculate their relevance Open descCursor For Select description.descriptionId, description.sentenceId, weight From documentSentence, description Where documentsentence.sentenceId = description.sentenceId And documentsentence.docId = currentDocId; Loop --This loop usually only iterates once, unless its a long query Fetch descCursor Into currentDescRow; Exit When descCursor%NOTFOUND; j := dupFreeDescriptionIdTable.first; While j Is Not Null Loop currentWeightRec := Queryevaluator.compareDescription( currentDescRow.descriptionId, j ); insert into queryDescId, docDescId, NPTWeight,
test_empiri(
117
BILAG E. KILDETEKST
118 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
NPSWeight, NPOWeight, verbTWeight, verbSWeight, verbOWeight) values( currentDescRow.descriptionId, j, CurrentWeightRec.NPTWeight, CurrentWeightRec.NPSWeight, CurrentWeightRec.NPOWeight, CurrentWeightRec.verbTWeight, CurrentWeightRec.verbSWeight, CurrentWeightRec.verbOWeight); commit; j := dupFreeDescriptionIdTable.Next(j); End Loop; End Loop; Close descCursor; --Close the cursor End If; dbms_output.put_line('Finished evaluating: '||currentDocId||' '||query); END; END; FUNCTION getQueryTermId( descCursor IN OntoTypes.DescriptionCursor ) RETURN OntoTypes.TermIdArray AS BEGIN DECLARE --Contains a row from the Description Cursor currentDescRow OntoTypes.DescriptionRow; currentDescId OntoTypes.DescriptionId; --CursorType declaration Type termIdCursorType IS REF CURSOR; --The Cursor termIdCursor termIdCursorType; currentTermId OntoTypes.TermId; termIdTable OntoTypes.termIdArray; -- Ppointer for termIdTable i PLS_INTEGER; BEGIN i := 1; --Initialize the termIdTable pointer --Loop through the descriptions select LOOP FETCH descCursor into currentDescRow; EXIT WHEN descCursor%NOTFOUND; currentDescId := currentDescRow.descriptionId; -- Get all the termId's from the descriptionIdTermIdList -- with descriptionId = currentDescId Open termIdCursor for
E.12. DOKUMENTSAMMENLIGNING, IMPLEMENTATION 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248
Select termid From nounphraseset, termSet Where nounphraseset.nounphraseId = termset.nounphraseId AND nounphraseset.descriptionid = currentDescId UNION select termid from verbset where verbset.descriptionId = currentDescId; --Loops through all termId and insert them into the termIdtable LOOP Fetch termIdCursor into currentTermId; Exit When termIdCursor%NOTFOUND; termIdTable(i) := currentTermId; i := i + 1; END LOOP; Close termIdCursor; End Loop; RETURN termIdTable; END; END; --Function-wrapper that deals with expanding terms with -- ontology and synonyms. This function makes it possible -- to switch the different expanding functions on/off FUNCTION expandTerms( aTermIdArray IN OntoTypes.termIdArray ) RETURN OntoTypes.termIdArray AS BEGIN DECLARE synonymTermIdArray OntoTypes.termIdArray; ontologyTermIdArray OntoTypes.termIdArray; j PLS_INTEGER; --Ad Hoc counter for loops expandedTermIdtable OntoTypes.termIdArray; --The returned array i PLS_INTEGER; --Counter for expandedTermIdtable BEGIN --Expand the termIdArray with the synonyms synonymTermIdArray := queryEvaluator.expandTermArrayWithSynonyms(aTermIdArray); --Expand the termIdArray with the ontology ontologyTermIdArray := queryEvaluator.expandTermArrayWithOntology(aTermIdArray); --Join all three arrays in extension of each other i := 1; --Initialize counter --First add the origianl terms in aTermIdArray For j in atermIdArray.first..atermIdArray.last Loop expandedTermIdtable(i) := atermIdArray(j); i := i + 1; End Loop;
119
BILAG E. KILDETEKST
120 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310
--Second, add the synonym in synonymTermIdArray If synonymTermIdArray.count <> 0 Then For j in synonymTermIdArray.first..synonymTermIdArray.last Loop expandedTermIdtable(i) := synonymTermIdArray(j); i := i + 1; End Loop; End If; --third, add the ontology-terms from ontologyTermIdArray If ontologyTermIdArray.count <> 0 Then For j in ontologyTermIdArray.first..ontologyTermIdArray.last Loop expandedTermIdtable(i) := ontologyTermIdArray(j); i := i + 1; End Loop; End If; --Last, return the whole array Return expandedTermIdtable; END; END; --Expands one termId to its relevant synonyms FUNCTION expandOneTerm( aTermId IN OntoTypes.termId ) RETURN OntoTypes.termIdArray AS BEGIN DECLARE i PLS_INTEGER; --Insert into cursor all synonyms to aTermId Cursor synonymIdCursor is Select Synonyms.termId2 From Synonyms Where Synonyms.termId1 = aTermId; currentTermId OntoTypes.termId; synonymArray OntoTypes.TermIdArray; BEGIN i := 1; Open synonymIdCursor; --Loop through cursor and insert into synonymArray Loop Fetch synonymIdCursor into currentTermId; Exit When synonymIdCursor%NOTFOUND; synonymArray(i):= currentTermId; i := i + 1; End Loop; Return synonymArray; END; END; -- Expands a complete Array of termId to its relevant ontological concepts -- And returns an array with the expanded termid's FUNCTION expandTermArrayWithOntology( aTermIdArray IN OntoTypes.termIdArray ) RETURN OntoTypes.termIdArray AS
E.12. DOKUMENTSAMMENLIGNING, IMPLEMENTATION 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372
BEGIN DECLARE i PLS_INTEGER; Type termIdCursorType IS REF CURSOR; --CursorType declaration ontoTermIdCursor termIdCursorType; --The Cursor currentTermId OntoTypes.termId; ontologyArray OntoTypes.TermIdArray; ontologyArrayCounter PLS_INTEGER; --A counter for ontologyArray BEGIN -- Initialize the counter ontologyArrayCounter := 1; -- loop through the aTermIdArray and for each termId get -- terms from ontology and insert it into synonymArray For i In aTermIdArray.FIRST..aTermIdArray.LAST Loop -- Open the cursor and select terms from ontology Open ontoTermIdCursor For Select termId1 From isa Where termid2 = aTermIdArray(i) UNION Select termId2 From isa Where termid1 = aTermIdArray(i); -- Get the ontology-terms from the cursor -- and insert it into ontologyArray Loop Fetch ontoTermIdCursor Into currentTermId; Exit When ontoTermIdCursor%NOTFOUND; ontologyArray(ontologyArrayCounter) := currentTermId; --Increment counter ontologyArrayCounter := ontologyArrayCounter + 1; End Loop; End Loop; Return ontologyArray; END; END; -- Expands a complete Array of termId to its relevant synonyms (and -- later ontological concepts). And returns an array with the -- expanded termid's FUNCTION expandTermArrayWithSynonyms( aTermIdArray IN OntoTypes.termIdArray ) RETURN OntoTypes.termIdArray AS BEGIN DECLARE i PLS_INTEGER; Type termIdCursorType IS REF CURSOR; --CursorType declaration SynoTermIdCursor termIdCursorType; --The Cursor currentTermId OntoTypes.termId; synonymArray OntoTypes.TermIdArray; synonymArrayCounter PLS_INTEGER; --A counter for synonymArray
121
BILAG E. KILDETEKST
122 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434
BEGIN --Initialize the counter synonymArrayCounter := 1; --loop through the aTermIdArray and for each termId get synonyms --and insert it into synonymArray For i In aTermIdArray.FIRST..aTermIdArray.LAST Loop --Open the cursor and select synonyms Open SynoTermIdCursor For Select Synonyms.termId2 From Synonyms Where Synonyms.termId1 = aTermIdArray(i); --Get the synonyms from the cursor and insert it into synonymArray Loop Fetch SynoTermIdCursor Into currentTermId; Exit When SynoTermIdCursor%NOTFOUND; synonymArray(synonymArrayCounter) := currentTermId; --Increment counter synonymArrayCounter := synonymArrayCounter + 1; End Loop; End Loop; Return synonymArray; END; END; --Gets all relevant descriptionId given a docId. Returns a cursor to them -- ** NOTICE THIS IS A EXPENSIVE QUERY ** (we only use it for testing) FUNCTION getDescriptionIds(aDocId IN OntoTypes.docId) RETURN Ontotypes.descriptionIdCursor AS BEGIN DECLARE descIdCur OntoTypes.descriptionIdCursor; BEGIN Open descIdCur For Select distinct(descriptionidTermIdList.descriptionid) as descriptionId From descriptionidTermIdList Where descriptionidTermIdList.termid IN( Select distinct(synonyms.termid2) as termid From synonyms Where synonyms.termid1 IN( (Select termset.termid From documentsentence, description, nounphraseset, termset Where documentsentence.sentenceId = description.sentenceId And description.descriptionId = nounphraseSet.descriptionId And nounphraseSet.NOUNPHRASEID = termset.NOUNPHRASEID And documentsentence.docid = aDocId UNION Select verbset.termId From documentsentence, description, verbset Where documentsentence.sentenceId = description.sentenceId And description.descriptionId = verbset.descriptionId And documentsentence.docid = aDocId)
E.12. DOKUMENTSAMMENLIGNING, IMPLEMENTATION 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496
UNION (Select termset.termid From documentsentence, description, nounphraseset, termset Where documentsentence.sentenceId = description.sentenceId And description.descriptionId = nounphraseSet.descriptionId And nounphraseSet.NOUNPHRASEID = termset.NOUNPHRASEID And documentsentence.docid = aDocId UNION Select verbset.termId From documentsentence, description, verbset Where documentsentence.sentenceId = description.sentenceId And description.descriptionId = verbset.descriptionId And documentsentence.docId = aDocId) )
); Return descIdCur; END; END;
-- Compares two descriptions(one is usually a query) -- and returns the similarity-weights. FUNCTION compareDescription( descId1 IN OntoTypes.descriptionID, descId2 IN OntoTypes.descriptionID ) RETURN OntoTypes.WeightRec AS BEGIN DECLARE aWeightRec OntoTypes.WeightRec; NPWeightRec OntoTypes.WeightRec; VerbWeightRec OntoTypes.WeightRec; BEGIN NPWeightRec := QueryEvaluator.calcNPWeight(descId1,descId2); VerbWeightRec := QueryEvaluator.calcVerbWeight(descId1,descId2); if NPWeightRec.NPTWeight is not null then aWeightRec.NPTWeight := NPWeightRec.NPTWeight; else aWeightRec.NPTWeight := 0; end if; if NPWeightRec.NPSWeight is not null then aWeightRec.NPSWeight := NPWeightRec.NPSWeight; else aWeightRec.NPSWeight := 0; end if; if NPWeightRec.NPOWeight is not null then aWeightRec.NPOWeight := NPWeightRec.NPOWeight; else aWeightRec.NPOWeight := 0; end if; if NPWeightRec.VerbTWeight is not null then aWeightRec.VerbTWeight := VerbWeightRec.VerbTWeight; else aWeightRec.VerbTWeight := 0; end if; if NPWeightRec.VerbSWeight is not null then aWeightRec.VerbSWeight := VerbWeightRec.VerbSWeight; else
123
BILAG E. KILDETEKST
124 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558
aWeightRec.VerbSWeight := 0; end if; if NPWeightRec.VerbOWeight is not null then aWeightRec.VerbOWeight := VerbWeightRec.VerbOWeight; else aWeightRec.VerbOWeight := 0; end if; Return aWeightRec; END; END; -- The Weight of NounPhrases is calculated with Dice's Coefficient's. -- in the inner Query (Term Level). The Total Weight is given by maximum -- NP-Weight in the Outer Query (NP Level). The Weight are separated in -- respectively Ordinary Term Weight, Ontological Weight and Synonym Weight. FUNCTION calcNPWeight( descId1 IN OntoTypes.descriptionID, descId2 IN OntoTypes.descriptionID ) RETURN OntoTypes.WeightRec AS BEGIN DECLARE aWeightRec OntoTypes.WeightRec; BEGIN -- Initialiser variable aWeightRec.NPTWeight := 0; aWeightRec.NPSWeight := 0; aWeightRec.NPOWeight := 0; aWeightRec.VerbTWeight := 0; aWeightRec.VerbSWeight := 0; aWeightRec.VerbOWeight := 0; BEGIN select max(NPWeight), max(NPSynoWeight), max(NPOntoWeight) into aWeightRec.NPTWeight, aWeightRec.NPSWeight, aWeightRec.NPOWeight from ( select NP1, NP2, 2 * sum(TermWeight) / ( avg(No_in_NP1) + avg(No_in_NP2) ) as NPWeight, 2 * sum(TermSynoWeight) / ( avg(No_in_NP1) + avg(No_in_NP2) ) as NPSynoWeight, 2 * sum(TermOntoWeight) / ( avg(No_in_NP1) + avg(No_in_NP2) ) as NPOntoWeight from ( select Total_Desc1.Desc1, Total_Desc2.Desc2, Total_Desc1.NP1, Total_Desc2.NP2, Total_Desc1.Termid_Desc1, Total_Desc2.Termid_Desc2, queryEvaluator.calcTermWeight( Total_Desc1.Termid_Desc1, Total_Desc2.Termid_Desc2) as TermWeight,
E.12. DOKUMENTSAMMENLIGNING, IMPLEMENTATION 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620
125
queryEvaluator.calcTermSynoWeight( Total_Desc1.Termid_Desc1, Total_Desc2.Termid_Desc2) as TermSynoWeight, queryEvaluator.calcTermOntoWeight( Total_Desc1.Termid_Desc1, Total_Desc2.Termid_Desc2) as TermOntoWeight, Total_Desc1.Antal_Desc1 as No_in_NP1, Total_Desc2.Antal_Desc2 as No_in_NP2 from ( select distinct Desc1.nounphraseid as NP1, Desc1.descriptionid as Desc1, Desc1.termid as Termid_Desc1, count_Desc1.Antal_Desc1 from ( select nounphraseset.DESCRIPTIONID, nounphraseset.NOUNPHRASEID, termset.TERMID from nounphraseset, termset where nounphraseset.NOUNPHRASEID = termset.NOUNPHRASEID and nounphraseset.DESCRIPTIONID = descId1 ) Desc1, ( select nounphraseset.NOUNPHRASEID, count(termset.TERMID) as Antal_Desc1 from nounphraseset, termset where nounphraseset.NOUNPHRASEID = termset.NOUNPHRASEID and nounphraseset.DESCRIPTIONID = descId1 group by nounphraseset.NOUNPHRASEID ) Count_Desc1 where Desc1.nounphraseid = Count_Desc1.nounphraseid ) Total_Desc1, ( select distinct Desc2.nounphraseid as NP2, Desc2.descriptionid as Desc2, Desc2.termid as Termid_Desc2, count_Desc2.Antal_Desc2 from ( select nounphraseset.DESCRIPTIONID, nounphraseset.NOUNPHRASEID, termset.TERMID from nounphraseset, termset where nounphraseset.NOUNPHRASEID = termset.NOUNPHRASEID and nounphraseset.DESCRIPTIONID = descId2 ) Desc2, ( select nounphraseset.NOUNPHRASEID, count(termset.TERMID) as Antal_Desc2 from nounphraseset, termset where nounphraseset.NOUNPHRASEID = termset.NOUNPHRASEID and nounphraseset.DESCRIPTIONID = descId2 group by nounphraseset.NOUNPHRASEID ) Count_Desc2 where Desc2.NOUNPHRASEID = Count_Desc2.NOUNPHRASEID ) Total_Desc2
) group by NP1, NP2
); EXCEPTION -- Dirty hack to force returning a null as result WHEN NO_DATA_FOUND THEN null; END; Return aWeightRec;
126 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682
BILAG E. KILDETEKST
END; END; -- The Weight of Verbs is calculated with Dice's Coefficient -- The Weight are separated in respectively Ordinary Term Weight, -- Ontological Weight and Synonym Weight. FUNCTION calcVerbWeight (descId1 IN OntoTypes.descriptionID, descId2 IN OntoTypes.descriptionID) RETURN OntoTypes.WeightRec AS BEGIN DECLARE aWeightRec OntoTypes.WeightRec; BEGIN -- Initialize variables aWeightRec.VerbTWeight := 0; aWeightRec.VerbSWeight := 0; aWeightRec.VerbOWeight := 0; aWeightRec.NPTWeight := 0; aWeightRec.NPSWeight := 0; aWeightRec.NPOWeight := 0; BEGIN select 2 * sum(TermWeight) / ( avg(No_in_Desc1) + avg(No_in_Desc2) ), 2 * sum(TermSynoWeight) / ( avg(No_in_Desc1) + avg(No_in_Desc2) ), 2 * sum(TermOntoWeight) / ( avg(No_in_Desc1) + avg(No_in_Desc2) ) into aWeightRec.VerbTWeight, aWeightRec.VerbSWeight, aWeightRec.VerbOWeight from ( select Total_Desc1.D1, Total_Desc2.D2, Total_Desc1.Termid_Desc1, Total_Desc2.Termid_Desc2, queryEvaluator.calcTermWeight( Total_Desc1.Termid_Desc1, Total_Desc2.Termid_Desc2) as TermWeight, queryEvaluator.calcTermSynoWeight( Total_Desc1.Termid_Desc1, Total_Desc2.Termid_Desc2) as TermSynoWeight, queryEvaluator.calcTermOntoWeight( Total_Desc1.Termid_Desc1, Total_Desc2.Termid_Desc2) as TermOntoWeight, Total_Desc1.Antal_Desc1 as No_in_Desc1, Total_Desc2.Antal_Desc2 as No_in_Desc2 from ( select Desc1.descriptionid as D1, Desc1.termid as Termid_Desc1, count_Desc1.Antal_Desc1 from ( select descriptionid, termid from verbset where descriptionid = descId1 ) Desc1, ( select descriptionid, count(termid) as Antal_Desc1 from verbset where descriptionid = descId1 group by descriptionid ) Count_Desc1 where Desc1.descriptionid = Count_Desc1.descriptionid
E.12. DOKUMENTSAMMENLIGNING, IMPLEMENTATION 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744
) Total_Desc1, ( select Desc2.descriptionid as D2, Desc2.termid as Termid_Desc2, count_Desc2.Antal_Desc2 from ( select descriptionid, termid from verbset where descriptionid = descId2 ) Desc2, ( select descriptionid, count(termid) as Antal_Desc2 from verbset where descriptionid = descId2 group by descriptionid ) Count_Desc2 where Desc2.descriptionid = Count_Desc2.descriptionid ) Total_Desc2
) group by D1, D2; EXCEPTION -- Dirty Hack to force returning a null as result WHEN NO_DATA_FOUND THEN -- optional handler null; END; Return aWeightRec; END; END; FUNCTION calcTermWeight (term1 IN OntoTypes.TermId,term2 IN OntoTypes.TermId) RETURN Ontotypes.TermWeight AS BEGIN DECLARE aWeight Ontotypes.TermWeight; BEGIN if term1 = term2 then aWeight := 1; else aWeight := 0; end if; return aWeight; END; END; -- Ontological hits is discriminated wiht a factor 2 -- compared wirh ordinary term hits. FUNCTION calcTermOntoWeight (term1 IN OntoTypes.TermId,term2 IN OntoTypes.TermId) RETURN Ontotypes.TermWeight AS BEGIN DECLARE aWeight Ontotypes.TermWeight; BEGIN select 0.5 * count(*) into aWeight from isa where (isa.TERMID1 = term1 and -- up in the ontologi isa.TERMID2 = term2) or (isa.TERMID1 = term2 and -- down in the ontologi isa.TERMID2 = term1);
127
128 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770
BILAG E. KILDETEKST
return aWeight; END; END; -- Synonym hits is discriminated wiht a factor 4 -- compared wirh ordinary term hits. FUNCTION calcTermSynoWeight (term1 IN OntoTypes.TermId,term2 IN OntoTypes.TermId) RETURN Ontotypes.TermWeight AS BEGIN DECLARE aWeight Ontotypes.TermWeight; BEGIN select 0.25 * count(*) into aWeight from synonyms where synonyms.TERMID1 = term1 and synonyms.TERMID2 = term2; return aWeight; END; END; END QueryEvaluator; /