Informatica — Universiteit van Amsterdam
Bachelor Informatica
Automatische extractie van hyponiemparen uit Wikipedia Willemijn Dijkhuizen 0344877
19 juni 2007
Supervisor: Valentin Jijkoun (ILPS, UvA) Signed: Dick van Albada (SCS, UvA)
Samenvatting Question Answering (QA) is een zoektechniek waarbij het systeem direct antwoord geeft op een door de gebruiker ingevoerde vraag. Hiervoor is onder andere kennis van woorden en hun relaties nodig. Een voorbeeld van zo’n relatie is een hyponiemrelatie: A is een (soort) B. Deze hyponiemrelaties zijn, bijvoorbeeld met behulp van bepaalde patronen, automatisch uit teksten te extraheren. In deze scriptie zal ik hyponiemrelaties extraheren uit Wikipedia, een online encyclopedie. Voor het vinden van de patronen heb ik gebruik gemaakt van reguliere expressies. Met deze regexen vind ik in totaal 29.249 hyponiemparen. Om de correctheid van de hyponiemparen te beoordelen heb ik gebruik gemaakt van drie assessors. Uit hun beoordelingen blijkt een gemiddeld aantal correcte hyponiemrelaties van 44,22%.
2
Inhoudsopgave
Lijst van figuren
5
1 Inleiding 1.1 Wordnet . . . . . . . 1.2 Wikipedia . . . . . . 1.3 Onderzoeksvragen . 1.4 Opzet van de scriptie
. . . .
6 8 10 11 11
2 Eerder onderzoek 2.1 Hearst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 IJzereef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Cornetto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12 13 13 14
3 Wordnet en Wikipedia 3.1 Wordnet → Wikipedia 3.2 Wikipedia → Wordnet 3.3 Handmatige controle . 3.4 Conclusie . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
16 17 18 19 21
4 Hyponiem-extractie 4.1 Extractiemethode 4.2 Resultaten . . . . 4.3 Foutenanalyse . . 4.4 Aanpassingen . . 4.5 Conclusie . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
22 23 24 27 28 29
. . . . .
. . . . .
. . . .
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
5 Conclusie 30 5.1 Aanbevelingen verder onderzoek . . . . . . . . . . . . . . . . . . . . . . . 31 Bibliografie
33
A Wordnetdatabase
34
B Wikixmldatabase
37
C Handmatige controle
39
D Frequente hyponiemparen
45
E Wiwo.java
49
F Wowi.java
52
3
4
Lijst van figuren
1.1 1.2
Wordnetsynsets die het substantief ‘program’ bevatten . . . . . . . . . . . 9 Voorbeeld van hyponiemrelaties tussen synsets . . . . . . . . . . . . . . . 10
3.1 3.2 3.3
Synsets die wel in Wordnet, maar niet in Wikipedia bestaan . . . . . . . . 20 Synsets die wel in Wikipedia, maar niet in Wordnet bestaan . . . . . . . . 20 Resultaten van de handmatige controle . . . . . . . . . . . . . . . . . . . . 21
4.1 4.2 4.3 4.4 4.5
Aantal ge¨extraheerde hyponiemparen per patroon . . . . . . Gevonden hyponiemparen en hun aanwezigheid in Wordnet Percentage correcte hyponiemparen kijkend naar hoofdtitels Percentage overeenstemming tussen de assessors . . . . . . Percentage correcte hyponiemparen kijkend naar synsets . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
25 25 26 27 28
A.1 De grootte van de Wordnetdatabase . . . . . . . . . . . . . . . . . . . . . 35 A.2 De structuur van de Wordnet-database . . . . . . . . . . . . . . . . . . . . 36 B.1 De structuur van de Wikixml-database . . . . . . . . . . . . . . . . . . . . 38 C.1 Wordnetsynsets die niet in Wikipedia bestaan . . . . . . . . . . . . . . . . 39 C.2 Wordnetsynsets die ook in Wikipedia bestaan . . . . . . . . . . . . . . . . 40 C.3 Wordnetsynsets die niet in ´e´en Wikipedia-synset bestaan . . . . . . . . . 44 D.1 D.2 D.3 D.4 D.5 D.6 D.7
Frequente Frequente Frequente Frequente Frequente Frequente Frequente
hyponiemparen hyponiemparen hyponiemparen hyponiemparen hyponiemparen hyponiemparen hyponiemparen
en hun correctheid . . . . . . van het ‘such as’-patroon . . van het ‘such we as’-patroon . van het ‘or other’-patroon . . van het ‘and other’-patroon . van het ‘including’-patroon . van het ‘especially’-patroon .
5
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
45 45 46 46 47 47 48
6
HOOFDSTUK 1
Inleiding
Door de komst van het internet is het mogelijk om, overal en altijd, over een enorme hoeveelheid informatie te beschikken. Webzoekmachines, zoals Google [5], retourneren op de door de gebruiker ingevoerde query (zoekopdracht) een lijst van documenten gesorteerd op relevantie. Vervolgens zal de gebruiker zelf het gewenste antwoord moeten extraheren uit een van de geretourneerde documenten. Een alternatieve zoekmethode is ‘Question Answering’ (QA) [13]. In plaats van het ingeven van enkele zoektermen, wordt er als invoer een vraag meegegeven, die door de zoekmachine wordt geanalyseerd. Vervolgens worden geschikte documenten opgehaald, het antwoord wordt hieruit ge¨extraheerd en als laatste wordt deze gepresenteerd aan de gebruiker. Het voordeel van QA is dat het niet meer nodig is om uit de geresulteerde documenten zelf het geschikte antwoord te vinden. Een voorbeeld: een gebruiker van Google is op zoek naar de geboortedatum van Alan Turing. De zoekopdracht birthday “Alan Turing” levert een wirwar aan documenten op, waarin de gebruiker vervolgens zelf nog moet gaan zoeken naar het gezochte antwoord. Met QA is het mogelijk om op de vraag When was Alan Turing born? direct het antwoord 23 June 1912 te krijgen. Voor QA is het noodzakelijk dat het systeem kennis heeft van de betekenis van woorden ´en van de relaties tussen de woorden. Een gebruikelijke bron van informatie hiervoor is een ontologie. Een ontologie is datamodel dat concepten binnen een bepaald domein representeert, en hun relaties. Zo bestaan er ontologie¨en gericht op microbiologie. Een voorbeeld van zo’n ontologie is GO [1]. Concepten zijn de entiteiten in een ontologie waartussen de relaties bestaan. De relaties tussen de concepten kunnen bijvoorbeeld ‘is a’-relaties zijn (klasse-subklasse-relatie), zoals ‘nuclear chromosome is a chromosome’, of bijvoorbeeld een ‘part of’-relatie. ‘A part of B’ betekent dat als A bestaat, het altijd een onderdeel is van B, maar A hoeft niet noodzakelijkerwijs te bestaan. Bijvoorbeeld ‘nucleus part of cell’: nuclei zijn altijd een onderdeel van een cel, maar niet alle cellen hebben nuclei.
7
Hoofdstuk 1. Inleiding In het geval van een lexicale ontologie, zoals Wordnet (zie [4] en hoofdstuk 1.1), zijn de relaties bijvoorbeeld hyponiem- en synoniemrelaties. Een synoniemrelatie tussen woord A en woord B bestaat, als semantische betekenis(A) == semantische betekenis(B) Tussen de woorden ‘woedend’ en ‘woest’ bestaat bijvoorbeeld een synoniemrelatie. Een hyponiemrelatie tussen woord A en woord B bestaat, als A is een (soort) B Net zo geldt: Woord B is een hyperoniem van woord A. Woord B ‘omvat’ dus als het ware woord A. Tussen de woorden ‘muis’ en ‘computeronderdeel’ bestaat bijvoorbeeld een hyponiemrelatie. Een hyponiemrelatie in Wordnet is dus vergelijkbaar met de is arelatie in GO. Ontologie¨en zijn een belangrijke bron van informatie voor QA. Beschouw de voorbeeldvraag: Van welk bedrijf is Steve Jobs de CEO? In ´e´en van de gevonden teksten is de zin Steve Jobs is de directeur van Apple. te vinden. Het systeem heeft dus de informatie hyponiem(Apple, computerbedrijf) hyponiem(computerbedrijf, bedrijf) synoniem(CEO, directeur) nodig om het correcte antwoord (‘Apple’) te kunnen retourneren. In deze scriptie zal ik methoden voor het automatisch extraheren van hyponiemparen bestuderen. Ik heb gekozen voor Wikipedia [12] als tekstcorpus voor de automatische extractie. Omdat Wikipedia een gestructureerde encyclopedie is, verwacht ik betrouwbare resultaten te verkrijgen. Ook bekijk ik of de verkregen hyponiemparen een nuttige aanvulling zouden kunnen zijn op Wordnet [4]. In subsectie 1.1 zal ik de structuur van de lexicale ontologie Wordnet bespreken. In subsectie 1.2 zal ik uitleggen wat Wikipedia is, en hoe de artikelen in Wikipedia zich tot elkaar verhouden. In subsectie 1.3 zal ik mijn onderzoeksvragen uiteenzetten en bespreken. Tenslotte zet ik in subsectie 1.4 de opzet van mijn scriptie uiteen.
1.1 Wordnet Een van de bekendste [3] lexicale ontologie¨en is Wordnet [4]. Wordnet is ontwikkeld door George A. Miller aan de universiteit van Princeton. Wordnet is een handmatig gecre¨eerde thesaurus, gebaseerd op resultaten van psycholinguistiek onderzoek. Voor mijn onderzoek heb ik gebruik gemaakt van de MySQL-versie van Wordnet, gemaakt door Bernard Bou [2].
8
Hoofdstuk 1. Inleiding Synset program programme plan program programme platform political platform political program program computer program computer programme program programme broadcast program programme course of study curriculum program programme syllabus program programme
Betekenis a performance (or series of performances) at a public presentation a series of steps to be carried out or goals to be accomplished a document stating the aims and principles of a political party
a sequence of instructions that a computer can interpret and execute
a radio or television show
an integrated course of academic studies
an announcement of the events that will occur as part of a theatrical or sporting event
Figuur 1.1: Wordnetsynsets die het substantief ‘program’ bevatten
De concepten in Wordnet zijn de zogenaamde synsets. Woorden met dezelfde semantische betekenis zijn geclusterd: in de database zijn synoniemen opgeslagen met een gemeenschappelijke synsetid. Zo is het woord program te vinden in meerdere synsets, zie figuur 1.1. In deze scriptie zullen de synsets aangegeven worden door accolades, met de synoniemen gescheiden door komma’s. Bijvoorbeeld: {operating system, os}. De woorden in de synsets zullen door mij altijd in kleine letters genoteerd worden. Er is dus geen verschil tussen de synset {Operating System, OS}, {Operating system, Os} en {operating system, os}. Tussen de concepten van Wordnet bestaan verscheidene relaties, zoals: • Hyponiem: X is een (soort) Y, bijvoorbeeld hyponiem(aarde, planeet) • Deelholoniem: X is een onderdeel van Y, bijvoorbeeld deelholoniem(been, lichaam) • Lidholoniem: X is een lid van Y, bijvoorbeeld lidholoniem(Nederland, EU) • Antoniem: X is een tegenstelling van Y, bijvoorbeeld antoniem(koud, warm) In Wordnet MySQL-database zijn 157.300 woorden opgeslagen, in 117.659 synsets (zie figuur A.1). Voor een overzicht van de database-structuur, zie appendix A.2. Een voorbeeld van hyponiemrelaties tussen synsets is te zien in figuur 1.2. 9
Hoofdstuk 1. Inleiding
Figuur 1.2: Voorbeeld van hyponiemrelaties tussen synsets
1.2 Wikipedia Wikipedia is een online, open source, gratis encyclopedie in verschillende talen. Wikipedia kan door iedere willekeurige bezoeker worden aangepast. Wikipedia’s Engelse editie werd op 15 januari 2001 online gezet. Momenteel bestaat Wikipedia uit ongeveer 7,2 miljoen artikelen in 251 talen. Wikipedia is op verschillende manieren gestructureerd. Alleereerst bestaan er links tussen dezelfde artikelen in de verschillende talen. Bovendien is elk artikel ingedeeld bij een of meer categorie¨en, zoals ‘Art and culture’, ‘Technology and applied sciences’ of ‘History and events’. De categorie¨en bestaan vervolgens weer uit subcategorie¨en. Ook zijn er Wikipedia-titels die niet zelf een artikel bevatten, maar direct doorverwijzen naar de bedoelde Wikipedia-pagina. Zo verwijst de Latijnse term ‘anaphalis’ direct door naar het Wikipedia-artikel over ‘pearly everlasting’, en verwijst ‘stutter’ naar het artikel over ‘stuttering’. Ik heb gebruik gemaakt van WikiXML [8], dit is een MySQL database met een gedeelte van de totale Wikipedia-collectie. De collectie bestaat o.a. uit artikelen, categorie¨en en plaatjes. De Engelse WikiXML bevat 3.840.950 pagina’s, waarvan 2.954.202 artikelen en 1.505.619 niet-doorgelinkte artikelen. Deze collectie is te downloaden op http:// ilps.science.uva.nl/WikiXML/. Een overzicht van de databasestructuur is te vinden in appendix B.1.
10
Hoofdstuk 1. Inleiding
Wikipedia maakt geen onderscheid tussen hoofdletters en minuskels. Er is dus geen verschil tussen het artikel over ‘MySQL’, ‘mysql’, ‘MYSQL’ en ‘MySqL’. In de WikiXML-structuur zijn ‘doorlink’-artikelen makkelijk te vinden, doordat ze in de redirect-tabel staan. Omdat de concepten in Wordnet synsets zijn, heb ik in Wikipedia een soortgelijk concept gecre¨eerd: alle artikelen die naar een bepaald artikel verwijzen, vormen samen met dat artikel een Wikipedia-synset (zie sectie 3.2). Voor het extraheren van hyponiemparen uit Wikipedia die nog niet in Wordnet bestaan, is het belangrijk om te werken met een groot corpus. Immers, hoe groter het corpus, hoe groter de kans op het vinden van hyponiemparen. Daarom heb ik gekozen voor de Engelse versie van Wikipedia en niet voor de Nederlandse versie, omdat Engelse versie beduidend meer artikelen bevat dan de Nederlandse, en omdat de Engelse versie door meer mensen wordt onderhouden dan de Nederlandse versie (dus de kans op fouten/onwaarheden is vermoedelijk kleiner). De in mijn onderzoek beschreven methodes zijn, behoudens enkele kleine aanpassingen, ook toepasbaar op de Nederlandse Wikipedia.
1.3 Onderzoeksvragen Het doel van mijn onderzoek is het uitbreiden van de Wordnet-ontologie met hyponiemparen ge¨extraheerd uit Wikipedia. Ik heb gekozen voor Wikipedia vanwege de grootte en vanwege het feit dat de artikelen breed geori¨enteerd zijn. Een ander voordeel is dat Wikipedia ‘up-to-date’ is. Mijn onderzoeksvragen zijn als volgt opgesteld: 1. Wat is de relatie tussen concepten (synsets) van Wordnet en de concepten (artikelingangen) van Wikipedia? Hoeveel Wordnetconcepten bevinden zich ook in Wikipedia, en vice versa? 2. Welke informatie in Wikipedia is bruikbaar voor hyponiem-extractie (b.v. paginainhoud, link-structuur, categorie¨en)? Welke extractie-methode resulteert de meest bruikbare resultaten?
1.4 Opzet van de scriptie In hoofdstuk 1 heb ik uitgelegd wat ontologie¨en zijn en hoe ze kunnen bijdragen aan QA. Ook heb ik mijn onderzoeksvragen uiteen gezet. In hoofdstuk 2 zal ik eerder onderzoek bespreken en uitleggen hoe mijn onderzoek hierop een aanvulling zal blijken. In hoofdstuk 3 beschrijf ik Wordnet en Wikipedia, en hun relatie. In hoofdstuk 4 bespreek ik hoe ik hyponiemparen uit Wikipedia heb ge¨extraheerd en hoe bruikbaar de resultaten hiervan zijn. In hoofdstuk 5 zal ik mijn conclusie uiteenzetten en aanbevelingen doen voor verder onderzoek. In bijlage A en B is een overzicht te vinden van de structuur en grootte van de Wordnet- en Wikipediadatabase. In bijlage C en D zijn overzichten te vinden van ge¨extaheerde data en in bijlage E en F is de broncode van mijn algoritmes te vinden.
11
12
HOOFDSTUK 2
Eerder onderzoek
Naar het automatisch extraheren van hyponiemparen en het opzetten en uitbreiden van ontologie¨en is veel onderzoek gedaan. In sectie 2.1 beschrijf ik hoe Marti A. Hearst in 1992 een van de eersten was die patronen bedacht waarmee hyponiemparen automatisch uit teksten kunnen worden ge¨extraheerd. In sectie 2.2 zal ik het onderzoek van Leonie IJzereef beschrijven. Tenslotte zal ik in sectie 2.3 uitwijden over een recent opgezet project genaamd Cornetto.
2.1 Hearst In het artikel van Automatic Acquisition of Hyponyms from large Text Corpora [6], beschrijft Marti Hearst een zestal patronen waarmee een hyponiemrelatie ge¨ıdentificeerd kan worden. Deze patronen zijn: NP such as (NP, )* (and|or) NP such NP as (NP, )* (and|or) NP NP (, NP)* or other NP NP (, NP)* and other NP NP (,)* including (NP, )* (and|or) NP NP (,)* especially (NP, )* (and|or) NP Het patroon tussen haken v´o´or het sterretje mag 0 of meer keer voorkomen. De afkorting NP staat voor ‘noun phrase’. Een ‘noun phrase’ is een zelfstandig naamwoord, of een zelfstandig naamwoord met het bijbehorende bijvoeglijk naamwoord, of een samenstelling (zoals bijvoorbeeld eigennamen). Hearst merkt op dat de resultaten niet altijd correct zijn. Ze maakt een onderscheid tussen fouten die ontstaan zijn door metonymie, onderspecificatie en contextgevoeligheid: Metonymie, bijvoorbeeld hyponiem(king, institution) Onderspecificatie, bijvoorbeeld hyponiem(steatornis, species) Contextgevoeligheid, bijvoorbeeld hyponiem(aircraft, target) De correctheid van de gevonden hyponiemparen laat Hearst beoordelen door vier assessors. Deze ‘judges’ beoordelen tussen de 52,2 en 76,6 procent van de hyponiemparen als correct. Het gemiddeld aantal hyponiemparen dat als correct wordt beoordeeld is 62,5%.
2.2 IJzereef Leonie IJzereef heeft in haar masterscriptie [7] onderzoek gedaan naar het automatisch extraheren van hyponiemparen uit Nederlandse kranten en uit de Nederlandse Spectrum Encyclopedie. 13
Hoofdstuk 2. Eerder onderzoek
Haar onderzoek is op te delen in twee deelonderzoeken: • Automatische extractie van hyponiemparen uit het krantencorpus met behulp van de lexicaal-syntactische patronen van Hearst, en • Automatische extractie van hyponiemparen uit het Spectrumcorpus De extractie uit het krantencorpus van 6.134.931 zinnen levert 17.494 hyponiemparen op, met een precisie van 47%. Voor het extraheren van de hyponiemparen uit het Spectrum-corpus, gebruikt IJzereef niet de patronen van Hearst, maar een andere, simpele extractieregel: het hyponiem wordt altijd gevormd door de ingang, en het hyperniem wordt gevormd door het het eerste zelfstandig naamwoord (met evt. het bijbehorende bijvoeglijk naamwoord) in de beschrijving. Bijvoorbeeld: 2 Unlimited - Nederlands/Belgische house-act. 2000-syndroom - Computerprobleem dat gepaard gaat met de overgang naar een nieuw millennium. Aa en Hunze - Gemeente in de Nederlandse provincie Drenthe. Aachen, Hans von - Duits schilder van portretten, genrestukken, religieuze, allegorische en mythologische taferelen. aal - Europese palingen (‘Anguilla anguilla’), geslacht palingen. resulteert in de volgende (correcte) hyponiemparen: hyponiem(2 Unlimited, Nederlands/Belgische house-act) hyponiem(2000-syndroom, computerprobleem) hyponiem(Aa en Hunze, gemeente) hyponiem(Aachen, Hans von, Duits schilder) hyponiem(aal, Europese paling) Zoals te zien is in het laatste voorbeeld, gebruikt IJzereef voor de verfijning van haar resultaten een zogenaamde stemmer. De stemmer herkent meervoudsvormen en zet deze om in enkelvoudsvormen. Van de 62.103 encyclopedie-ingangen heeft ze, volgens de hierboven beschreven methode, 52.063 hyponiemparen kunnen extraheren met een precisie van 87 %.
2.3 Cornetto In april 2006 zijn de VU , de UvA en de KU Leuven gestart met het project Cornetto [10]. Het doel van het project is het bouwen van een lexicale semantische database voor het Nederlands met meer dan 40.000 ingangen. De ingangen zullen het meeste generieke en centrale gedeelte van de taal omvatten, en ook een gespecialiseerde database voor het domein van het financieel recht. De database bevat onder andere: • Verticale semantische relaties, zoals hyponiem- en deel-geheelrelaties • Horizontale semantische relaties, zoals synoniemrelaties
14
Hoofdstuk 2. Eerder onderzoek
• Gecombineerde relaties, zoals lexicale functies, collocaties (zoals ‘uiltje knappen’, ‘tafel dekken’) • Een equivalentieindeling naar synsets in Wordnet Verder bevat Cornetto: • Een open-source and publiek databasesysteem met editor, import/export functies en een API • De methodologie en een toolkit voor het verkrijgen van nieuwe concepten and relaties uit corpora • De methodologie en een toolkit voor het aanpassen en tunen naar een specifiek domein Het project zal in april 2008 afgerond zijn.
15
16
HOOFDSTUK 3
Wordnet en Wikipedia
V´o´ordat ik begin met het extraheren van de hyponiemparen, wil ik weten hoe de twee bronnen zich tot elkaar verhouden. Immers: als alle Wikipedia-ingangen al in Wordnet bestaan, is het wellicht minder interessant om hyponiemparen uit Wikipedia te extraheren. Ik voer drie testen uit: 1. Automatisch: Pak een synset uit Wordnet. Controleer of minstens ´e´en woord uit de synset een Wikipedia-ingang is. 2. Automatisch: Pak een Wikipedia-synset. Controleer of minstens ´e´en woord uit de synset in een Wordnet-synset zit. 3. Handmatig: Pak 30 synsets uit Wordnet. Controleer of de woorden uit de synset een Wikipedia-ingang zijn met dezelfde semantische betekenis. Allereerst moet opgemerkt worden dat er veel meer Wikipedia-ingangen zijn, dan Wordnetlemma’s. Dit komt o.a. doordat in Wikipedia veel artikelen te vinden zijn over personen, van invloedrijke politici en bekende wetenschappers tot missverkiezingen-deelneemsters. Daar tegenover staat, dat Wordnet meer een woordenboek is, en dus werkwoorden en bijvoeglijke naamwoorden bevat. Omdat ik hyponiemparen ga extraheren, heb ik slechts de zelfstandig naamwoorden en hun samenstellingen bekeken. Er dient opgemerkt te worden, dat het interessant zou zijn om te kijken of de Wordnet naar Wikipedia-missers w´el te vinden zijn in Wiktionary. Wiktionary is een zusterproject van Wikipedia. Wiktionary is geen encyclopedie, maar een woordenboek. Helaas staat het project op dit moment nog in de kinderschoenen. In dit hoofdstuk zal ik de resultaten bespreken van de controle van Wordnet naar Wikipedia (sectie 3.1), van Wikipedia naar Wordnet (sectie 3.2) en tenslotte de handmatige controle van 30 Wordnet-synsets naar Wikipedia (sectie 3.3).
3.1 Wordnet → Wikipedia Om te kijken hoeveel Wordnetsynsets ook in Wikipedia bestaan, moet ik alle synsets langslopen. Ik pak alleen de synsets die als ‘noun’ gelabeled zijn. Immers: een hyponiempaar bestaat altijd uit twee zelfstandig naamwoordelijke synsets. Ik maak de ontwerpbeslissing om een ‘hit’ te retourneren, als minstens 1 van de woorden uit de synset een Wikipedia-artikel is. Allereerst pak ik een synset uit Wordnet met behulp van de volgende MySQL-query: SELECT synset.synsetid, lemma FROM synset, sense, word WHERE synset. synsetid = sense.synsetid AND sense.wordid = word.wordid AND pos=’n’
17
Hoofdstuk 3. Wordnet en Wikipedia
Ik verander de spaties in underscores, omdat de titels in Wikipedia geen spaties bevatten. Vervolgens controleer ik of minstens ´e´en woord uit de synset een Wikipedia-ingang is: SELECT page title FROM page WHERE page title=’WORDNET LEMMA’ Als dat zo is, retourneert mijn algoritme een ‘hit’, en als dat niet zo is een ‘mis’. Voor een compleet overzicht van mijn broncode, zie appendix F. Het aflopen van alle 82.115 noun-synsets, resulteert in 65.468 hits en 16.647 missers. Het percentage hits is dus 79,73%. Ik heb steeksproefgewijs een veertigtal missers gepakt en geanalyseerd (zie figuur 3.1). Voor de leesbaarheid heb ik steeds ´e´en woord uit de synset als voorbeeld genomen. Synsets die w´el in Wordnet zitten, maar niet in Wikipedia (de zgn. ‘missers’) zijn voornamelijk zelfstandig naamwoorden afgeleid van werkwoorden, zoals woorden eindigend op -ing, -ion of -ment (bijvoorbeeld ‘a capella singing’, ‘dereliction’, ‘attainment’). Omdat deze substantieven zijn afgeleid van een werkwoord, zijn ze vaak zeer specifiek en/of behoren ze tot jargon. De foutenindeling in figuur 3.1 is dan ook niet uniek: sommige woorden behoren tot meerdere foutenklasses. Voor de overzichtelijkheid heb ik in de tabel elk woord slechts in ´e´en foutenklasse ingedeeld. Als laatste dient te worden opgemerkt dat sommige ‘missers’ te wijten zijn aan het feit dat WikiXML niet de volledige Wikipedia beslaat. Zo staat bijvoorbeeld ‘joggle’ niet in de WikiXML-collectie, terwijl het wel als online Wikipedia-ingang te vinden is. Hetzelfde geldt voor ‘arithmetic operation’ en ‘improvement’.
3.2 Wikipedia → Wordnet Om te kijken hoeveel Wikipedia-synsets ook in Wordnet bestaan, moet ik alle Wikipediasynsets langslopen. De synsets in Wikipedia zijn de titel van de ingang en alle ingangen die verwijzen naar dat artikel (dus de titels met redirect=1). Hiervoor maak ik een nieuwe database aan, met Wikipedia-synsets. CREATE TABLE synset SELECT target id AS synsetid, page.page id, page title FROM (page NATURAL LEFT OUTER JOIN redirect) WHERE page namespace=’article’; UPDATE synset SET synsetid = page id WHERE synsetid IS NULL; Nu heb ik dus een synset-tabel, waarin alle page titles die naar een gemeenschappelijk artikel verwijzen, ook een gemeenschappelijk synsetid hebben (namelijk het page id van het betreffende artikel). Ook is nog te zien wat de originele page id van het artikel is. Vervolgens loop ik deze synsets af en controleer of ze in Wordnet zitten, net zoals ik de synsets van Wordnet afliep en controleerde of ze in Wikipedia zaten: SELECT synsetid, page title FROM synset Ik verander de underscores in spaties, omdat de lemma’s in Wordnet geen underscores bevatten.
18
Hoofdstuk 3. Wordnet en Wikipedia
Daarna controleer ik of minstens ´e´en woord uit de synset een Wordnet-lemma is: SELECT lemma FROM word WHERE lemma=’WIKIPEDIA TITLE’ Als dat zo is, retourneert mijn algoritme een ‘hit’, en als dat niet zo is een ‘mis’. Voor een compleet overzicht van mijn broncode, zie appendix E. Dit resulteert in het aflopen van 1.505.619 synsets: 107.035 hits en 1.398.584 missers. Het percentage hits is dus 7,11 %. Deze lage ‘hitrate’ was te verwachten, vanwege het verschil in grootte van de beide databases en ook omdat Wikipedia veel meer personen als ingang heeft dan Wordnet. Voorbeelden van woorden die w´el in Wikipedia, maar niet in Wordnet zitten zijn bijvoorbeeld automerken (‘audi ag’), wiskundige uitdrukkingen (‘polynomial equations’, ‘antisymmetric relation’), softwarenamen (‘apache’), computernamen (‘atari 5100’), data (‘april 22nd’), bands (‘beastie boys’) en figuren uit de oudheid (‘andronicus rhodius’). Ook valt op dat Wikipedia veel subonderwerpen heeft met betrekking tot landen, zoals economie, geografie en militie. De subonderwerpen staan over het algemeen niet in Wordnet en leveren dus veel missers op. Een overzicht van voorbeelden van missers is weergegeven in figuur 3.2. Voor de leesbaarheid heb ik steeds ´e´en woord uit de synset als voorbeeld genomen.
3.3 Handmatige controle Bij de voorgaande automatische controles, moet worden opgemerkt dat de check niet volledig correct is. Immers: het algoritme controleert niet, of een woord in het ene lexicon dezelfde semantische betekenis heeft als in het andere lexicon. Anders gezegd: het algoritme kan niet controleren of het hetzelfde woord is gevonden, of een homoniem. Een voorbeeld: het woord ‘seal’ zit bij Wordnet in de synsets {seal, stamp} en {seal, varnish}. Als het algoritme gaat controleren of ‘seal’ een Wikipedia-ingang is, kan het algoritme niet controleren of het ook de juiste betekenis van het woord ‘seal’ heeft gevonden. Daarom doe ik ook een handmatige controle van 30 synsets uit Wordnet naar Wikipedia. Een Wordnet-synset zit ´of wel in Wikipedia, ´of niet in Wikipedia, ´of de Wordnet-synset zit in meerdere Wikipedia-synsets. Een voorbeeld van een onterechte hit is bijvoorbeeld de synset {complex fraction, compound fraction}. Het woord ‘complex fraction’ levert onterecht een hit op met de synset {complex number, complex numbers, complex field, complex numbers, complex number field, mod-arg form, imaginary plane, complex arithmetic, argand diagram, wessel diagram, c number, ...}. De Wikipedia-synset beschrijft complexe nummer in het algemeen, terwijl de Wordnet-synset het over ‘a fraction with fractions in the numerator or denominator’ heeft. Een voorbeeld van een onterechte mis is is bijvoorbeeld de Wordnet-synset {delta hepatitis, hepatitis delta}. Geen van deze woorden staat in Wikipedia, en dus retourneert het algoritme uit sectie 3.1 een mis. Dit is ten onrechte, omdat de synset {hepatitis d, hepatitis delta virus, deltavirus, hepatitis delta antigens, hepatitis d, chronic, hep d} hetzelfde begrip omvat. 19
Hoofdstuk 3. Wordnet en Wikipedia
Foutklasse Substantief in ion-vorm
Substantief in ing-vorm Substantief in ment-vorm Substantief in try-vorm ‘Te breed’ substantief ‘Te smal’ substantief Verkeerde schrijfwijze Slang
Voorbeelden disorganization, disunion, divarication, enervation, exasperation, exenteration, viatication, corrugation humanization, intensification, dereliction, irruption contracting, mail-order buying, a cappella singing, averting, housecleaning, cost cutting attainment, underachievement, preferment, improvement, debarment, incasement deviltry, fetometry, idiolatry, symbolatry, topolatry masterstroke, biont chess move, hebrew lesson, horseshow, ice show, athletic game, bait casting cost analysis (cost benefit analysis), dint (dent) dekko, shufti, choky, titfer
Figuur 3.1: Synsets die wel in Wordnet, maar niet in Wikipedia bestaan
Foutklasse Landen met subonderwerp Scheikundige verbinding Wiskundige term Informatica-term Softwarenaam Computernaam Automerk Voetbalclub Datum Band Muziek Persoon uit de oudheid Schilder Film Citaat
Voorbeelden bulgaria/communications, bulgaria/government, bulgaria/geography, bulgaria/transnational issues 1,2-propadiene polynomial equations, antisymmetric relation, absolute infinity, ackermann algorithm abstract datatype, alphanumeric keyboards, apl programming language apache atari 5100 audi ag a. s. roma april 22nd beastie boys, boysband the alphabet song, piano trios, opus 70 andronicus rhodius, alexander of greece aelbert j. cuyp a clockwerk orange, an american in paris charlie don’t surf
Figuur 3.2: Synsets die wel in Wikipedia, maar niet in Wordnet bestaan
20
Hoofdstuk 3. Wordnet en Wikipedia
Ik heb dertig willekeurige Wordnet-synsets gepakt, en handmatig gekeken of deze in Wikipedia bestonden. De resultaten van deze handmatige controle zijn te vinden in figuur 3.3. Een volledig overzicht van de specifieke Wordnet-synsets en hun Wikipediaequivalenten is te vinden in appendix C. Klasse Synsets die ook in WP bestaan Synsets die niet in WP bestaan Synsets die in meerdere WP-synsets bestaan Totaal
Aantal 22 6 2 30
Percentage 73,33 % 20,00 % 6,66 % 100 %
Figuur 3.3: Resultaten van de handmatige controle
3.4 Conclusie In dit hoofdstuk heb ik bekeken hoe Wordnet en Wikipedia zich tot elkaar verhouden. Als niet alle Wikipediasynsets in Wordnet bestaan, en het percentage is groter dan 0 (dus de twee bronnen beschrijven niet een volledig verschillend domein) zijn de ge¨extraheerde hyponiemparen van toegevoegde waarde. Het aflopen van Wikipediasynsets naar Wordnet-synsets resulteert in een percentage hits van 7,11%. Omgekeerd resulteert het aflopen van Wordnet-synsets naar Wikipedia-synsets in een percentage hits van 79,73%. Omdat het algoritme, zoals omschreven in sectie 3.1, niet de betekenis van woorden kan controleren, heb ik ook een handmatige controle van Wordnetnaar Wikipedia-synsets gedaan. Het percentage hits is dan 73,33%. Deze resultaten beantwoorden mijn eerste onderzoeksvraag zoals gesteld in sectie 1.3.
21
22
HOOFDSTUK 4
Hyponiem-extractie
In het vorige hoofdstuk is geconcludeerd dat hyponiemparen, ge¨extraheerd uit Wikipedia, een nuttige aanvulling zouden kunnen zijn op het Wordnet-corpus. Voor het automatisch extraheren van de hyponiemparen, heb ik gebruik gemaakt van de patronen voorgesteld door Marti Hearst [6]. Ik heb gekozen voor Java als programmeertaal, omdat Java met behulp van een MySQL-connecter eenvoudig kan communiceren met de database. Ook maak ik gebruik van de java.util.regex-API voor patternmatching met reguliere expressies.
4.1 Extractiemethode De patronen van Hearst brengen een aantal moeilijkheden met zich mee: • De extractie van de ‘noun phrases’ • Het bepalen of de ‘noun phrases’ in het enkelvoud of in het meervoud staan • Het omvormen van de ‘noun phrases’ in het meervoud naar het enkelvoud Om deze problemen te voork´omen heb ik ervoor gekozen om alleen hyponiemparen te extraheren die bestaan uit twee Wikipedia-ingangen. Immers: de ingangen zijn in principe zelfstandig naamwoorden. Bovendien is er de conventie dat een ingang in het enkelvoud geformuleerd is (behalve bij namen van volkeren en biologisch-taxonomische aanduidingen). De extractie van de hyponiemparen gebeurt volgens de patronen van Hearst. Om deze patronen te vinden, heb ik gebruik gemaakt van reguliere expressies. Een reguliere expressie is een string dat volgens bepaalde syntax-regels een set van andere strings ‘matcht’. Ook kunnen er kwantoren worden gebruikt: een plusteken geeft aan dat het ervoorstaande teken tenminste ´e´en keer moet voorkomen, een vraagteken geeft aan dat het ervoorstaande teken ten hoogste ´e´en keer mag voorkomen en een sterretje geeft aan dat het ervoorstaande teken nul of meer keer mag voorkomen. Door middel van vierkante haken kan er een klasse worden afgebakend. [abc] matcht bijvoorbeeld ‘a’, ‘b’, of ‘c’ en [a-z] matcht met een willekeurige onderkast (‘kleine letter’). Voorts heeft Java zogenaamde ‘predefined character classes’ zoals \d voor een digit (cijfer), \s voor een whitespace character (zoals de spatie en de tab) en \w voor een woord-karakter. \w drukt dus dezelfde reguliere expressie uit als [a-zA-Z 0-9]. De Wikipedia-artikelen in de WikiXML-database zijn opgeslagen in XML-formaat. XML (eXtensible Markup Language) [11] is een markup-taal die de structuur van een tekst omschrijft. In de XML-code van een Wikipedia-artikel kunnen links voorkomen naar andere Wikipedia-artikelen. Zo’n link ziet er bijvoorbeeld als volgt uit.
23
Hoofdstuk 4. Hyponiem-extractie
High-functioning autism Juist in deze links ben ik ge¨ınteresseerd: ik wil immers slechts Wikipedia-ingangen als hyponiemparen vinden. Voor het vinden van een Wikipedia-ingang, heb ik de volgende regex gebruikt:
[ \w]+ Vervolgens heb ik deze string (opgeslagen onder de variabelenaam we van Wikipediaentry) gebruikt om de zes patronen van Hearst te herkennen. we,? such as ((we,? )*(and |or ))*we such we,? as ((we,? )*(and |or ))*we we (,? we)* or other we we (,? we)* and other we we,? including ((we,? )*(and |or ))*we we,? especially ((we,? )*(and |or ))*we De door mij gevonden hyponiemparen heb ik opgeslagen in de tabel hyponym. Ik heb slechts de page id’s van de hyponiemparen opgeslagen (dus het getal achter wx:page id="). Door middel van een join met de page-tabel kan ik de bijbehorende titels terugvinden. In dit hoofdstuk bespreek ik de resultaten van mijn hyponiemextractie (sectie 4.2), analyseer ik de fouten (section 4.3) en tenslotte bespreek ik eventuele aanpassingen van de patronen die tot een beter resultaat zouden kunnen leiden (sectie 4.4).
4.2 Resultaten Als ik alle Wikipedia-artikelen afloop, en de vermoedelijke hyponiemparen gevonden met behulp van de Hearst-patronen opsla, krijg ik 29.249 vermoedelijke hyponiemparen. Wanneer hetzelfde hyponiempaar meer dan ´e´en keer in de artikelen wordt gevonden, wordt dit hyponiempaar ook meer dan ´e´en keer in de database opgeslagen. Het totaal aantal gevonden unieke hyponiemparen is 23.958.1 Een overzicht van de verschillende extractiepatronen en hun resultaten is te vinden in figuur 4.1. Er dient opgemerkt te worden dat het totaal aantal unieke hyponiemparen, niet hetzelfde is als de som van alle unieke hyponiemparen per patroon. Immers: een paar kan ook gevonden worden met behulp van verschillende patronen. Vervolgens heb ik de gevonden hyponiemparen opgedeeld in drie klasses: allebei de synsets bestaan als concept in Wordnet, ´of ´e´en van de synsets bestaat als concept in Wordnet, ´of geen van de synsets bestaat als concept in Wordnet. De resultaten van deze indeling staan in figuur 4.2. Het percentage hyponiemparen dat ook als hyponiempaar in Wordnet bestaat zal dus nooit hoger kunnen zijn dan 56,24%. 1 Omdat de linkstructuur in Wikipedia niet aangeeft naar wat voor soort pagina de link verwijst, heb ik ook enkele hyponiemparen tussen artikelen en categorie¨en gevonden. Deze paren kunnen evengoed correct zijn, maar ik heb ze in deze scriptie niet verder onderzocht.
24
Hoofdstuk 4. Hyponiem-extractie Patroon such as such we as or other and other including especially Totaal
Aantal hyponiemparen 12.463 157 1.584 4.705 8.869 1.471 29.249
Aantal unieke hyponiemparen 10.997 144 756 4.106 7.904 1.304 23.958
Figuur 4.1: Aantal ge¨extraheerde hyponiemparen per patroon Klasse Allebei de woorden bestaan in Wordnet Geen van de woorden bestaat in Wordnet Een van de woorden bestaat in Wordnet Totaal
Aantal 16.401 3.721 9.043 29.165
Percentage 56,24 12,76 31,00 100,00
Figuur 4.2: Gevonden hyponiemparen en hun aanwezigheid in Wordnet
Als ik de hoofdtitels van de hyponiemparen bekijk, blijkt dat van alle 29.249 gevonden paren er 1.572 (waarvan 978 uniek) als direct hyponiempaar in Wordnet bestaan. Het percentage gevonden hyponiemparen dat ook in Wordnet als direct hyponiempaar bestaan, is dus 5,37%. Met ‘direct’ hyponiempaar, bedoel ik dat tussen de synsets een hyponiemrelatie bestaat zonder tussenschakels. In mijn algoritme zijn dus hyponiem(‘canid’, ‘carnivore’) en hyponiem(‘carnivore’, ‘placental’) wel ’directe’ hyponiemparen, maar hyponiem(‘canid’, ‘placental’) is dat niet (zie figuur 1.2). In een eventueel vervolgonderzoek is het interessant om uit te zoeken, hoeveel van de door mij gevonden hyponiemparen ook in Wordnet een hyponiempaar zijn, met N tussenschakels. Omdat de concepten in Wikipedia de synsets zijn, zouden eigenlijk de hyponiemrelaties tussen de synsets moeten worden bekeken. Helaas is dit een zeer tijdrovend karwei. Een voorbeeld: er is een hyponiemrelatie gevonden tussen synset1 en synset2. Synset1 bestaat uit tien Wikipedia-titels, en synset2 uit vijftien. In het slechtste geval kost het dus honderdvijftig checks voordat met zekerheid te zeggen is of het hyponiempaar als direct hyponiempaar in Wordnet bestaat. Vanwege de complexiteit van deze berekening, heb niet alle 29.249 hyponiemparen kunnen aflopen, maar een steekproef van 10.000 paren. Hiervan waren 1.550 paren als direct hyponiempaar in Wordnet te vinden: een hitpercentage van 15,50%. Dit percentage ligt dus inderdaad aanzienlijk hoger dan wanneer alleen de hoofdtitels bekeken worden. Om de precisie van de gebruikte extractiepatronen te bepalen, hebben drie mensen een steekproef van 150 paren beoordeeld (voor elk extractiepatroon 25 paren). De beoordeling gebeurde aan de hand van de volgende handleiding:
25
Hoofdstuk 4. Hyponiem-extractie Patroon such as such we as or other and other including especially Totaal
Gemiddelde 34,67 65,33 50,67 41,33 34,67 38,67 44,22
Minstens ´e´en 48,00 80,00 68,00 52,00 48,00 56,00 58,67
Meerderheid 32,00 64,00 52,00 36,00 32,00 36,00 42,00
Unaniem 24,00 52,00 32,00 36,00 24,00 24,00 32,00
Figuur 4.3: Percentage correcte hyponiemparen volgens vier statistische waardes
Een hyponiempaar wordt goed gerekend, als: • Ze in een directe of indirecte hyponiemrelatie tot elkaar verhouden • Beide woorden goed gespeld zijn • Beide woorden in enkelvoud staan Alle andere paren zijn fout. De resultaten zijn vervolgens afgeleid van de volgende statistische waardes, zoals gebruikt door Rydin [9] en IJzereef [7]: Gemiddelde: Gemiddeld percentage paren dat door de assessors als correct is beoordeeld. Tenminste ´e´en: Percentage paren dat door tenminste ´e´en van de assessors als correct is beoordeeld. Meerderheid : Percentage paren dat door tenminste twee assessors als correct is beoordeeld. Unaniem: Percentage paren dat door alle assessors als correct is beoordeeld. Een overzicht van de resultaten van deze steekproef, gemeten met bovenstaande statistische waardes, staat in figuur 4.3. De extractiemethode volgens het patroon ‘such we as’ levert de beste resultaten op: 65,33% van de hyponiemparen zijn steeksproefgewijs als correct beoordeeld. Hierbij moet w´el opgemerkt worden dat de ‘such we as’-methode ook de minste hyponiemparen extraheert. De recall is dus laag, maar de precisie is hoog. De extractiemethode volgens het ‘such as’- en het ‘including’-patroon levert de slechtste resultaten op: een gemiddelde van 34,67% van de hyponiemparen is als correct beoordeeld. Hierbij moet w´el opgemerkt worden dat de ‘such as’- en de ‘including’-methode ook de meeste hyponiemparen extraheert. De precisie is dus laag, maar de recall is hoog. In figuur 4.4 is een overzicht van de overeenstemming tussen de verschillende assessors te vinden. Omdat de ‘agreement’ tussen de assessors hoog is, zijn de resultaten betrouwbaar te noemen. Omdat de hyponiemparen niet uniek hoefde te zijn, heb ik ook gekeken naar de 10 hyponiemparen die het vaakst gevonden zijn. Ik vermoedde, dat de hyponiemparen die een significant aantal keer gevonden zouden zijn, ook een grotere kans zouden hebben op correctheid. Helaas is het correctheidspercentage van de top 10 hyponiemparen niet aanzienlijk hoger dan de resultaten van de steekproef (zie appendix D.1).
26
Hoofdstuk 4. Hyponiem-extractie Patroon such as such we as or other and other including especially Totaal
1 en 2 88,00 92,00 84,00 84,00 80,00 80,00 84,66
1 en 3 80,00 72,00 60,00 84,00 88,00 68,00 75,33
2 en 3 80,00 80,00 80,00 92,00 88,00 80,00 83,33
Gemiddelde 82,66 81,33 74,66 86,66 85,33 76,00 81,11
Figuur 4.4: Percentage overeenstemming tussen de assessors
Het percentage als correct beoordeeld frequente hyponiemparen voor het ‘such as’- en het ‘such we as’-patroon levert w´el een aanzienlijke verbetering op. Het aantal correcte paren is zelfs 100% (zie appendix D.2 en D.3).
4.3 Foutenanalyse Voor de foutenanalyse heb ik gekeken naar de twee hoofdartikelen van de hyponiemparen, en niet naar de gehele synsets, omdat dit de beoordeling een stuk gecompliceerder zou maken. Vanwege deze keuze, is het van belang om de als fout beoordeelde hyponiemparen nader te bekijken: wellicht dat een ander woord in de synset wel degelijk resulteert in een goed hyponiempaar. Van alle foute hyponiemparen is een groot aantal wel een holoniempaar, zoals: hyponiem(texas, united states) These were the descendants of slaves who escaped their slave-masters in the sugar cane farms in United States, especially Texas. hyponiem(argentina, latin america) There are campaigns to raise money both for her to have surgery and establish a foundation in Argentina and other Latin American countries. hyponiem(china, east asia) NET 25 reaches TV audiences on the East Coast, United States and Hawaii and the whole of Asia including Japan, Hong Kong, Taiwan, China as well as Australia. hyponiem(germany, europe) She played in professional basketball leagues in Europe, including Germany, Spain and Italy. Bij het tweede voorbeeld is de extractie niet goed gegaan, omdat Wikipedia niet ‘Latin American country’ als ingang heeft, maar alleen ‘Latin America’. Dit is dus een negatieve uitwerking van de keuze om alleen hyponiemparen te extraheren die Wikipedia-ingangen zijn. Deze holoniemparen zorgen verreweg voor de meeste ruis in de resultaten. Ook zijn er veel foutieve hyponiemparen te vinden waarvan ´e´en van de twee woorden in het meervoud staat: 27
Hoofdstuk 4. Hyponiem-extractie
hyponiem(arsenic, heavy metals) Flue gas desulferization contain many heavy metals, including arsenic, lead, mercury, nickel, vanadium, zinc, selenium and radium, which are dangerous if released into the environment. hyponiem(yanyuwa language, australian aboriginal languages) It is found in such Dravidian languages as well as such Australian Aboriginal languages as Kaititj, Yanyuwa, and Iwaidja, at least in careful speech. hyponiem(pickles, vegetable) Lahmacun is often sprinkled with lemon juice, and then served rolled up with pickles or other vegetables including tomatoes, peppers, and onions. hyponiem(economics, social sciences) Sociology is a relatively new academic discipline among other social sciences including economics, political science, anthropology, history, and psychology. Van deze vier voorbeelden zijn er drie alsnog correct, indien een ander woord uit de synset bekeken wordt: hyponiem(arsenic, heavy metal) hyponiem(yanyuwa language, australian aboriginal language) hyponiem(economics, social science) Ik heb alle als fout beoordeelde hyponiemparen opnieuw beoordeeld, nu kijkend naar de gehele synsets. Dit levert aanzienlijk betere resultaten op. De resultaten van deze verbeterde controle zijn te vinden in figuur 4.5. Patroon such as such we as or other and other including especially Totaal
Gemiddelde 52,00 88,00 80,00 64,00 48,00 60,00 65,33
Figuur 4.5: Percentage correcte hyponiemparen kijkend naar synsets
4.4 Aanpassingen Om meer vermoedelijke hyponiemparen te extraheren, zou ik de patronen van Hearst gedeeltelijk kunnen aanpassen. Zo kunnen bijvoorbeeld alle patronen met (and |or ) aangepast worden tot: (and |or |and/or |or/and |and especially |or especially |and/or especially |or/and especially ) Dit patroon matcht bijvoorbeeld met ‘dietary minerals such as iron, magnesium, phosphorus, copper, and especially manganese’. 28
Hoofdstuk 4. Hyponiem-extractie
Een ander probleem is, dat het lidwoord niet altijd weggelaten wordt ´of niet altijd een onderdeel van de ingang is. Zie bijvoorbeeld: ‘such as personal computers, the World Wide Web, email, Bulletin board systems, IRC, instant messaging and mobile phone text messaging’. Als oplossing hiervoor zou je de patronen kunnen versoepelen, z´o dat een lidwoord tussen de Wikipedia-ingangen toegestaan is. Bijvoorbeeld voor het ‘such as’-patroon: we,? such as ((the |an? )?(we,? )*(and |or ))* (the |an? )?we
4.5 Conclusie In dit hoofdstuk heb ik antwoord gegeven op de tweede onderzoeksvraag zoals gesteld in sectie 1.3. Het automatisch extraheren van hyponiemparen uit Wikipedia levert een totaal van 29.249 hyponiemparen op. De extractiemethode volgens het patroon ‘such we as’ levert de beste resultaten op: 65,33% van de hyponiemparen zijn steeksproefgewijs als correct beoordeeld. De extractiemethode volgens het ‘such as’- en het ‘including’-patroon levert de slechtste resultaten op: een gemiddelde van 34,67% van de hyponiemparen is als correct beoordeeld. Het percentage correcte hyponiemparen, ongeacht het extractiepatroon, resulteert in een gemiddelde van 44,22%. Dit percentage is vergelijkbaar met de resultaten van IJzereef [7]. Indien naar de hyponiemrelaties tussen synsets wordt gekeken, in plaats van tussen de hoofdartikelen, is dit percentage zelfs een stuk hoger: gemiddeld zijn 65,33% van de hyponiemparen correct.
29
30
HOOFDSTUK 5
Conclusie
In deze scriptie heb ik hyponiemparen uit Wikipedia ge¨extraheerd als aanvulling op de Wordnet-ontologie. Allereerst heb ik bekeken hoe de twee bronnen zich tot elkaar verhouden. Het percentage Wordnet-synsets dat ook als synset in Wikipedia bestaat is 7,11%. Dit is onder andere toe te wijzen aan het feit dat Wikipedia 1.505.619 synsets bevat, tegenover 82.115 synsets in Wordnet. Het aantal Wordnet-synsets dat in Wikipedia bestaat is 79,73%. Als men ook steekproefgewijs kijkt naar de betekenis van de synsets, vindt men een overlapping van 73,33%. Hieruit blijkt dat de twee bronnen ongeveer hetzelfde domein omvatten, en dat Wikipedia een bruikbare bron zou kunnen zijn voor het uitbreiden van de Wordnet-ontologie. Voor het automatische extraheren van de hyponiemparen uit Wikipedia heb ik gebruik gemaakt van een zestal patronen, zoals voorgesteld door Hearst [6]. Bovendien heb ik gebruik gemaakt van de linkstructuur in Wikipedia: ik heb slechts de woorden bekeken, die een Wikipedia-ingang zijn. Dit brengt een aantal voordelen met zich mee (een Wikipedia-ingang staat bijvoorbeeld in principe altijd in het enkelvoud), maar ook een aantal nadelen (sommige hyponiemparen worden niet goed ge¨extraheerd, omdat een bijvoeglijk naamwoord naar een bijbehorend zelfstandig naamwoordelijke Wikipediaingang verwijst). Het aantal hyponiemparen dat met de Hearst-patronen gevonden wordt is 29.249. Om de correctheid van de hyponiemparen te beoordelen heb ik gebruik gemaakt van drie assessors. Uit hun beoordelingen blijkt een gemiddeld aantal correcte hyponiemrelaties van 44,22%. Dit resultaat is vergelijkbaar met resultaten uit eerder onderzoek. Omdat de concepten in Wikipedia niet de titels (ingangen) zijn, maar de synsets, is het percentage correcte hyponiemrelaties zelfs iets hoger. Wanneer er gekeken wordt naar de hyponiemrelaties tussen de synsets, in plaats van tussen de titels, vindt men een correctheidspercentage van 65,33%.
5.1 Aanbevelingen verder onderzoek IJzereef beschreef in haar scriptie [7], naast de patronen van Hearst, nog een andere methode om hyponiemparen te extraheren uit een encyclopedie (zie hoofdstuk 2.2). Zij behaalde hier zeer goede resultaten mee: uit een steekproef bleken 87% van de hyponiemparen correct te zijn. Wellicht is het interessant om deze methode ook toe te passen op het Wikipedia-corpus. De artikelen van Wikipedia zijn op verschillende manieren aan elkaar gelinkt. Zo is elk artikel bijvoorbeeld geplaatst in ´e´en of meer categorie¨en. In een eventueel vervolgonderzoek zou gekeken kunnen worden of er een verband kan worden gevonden tussen de linkstructuur tussen de categorie¨en en semantische relaties tussen synsets. 31
Hoofdstuk 5. Conclusie
Ook is het interessant om te kijken of er meer hyponiemparen gevonden kunnen worden met de aangepaste Hearst-patronen zoals besproken in sectie 4.4. Tenslotte loont het de moeite om een grondigere controle uit te voeren of de gevonden hyponiemparen in Wordnet bestaan. Door tijdsgebrek heb ik slechts naar directe hyponiemparen kunnen kijken. In een eventueel vervolgonderzoek is het interessant om ook de hyponiemparen m´et tussenliggende synsets te bekijken. Deze ‘diepe’ controle komt ook van pas bij de passende volgende stap in dit onderzoek: het implementeren van de ge¨extraheerde hyponiemparen in Wordnet. Dit is een gecompliceerde taak, omdat er onder meer handmatig gekeken dient te worden naar de semantische overlap tussen de Wikipedia- en Wordnet-synsets.
32
Bibliografie
[1] M. et al. Ashburner. Gene ontology: tool for the unification of biology. Nature Genetics, 25(1):25–29, 2000. [2] Bernard Bou. Wordnet SQL builder. wnsqlbuilder/, 2005–2007.
http://sourceforge.net/projects/
[3] Andras Csomai. Wordnet bibliography. http://lit.csci.unt.edu/~wordnet/. [4] Fellbaum. WordNet: An Electronic Lexical Database (Language, Speech, and Communication). The MIT Press, May 1998. [5] Google. Websearch engine. http://www.google.com/, 1998–2007. [6] Marti A. Hearst. Automatic acquisition of hyponyms from large text corpora. In Proceedings of the 14th conference on Computational linguistics, pages 539–545, Morristown, NJ, USA, 1992. Association for Computational Linguistics. [7] Leonie IJzereef. Automatische acquisitie van hyponiemrelaties uit grote tekstcorpora. Master’s thesis, Rijksuniversiteit Groningen, 2004. [8] Information and Language Processing Systems Group. http://ilps.science.uva.nl/WikiXML/, 2007.
Wikixml collection.
[9] Sara Rydin. Building a hyponymy lexicon with hierarchical structure. In Proceedings of the ACL-02 workshop on Unsupervised lexical acquisition, pages 26–33, Morristown, NJ, USA, 2002. Association for Computational Linguistics. [10] P. Vossen, K. Hofmann, M. de Rijke, E. Tjong Kim Sang, and K. Deschacht. The Cornetto Database: Architecture and User-Scenarios. DIR, pages 89–96, 2007. [11] W3C. Extensible markup language (XML). http://www.w3.org/XML/, 1996–2007. [12] Wikipedia. The free encyclopedia. http://en.wikipedia.org/, 2001–2007. [13] Wikipedia. Question answering. http://en.wikipedia.org/w/index.php?title= Question_answering, 2007.
33
34
BIJLAGE A
Wordnetdatabase
Onderstaand figuur geeft een overzicht weer van de grootte van de Wordnetdatabase. De gegevens uit deze tabel zijn tot stand gekomen door middel van verschillende countqueries op de Wordnetdatabase. Woordsoort Zelfst. nmwrd. Werkwoord Bijv. nmwrd. Bijwoord Totaal
Strings 117.798 11.529 23.492 4.481 157.300
Synsets 82.115 13.767 18.156 3.621 117.659
W/B-paren 146.312 25.047 30.002 5.580 206.941
Figuur A.1: De grootte van de Wordnetdatabase Een overzicht van de structuur van de Wordnet-database is te vinden in figuur A.2. Voor het aflopen van de Wordnetsynsets om te bekijken of deze ook in Wikipedia bestaan, heb ik de word-tabel gejoind met de sense- en synset-tabel. De uitkomst van de controle (een hit, 1, of geen hit, 0) heb ik opgeslagen in het door mij aangemaakte inwp-veld in de synset-tabel. Een woord is opgeslagen in het veld lemma in de word-tabel. Omdat ´e´en woord meerdere betekenissen kan hebben, kan een bepaald lemma (met bijbehorend wordid) meerdere synsetid’s hebben. De gehele synset kan bestaan uit zelfstandig naamwoorden, werkwoorden, bijwoorden of bijvoeglijke naamwoorden. Dit wordt aangegeven in het pos-veld (Part Of Speech) in de synset-tabel. Om te bekijken of de gevonden hyponiemrelaties in Wordnet bestaan, heb ik ook de semlinkref-tabel gebruikt. Een hyponiemrelatie wordt aangegeven met de waarde 1 in het linkid-veld.
35
Bijlage A. Wordnetdatabase
Figuur A.2: De structuur van de Wordnet-database
36
BIJLAGE B
Wikixmldatabase
Een van de belangrijkste tabellen in de Wikixml-database is de page-tabel. In deze tabel is onder andere het unieke page id van het artikel opgeslagen, de page title (de ingang) en en de page namespace. Ik heb alleen naar de page titles gekeken met page namespace="article". In de xmlpage-tabel is de XML-inhoud van de artikelen opgeslagen. Deze heb ik gebruikt voor het extraheren van de hyponiemparen. In de door mij aangemaakte hyponym-tabel heb ik vervolgens mijn resultaten opgeslagen: pageid1 om het page id van het hyponiem aan te duiden, evenzo het pageid2 voor het hyporoniem. In het pattern-veld is het patroon waarmee het paar gevonden is opgeslagen: ik heb de zes patronen genummerd van 1 tot en met 6. De sourceid geeft het page id aan van de XML-pagina waarin het paar gevonden is. Het inwn-veld bevat een 1 als het paar als direct hyponiempaar in Wordnet bestaat, of een 0 als dat niet zo is. In de synset-tabel heb ik de Wikipedia-synsets opgeslagen, zoals omschreven in sectie 3.2. In de synsetinwn-tabel heb ik de resultaten van de controle van Wikipedia naar Wordnet opgeslagen. Het inwn-veld staat op 1 als de synset in Wordnet is gevonden, of op 0 als de synset niet in Wordnet is gevonden.
37
Bijlage B. Wikixmldatabase
Figuur B.1: De structuur van de Wikixml-database
38
BIJLAGE C
Handmatige controle
In deze appendix worden de resultaten weergegeven van de handmatige controle van Wordnetsynsets naar Wikipedia-synsets. Aan de linkerzijde staan de Wordnetsynsets afgebeeld, en aan de rechterzijde de Wikipedia-synsets. Het onderstreepte woord van de Wikipedia-synset is de titel van het hoofdartikel (dus het artikel waar de andere titels naar verwijzen). In figuur C.1 staan de Wordnetsynsets die niet in Wikipedia bestaan, in figuur C.2 zijn de Wordnetsynsets te vinden die ook in Wikipedia bestaan, en tenslotte zijn in figuur C.3 de Wordnetsynsets weergegeven die wel in Wikipedia bestaan, maar gefragmenteerd over meerdere Wikipedia-synsets. 101806061 pea-chick peachick 110522759 recoverer rescuer saver 103630262 lab bench laboratory bench 114905197 antimonial lead hard lead 102238474 family tingidae tingidae 113736057a complex fraction compound fraction Figuur C.1: Wordnetsynsets die niet in Wikipedia bestaan a
Mijn algoritme levert wel een hit op, maar het gezochte concept staat niet in Wikipedia. Zie 3.3
39
Bijlage C. Handmatige controle
102828115 belt belt ammunition belted ammunition 111921395 anaphalis margaritacea pearly everlasting cottonweed 201579340 fork pitchfork
↔
107059028 dead march funeral march 112713664 genus phellodendron phellodendron
↔
106811419 hexadecimal number system hexadecimal system sexadecimal number system
↔
↔
↔
↔
890922 belta belts geographic belt 2691518 pearly everlasting anaphalis large-flowered everlasting 799436 pitchfork fork (digging) spading fork 1147421 funeral march 1028352 phellodendron cork-tree cork tree phellodendron amurense 13263 hexadecimal hexidecimal hex digit 0x base 16 hexagesimal hexdecimal numering system sexidecimal sexadecimal hexadecimal system hex number hexadecimal number hexadecimal numeral system a (digit) b (digit) c (digit) hexadecimals base-16
Figuur C.2: Wordnetsynsets die ook in Wikipedia bestaan a
Dit is een disambiguation-page. Het bedoelde artikel is ‘Belt (firearm)’
40
Bijlage C. Handmatige controle
111203287 nernst walther hermann nernst
↔
106323822 dangling modifier misplaced modifier
↔
102240223 cimicidae family cimicidae
↔
110480730 prof professor
↔
101801876 alectura lathami brush turkey
↔
75876 walther nernst hermann nernst nernst walther hermann nernst 218169 dangling modifier dangling participle hanging participle misplaced modifier 952459 bedbug bedbugs bed bug bed bugs cimex lectularius cimicidae 167800 professor prof adjunct professor asoc. prof. assistant professor associate professor ast. prof. emeritus professor prof. professora professors professorship professorships professor emerita professor emeritus professor of mathematics university professor visiting professor 2298176 australian brush-turkey alectura alectura lathami brush-turkey brush turkey bush turkey catheturus lathami scrub turkey
Figuur C.2: Wordnetsynsets die ook in Wikipedia bestaan
41
Bijlage C. Handmatige controle 114131247 delta hepatitis hepatitis delta
↔
109507909 aengus angus angus og oengus
↔
114548343 disability disablement handicap impairment
↔
109845849 beat beatnik
↔
113206584 adiantum genus adiantum
↔
214294 hepatitis d hepatitis delta virus deltavirus hepatitis delta antigens hepatitis d, chronic hep d 85890 aengus anghus angus mac og oengus aengus the young aonghus aengus mac oc oengus mac oc aenghus ´oengus ´oc ´oengus oenghus 56285 disability disabled impaired impairment physically challenged disable physical disability differently abled differently-abled mobility impairment people with disabilities disabilities, people with disibility disabilites physically impaired differently-abled people 62385 beatnik beatnick beatniks 481433 maidenhair fern maidenhair adiantum venus’ hair
Figuur C.2: Wordnetsynsets die ook in Wikipedia bestaan 42
Bijlage C. Handmatige controle
112853482 knotted marjoram origanum majorana sweet marjoram majorana hortensis 114504103 chromosomal aberration chromosomal anomaly chromosonal disorder chrosomal abnormality
↔
103144486 cubbyhole pigeonhole
↔
111733769 genus helleborus helleborus
↔
112856680 mentha pulegium pennyroyal
↔
112653762 blackberry blackberry bush
↔
↔
18956 marjoram origanum majorana sweet marjoram knotted marjoram 6415314 chromosome abnormalities chromosomal aberration chromosomal disorder chromosome abnormality chromosomal abnormalities chromosome aberration chromosomal disorders chromosopathy 4560652 pigeonhole messagebox cubbyhole cubby hole pigeonhole communication teacher’s mailbox message box messagebox internal mailbox internal mail box internal mail 874539 hellebore helleborus white hellebore christmas rose 102502 pennyroyal mentha pulegium pennyrile penny royal pennroyal 72339 blackberry blackberry vines blackberry (fruit) rubus fruticosus marionberry blackberries black-berry black berry
Figuur C.2: Wordnetsynsets die ook in Wikipedia bestaan 43
Bijlage C. Handmatige controle
112003167 picris echioides bitterweed oxtongue bristly oxtongue bugloss
↔
110355449 entrant fledgeling fledgling freshman neophyte newbie newcomer starter
↔
↔
↔ ↔
↔
648867 picris langdebeef oxtongue 3169168 echium bugloss 7199332 fledgling 155526 student classes of students college freshman college Sophomore college student fresh-meat ... 760387 neophytea 136116 newbie b00n chobo clueless newbie floob fr00b frodo nibblins froobie fruity noob n00b ... 748004 starter
Figuur C.3: Wordnetsynsets die niet in ´e´en Wikipedia-synset bestaan a
Dit is een disambiguation-page. De correcte betekenis van neophyte verwijst naar het Newbie-artikel
44
BIJLAGE D
Frequente hyponiemparen
Omdat ik ervoor gekozen heb ook dubbele hyponiemparen in de database op te slaan, lijkt het interessant te bekijken of de hyponiemparen die het vaakst voorkomen ook een hoger correctheidspercentage hebben. Ik heb per patroon de meeste frequente hyponiemparen bekeken en de correctheid van elk paar bepaald. In figuur D.1 zijn de meest frequente hyponiemparen, ongeacht het extractiepatroon, te vinden. In figuur D.2 tot en met figuur D.7 zijn de meest frequente hyponiemparen per patroon weergegeven. N 614 129 43 36 34 34 31 28 26 25
Hyponiem church mosque linux microsoft windows insect euro insect germany academy award for best picture india
Hyperoniem christianity islamic operating system operating system invertebrate european union arthropod europe academy awards film Correctheidspercentage
Titels F F G G G F G F F F 40%
Synsets F F G G G F G F G F 50%
Figuur D.1: Frequente hyponiemparen en hun correctheid
N 23 16 14 13 10 10 9 9 9 9 9
Hyponiem linux microsoft windows eagle google coal wheat petroleum protein french language krill bulimia nervosa
Hyperoniem operating system operating system bird of prey search engine fossil fuel cereal fossil fuel macromolecule romance languages crustacean eating disorder Correctheidspercentage
Titels G G G G G G G G F G G 90%
Synsets G G G G G G G G G G G 100%
Figuur D.2: Frequente hyponiemparen ge¨extraheerd met het ‘such as’-patroon
45
Bijlage D. Frequente hyponiemparen
N 5 3 3 3 3 2
Hyponiem epic poetry ballad folklore mythology legend bing crosby
Hyperoniem genre genre genre genre genre artist Correctheidspercentage
Titels G G G G G G 100%
Figuur D.3: Frequente hyponiemparen ge¨extraheerd met het ‘such we as’-patroon
N 614 129 8 5 5 4 3 3 3 3 3 3 3 3
Hyponiem church mosque automobile university tank silk earth’s atmosphere bank bacteria building chalk canoe light planet
Hyperoniem christianity islam vehicle higher education armoured fighting vehicle fabric gas financial institution microorganism structure calcium boat electromagnetic radiation astronomical object Correctheidspercentage
Titels F F G F G G F G G G G G G G 71,43%
Synsets F F G G G G F G G G G G G G 78,57%
Figuur D.4: Frequente hyponiemparen ge¨extraheerd met het ‘or other’-patroon
46
Bijlage D. Frequente hyponiemparen
N 34 29 23 19 19 16 11 7 7 6 6 6 6 6 6 6 6 6
Hyponiem euro insect submarine landing craft insect linux gregorian chant carbon dioxide tagalog language krill human united kingdom chicken ant spyware germany virus fray
Hyperoniem european union invertebrate submersible amphibious warfare arthropod unix chant greenhouse gas languages of the philippines crustacean mammal commonwealth of nations bird insect malware europe malware buffyverse Correctheidspercentage
Titels F G G F G G G G F G G F G G G F G G 72,22%
Synsets F G G F G G G G F G G G G G G F G G 77,78%
Figuur D.5: Frequente hyponiemparen ge¨extraheerd met het ‘and other’-patroon
N 26 25 16 15 15 15 15 15 14 13 10 10 10
Hyponiem academy award for best picture india linux aramaic language human hebrew language germany microsoft windows phoenician languages japan china tasmania french fries
Hyperoniem academy awards film operating system history of the alphabet mammal history of the alphabet europe operating system history of the alphabet asia asia australia fast food Correctheidspercentage
Titels F F G F G F F G F F F F G 30,77%
Synsets G F G G G G F G G F F F G 61,54%
Figuur D.6: Frequente hyponiemparen ge¨extraheerd met het ‘including’-patroon
47
Bijlage D. Frequente hyponiemparen
N 11 11 10 6 5 5 5 5 4 4 4 4 4 4 4 4
Hyponiem bee wasp hornet south slavs india scandinavia france germany brazil roman catholic church pennsylvania ohio ant beetle indiana maryland
Hyperoniem insect insect insect slavic peoples asia europe europe europe south america christianity united states united states insect insect united states united states Correctheidspercentage
Titels G G G F F F F F F F F F G G F F 31,25%
Synsets G G G G F F F F F F F F G G F F 37,50%
Figuur D.7: Frequente hyponiemparen ge¨extraheerd met het ‘especially’-patroon
48
BIJLAGE E
Wiwo.java
import j a v a . s q l . ∗ ; import j a v a . i o . ∗ ; import j a v a . u t i l . ∗ ; p u b l i c c l a s s Wiwo { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { // I n i t i a l i s e e r de v a r i a b e l e n Statement stmt = n u l l ; ResultSet rs = null ; Statement stmt2 = n u l l ; Statement stmt3 = n u l l ; ResultSet rs2 = null ; S t r i n g output = ” ” ; int synsetid = 0; b o o l e a n synsetnew = t r u e ; boolean h i t b o o l = true ; try { C l a s s . forName ( ”com . mysql . j d b c . D r i v e r ” ) . n e w I n s t a n c e ( ) ; Connection conn = DriverManager . g e t C o n n e c t i o n ( ” j d b c : mysql : / / l o c a l h o s t / w i k i x m l e n ? u s e r=r o o t ” ) ; stmt = conn . c r e a t e S t a t e m e n t ( ) ; stmt3 = conn . c r e a t e S t a t e m e n t ( ) ; Connection conn2 = DriverManager . g e t C o n n e c t i o n ( ” j d b c : mysql : / / l o c a l h o s t / wordnet30 ? u s e r=r o o t ” ) ; stmt2 = conn2 . c r e a t e S t a t e m e n t ( ) ; //Pak a l l e s y n s e t s u i t de door mij aangemaakte ’ s y n s e t ’− t a b e l r s = stmt . executeQuery ( ”SELECT s y n s e t i d , p a g e t i t l e FROM s y n s e t ORDER BY s y n s e t i d ” ) ; // Loop a l l e r e s u l t a t e n a f w h i l e ( r s . next ( ) ) { // I n i t i a l i s e e r de b o o l e a n ’ synsetnew ’ op t r u e synsetnew = t r u e ; // Als de v o r i g e s y n s e t i d h e t z e l f d e was i s de b o o l e a n synsetnew f a l s e i f ( s y n s e t i d == r s . g e t I n t ( ” s y n s e t i d ” ) ) { synsetnew = f a l s e ; }
49
Bijlage E. Wiwo.java
// Als we een nieuwe s y n s e t ingaan , k i j k o f e r een mis i s , en z e t h i t b o o l op f a l s e else { i f ( h i t b o o l == f a l s e ) { // Er i s een mis ! stmt3 . executeUpdate ( ”UPDATE s y n s e t i n w n SET inwn=0 WHERE s y n s e t i d =’”+s y n s e t i d+” ’ ” ) ; } hitbool = false ; } i f ( synsetnew == t r u e ) { // S l a de r e s u l t a t e n op synsetid = rs . getInt (” synsetid ”) ; output = r s . g e t S t r i n g ( ” p a g e t i t l e ” ) ; // Als de output u n d e r s c o r e s bevat , v e r a n d e r d i e i n s p a t i e s output = output . r e p l a c e A l l ( ” ” , ” ” ) ; // Als de output s t r i n g h a a k j e s bevat ( vanwege d i s a m b i g u a t i o n ) , g o o i d i e h a a k j e s en a l l e s dat e r t u s s e n s t a a t weg output = output . r e p l a c e A l l ( ” \ \ ( [ \\w] ∗ \ \ ) ” , ”” ) ; // Als de output s t r i n g b a c k s l a s h bevat , voeg een e s c a p e − char toe output = output . r e p l a c e A l l ( ” \\\\ ” , ” \\\\\\\\ ” ) ; // Als de output s t r i n g a p o s t r o f e s bevat , voeg een e s c a p e − char toe output = output . r e p l a c e A l l ( ” \ \ ’ ” , ” \ \ \ \ ’ ” ) ; // K i j k o f d e z e s t r i n g ook i n Wordnet s t a a t r s 2 = stmt2 . executeQuery ( ”SELECT lemma FROM word WHERE lemma=’”+output+” ’ ” ) ; i f ( r s 2 . next ( ) ) { // Er i s een h i t ! stmt3 . executeUpdate ( ”UPDATE s y n s e t i n w n SET inwn=1 WHERE s y n s e t i d =’”+s y n s e t i d+” ’ ” ) ; hitbool = true ; } else { hitbool = false ; } } //We k i j k e n a l l e e n v e r d e r i n d e z e l d e s y n s e t , z o l a n g e r geen hit optreed i f ( synsetnew == f a l s e && h i t b o o l == f a l s e ) { output = r s . g e t S t r i n g ( ” p a g e t i t l e ” ) ; output = output . r e p l a c e A l l ( ” ” , ” ” ) ; output = output . r e p l a c e A l l ( ” \ \ ( [ \\w] ∗ \ \ ) ” , ”” ) ; output = output . r e p l a c e A l l ( ” \\\\ ” , ” \\\\\\\\ ” ) ; output = output . r e p l a c e A l l ( ” \ \ ’ ” , ” \ \ \ \ ’ ” ) ; r s 2 = stmt2 . executeQuery ( ”SELECT lemma FROM word WHERE lemma=’”+output+” ’ ” ) ;
50
Bijlage E. Wiwo.java
i f ( r s 2 . next ( ) ) { // Er i s een h i t ! stmt3 . executeUpdate ( ”UPDATE s y n s e t i n w n SET inwn=1 WHERE s y n s e t i d =’”+s y n s e t i d+” ’ ” ) ; hitbool = true ; } else { hitbool = false ; } } } //We moeten de a l l e r l a a t s t e n i e t v e r g e t e n i f ( h i t b o o l == f a l s e ) { // Er i s een mis ! stmt3 . executeUpdate ( ”UPDATE s y n s e t i n w n SET inwn=0 WHERE s y n s e t i d =’”+s y n s e t i d+” ’ ” ) ; } } // S c h r i j f e v t . e x c e p t i e s naar h e t scherm c a t c h ( E x c e p t i o n ex ) { System . out . p r i n t l n ( ” Connecten met DB i s m i s l u k t ” ) ; System . out . p r i n t l n ( ex . getMessage ( ) ) ; } } }
51
52
BIJLAGE F
Wowi.java
import j a v a . s q l . ∗ ; import j a v a . i o . ∗ ; import j a v a . u t i l . ∗ ; p u b l i c c l a s s Wowi { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { // I n i t i a l i s e e r de v a r i a b e l e n Statement stmt = n u l l ; ResultSet rs = null ; Statement stmt2 = n u l l ; ResultSet rs2 = null ; Statement stmt3 = n u l l ; S t r i n g lemma = ”” ; int synsetid = 0; b o o l e a n synsetnew = t r u e ; boolean h i t b o o l = true ; try { C l a s s . forName ( ”com . mysql . j d b c . D r i v e r ” ) . n e w I n s t a n c e ( ) ; Connection conn = DriverManager . g e t C o n n e c t i o n ( ” j d b c : mysql : / / l o c a l h o s t / wordnet30 ? u s e r=r o o t ” ) ; stmt = conn . c r e a t e S t a t e m e n t ( ) ; stmt3 = conn . c r e a t e S t a t e m e n t ( ) ; Connection conn2 = DriverManager . g e t C o n n e c t i o n ( ” j d b c : mysql : / / l o c a l h o s t / w i k i x m l e n ? u s e r=r o o t ” ) ; stmt2 = conn2 . c r e a t e S t a t e m e n t ( ) ; //Pak a l l e noun−s y n s e t s u i t Wordnet r s = stmt . executeQuery ( ”SELECT s y n s e t . s y n s e t i d , lemma FROM s y n s e t , s e n s e , word WHERE s y n s e t . s y n s e t i d=s e n s e . s y n s e t i d AND s e n s e . wordid=word . wordid AND s y n s e t . pos =’n ’ ORDER BY s y n s e t . synsetid ”) ; // Loop a l l e r e s u l t a t e n a f w h i l e ( r s . next ( ) ) { // I n i t i a l i s e e r de b o o l e a n ’ synsetnew ’ op t r u e synsetnew = t r u e ; // Als v o r i g e s y n s e t i d h e t z e l f d e was i s de b o o l e a n synsetnew false i f ( s y n s e t i d == r s . g e t I n t ( ” s y n s e t i d ” ) ) { synsetnew = f a l s e ;
53
Bijlage F. Wowi.java
} // Als we een nieuwe s y n s e t ingaan , hoog e v t . de m i s s e r s op en z e t h i t b o o l s o w i e s o op f a l s e else { i f ( h i t b o o l == f a l s e ) { // Er i s een mis ! stmt3 . executeUpdate ( ”UPDATE s y n s e t SET inwp=0 WHERE s y n s e t i d =’”+s y n s e t i d+” ’ ” ) ; } hitbool = false ; } // Als we een nieuwe s y n s e t hebben , check o f h e t een h i t o f mis i s i f ( synsetnew == t r u e ) { // S l a de lemma en de s y n s e t i d op lemma = r s . g e t S t r i n g ( ”lemma” ) ; synsetid = rs . getInt (” synsetid ”) ; // Als de output s t r i n g a p o s t r o f e s bevat , voeg een e s c a p e − char toe lemma = lemma . r e p l a c e A l l ( ” \ \ ’ ” , ” \ \ \ \ ’ ” ) ; // Als de output s p a t i e s bevat , v e r a n d e r d i e i n u n d e r s c o r e s lemma = lemma . r e p l a c e A l l ( ” ” , ” ” ) ; // K i j k o f d e z e s t r i n g ook i n Wikipedia s t a a t . r s 2 = stmt2 . executeQuery ( ”SELECT p a g e t i t l e FROM page WHERE p a g e t i t l e =’”+lemma+” ’ ” ) ; i f ( r s 2 . next ( ) ) { // Er i s een h i t ! stmt3 . executeUpdate ( ”UPDATE s y n s e t SET inwp=1 WHERE s y n s e t i d =’”+s y n s e t i d+” ’ ” ) ; hitbool = true ; } else { hitbool = false ; } } //We k i j k e n a l l e e n v e r d e r i n d e z e l d e s y n s e t , z o l a n g e r geen hit optreed i f ( synsetnew == f a l s e && h i t b o o l == f a l s e ) { lemma = r s . g e t S t r i n g ( ”lemma” ) ; lemma = lemma . r e p l a c e A l l ( ” \ \ ’ ” , ” \ \ \ \ ’ ” ) ; lemma = lemma . r e p l a c e A l l ( ” ” , ” ” ) ; r s 2 = stmt2 . executeQuery ( ”SELECT p a g e t i t l e FROM page WHERE p a g e t i t l e =’”+lemma+” ’ ” ) ; i f ( r s 2 . next ( ) ) { // Er i s een h i t ! stmt3 . executeUpdate ( ”UPDATE s y n s e t SET inwp=1 WHERE s y n s e t i d =’”+s y n s e t i d+” ’ ” ) ; hitbool = true ;
54
Bijlage F. Wowi.java
} else { hitbool = false ; } } } //We moeten de a l l e r l a a t s t e n i e t v e r g e t e n i f ( h i t b o o l == f a l s e ) { // Er i s een mis ! stmt3 . executeUpdate ( ”UPDATE s y n s e t SET inwp=0 WHERE s y n s e t i d =’”+s y n s e t i d+” ’ ” ) ; } } // S c h r i j f e v t . e x c e p t i e s naar h e t scherm c a t c h ( E x c e p t i o n ex ) { System . out . p r i n t l n ( ” Connecten met DB i s m i s l u k t ” ) ; System . out . p r i n t l n ( ex . getMessage ( ) ) ; } } }
55